一、实验目的与要求
1.熟悉及掌握在MATLAB中能够处理哪些格式的图像;
2.熟练掌握在MATLAB中如何读取图像及图像的属性信息(大小、颜色、亮度(灰度)、宽度、高度等);
3.掌握如何在MATLAB中按照指定要求存储一副图像的方法;
4.了解图像的算术运算在数字图像中的初步应用,并体会其处理的过程和处理前后图像的变化;
二、实验内容及步骤
1.图像的读取,显示和存储,以及提取图像的基本信息:
(1)使用imread()函数读取一副图像,假设其名为lena.bmp,存入一个矩阵(或数组)中;
(2)利用whos命令提取该读入图像lena.bmp的基本信息;
(3)利用imshow()函数显示图像lena.bmp;
(4)利用imwrite()函数存储该图像,命名为lena2.jpg
(5)联合使用figure, subplot(), imshow()函数将lena.bmp和lenaRGB.bmp显示出来,观察两幅图像的质量。
lena.bmp为灰度图,单通道;lenaRGB.bmp为RGB图像,三通道
clc;clear;close all;
img1 = imread("lena.bmp");
img2 = imread("lenaRGB.bmp");
whos img1;
imshow(img1)
title('lena.bmp');
figure;
subplot(121)
imshow(img1)
title('lena.bmp')
subplot(122)
imshow(img2)
title('lenaRGB.bmp');
2.图像间的代数运算:
(1)使用imread()函数读入图像:lenaRGB.bmp和pout.jpg
(2)进行图像的加法运算(自己写代码);
(3)调用imadd函数进行两幅图像的相加;
(4)比较第二步和第三步的结果。
(5)重复以上步骤,进行图像的相减,相乘相除运算(分别与直接使用图像处理工具箱中的代数运算函数进行结果比较。
进行图像操作前要将图片变为相同尺寸,使用MATLAB的基本算术符(+、-、*、/ 等)可以执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型。
源码:
%加法
clc;clear;close all;
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = img1+img2
img4 = imadd(img1,img2)
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相加后图像')
subplot(144)
imshow(img4)
title('imadd后图像');
%减法
clc;clear;close all;
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = img1-img2
img4 = imsubtract(img1,img2)
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相减后图像')
subplot(144)
imshow(img4)
title('imsubtract后图像');
%乘法
clc;clear;close all;
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = uint16(img1).*uint16(img2)
img4 = immultiply(uint16(img1),uint16(img2))
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相乘后图像')
subplot(144)
imshow(img4)
title('immultiply后图像');
%除法
clc;clear;close all;
img1 = imread("lenaRGB.bmp");
img1 = imresize(img1,[268 216])
img2 = imread("pout.jpg");
img3 = double(img1)./double(img2)
img4 = imdivide(double(img1),double(img2))
figure;
subplot(141)
imshow(img1)
title('lena原始图像')
subplot(142)
imshow(img2)
title('pout原始图像')
subplot(143)
imshow(img3)
title('相除后图像')
subplot(144)
imshow(img4)
title('immultiply后图像');
clc;clear;close all;
I = imread("cameraman.bmp");
I1=1.2*I;
subplot(1,2,1);imshow(I);title('原始图像');
subplot(1,2,2);imshow(I1);title('线性运算图像');
clc;clear;close all;
img1 = imread("cameraman.bmp");
img2 = immultiply(img1,1.2)
figure;
subplot(121)
imshow(img1)
title('cameraman原始图像')
subplot(122)
imshow(img2)
title('cameraman缩放运算图像');