资源描述
应用MATLAB软件提供的函数,编制读取一幅TIF文件,并使其直方图均衡化,并存为另一幅TIF文件。显示均衡化前后的图像。使用MATLAB软件本身提供的直方图均衡化函数,并且比较均衡化前后的直方图。提示:使用imread、imrwrite、imshow、imhist、subplot等命令
程序:
i=imread("cameraman.tif");
%读入图像I;
j=histeq(i);
%将图像i进行直方图均衡化为图像j;
subplot(1,2,1),imshow(i);
subplot(1,2,2),imshow(j);
%将图形窗口分成两个区域分别显示图像i,j;
figure,subplot(1,2,1),imhist(i),
subplot(1,2,2),imhist(j);
%新建一图形窗口,显示均衡化前后的灰度直方图;
imwrite(j,"cameraman1.tif");
%将图像j另存为文件cameraman1.tif;
图1 图像的直方图均衡化
图2 直方图均衡化前后的直方图
小结: 直方图均衡化可将图像的灰度范围拉开,让灰度频率较小的灰度级变大,让灰度直方图在较大的动态范围内趋于一致.
二、应用MATLAB软件提供的函数,编制读取两幅TIF文件I和J,并使其相加得到图像K1、使其相减得到图像K2,比较四幅图像的灰度直方图。
提示:使用imadd、imsubtrac等命令
程序:
I = imread("rice.tif");
J = imread("cameraman.tif");
%读取TIF文件I和J;
K1 = imadd(I,J);
%将图像I和J相加得到图像K1;
K2=imsubtract(I,J);
%将图像I和J相减得到图像K2;
subplot(2,2,1);inshow(I);
subplot(2,2,1);imshow(I);
subplot(2,2,2);imshow(J);
subplot(2,2,3);imshow(K1);
subplot(2,2,4);imshow(K2);
%在图形窗口显示图像I,J,K1,K2;
subplot(2,2,1);imhist(I);
subplot(2,2,2);imhist(J);
subplot(2,2,3);imhist(K1);
subplot(2,2,4);imhist(K2);
%在图形窗口显示图像I,J,K1,K2的灰度直方图;
图3 图像的相加和相减
图4 原图,相加,相减后的灰度直方图比较
小结:
在使用IMADD函数时得到如下错误信息:
??? Function imlincomb expected its array input arguments (A1, A2, ...) to be the same size.
Error in ==> imlincomb at 85
Z = imlincombc(images, scalars, output_class);
Error in ==> imadd at 67
Z = imlincomb(1.0, X, 1.0, Y, output_class);
根据提示,该函数使用时要求相加的两个图像大小需一致;我选择了三张尺寸为256*256的图像,它们的大小分别为43.5KB,63.7KB,2.67KB,其中使用2.67KB的图像时无法正常相加,出现上面的错误信息.使用IMSUBTRACT函数遇到相同的情况
三、应用MATLAB软件提供的函数,编制读取一幅TIF文件I,并且使其放大2倍得到图像J1、将I逆时针方向旋转60度得到图像J2,都采用双线性插值的方式。显示二图。提示:使用imresize、imrotate等命令
程序:
I=imread("pout.tif");
%读取TIF文件I;
J1=imresize(I,2,’bilinear’);
%采用双线性插值方式将图像I放大2倍得到图像J1;
J2=imrotate(I,60,"bilinear");
%采用双线性插值方式将图像I旋转60。
imshow(I);
%显示图像I;
figure,subplot(1,2,1),imshow(J1),subplot(1,2,2),imshow(J2);
%新建图像窗口显示图像J1,J2;
图6 采用双线性插值法进行2倍放大和60度旋转
小结:
双线性的输出象素值是它在输入图像中2*2领域采样点的平均值.从图中看出,处理后的图像更加平滑,但插值后的图像变模糊,损失了一些细节.
展开阅读全文