1、实验二 图像的灰度变换增强一、实验目的1、 理解数字图像处理中点运算的基本作用;2、 掌握对比度调整与灰度直方图均衡化的方法。二、实验原理1、对比度调整如果原图像 f(x, y)的灰度范围是 m, M,我们希望对图像的灰度范围进行线性调整,调整后的图像 g(x, y)的灰度范围是 n, N,那么下述变换:yxf)(就可以实现这一要求。MATLAB 图像处理工具箱中提供的 imadjust 函数,可以实现上述的线性变换对比度调整。imadjust 函数的语法格式为:J = imadjust(I,low_in high_in, low_out high_out)J = imadjust(I, lo
2、w_in high_in, low_out high_out)返回原图像 I 经过对比度调整后的新图像 J。其中low_in high_in为原图像中要变换的灰度范围,low_out high_out指定了变换后的灰度范围,灰度范围可以用 空矩阵表示默认范围,默认值为 0, 1(注意:灰度范围只能在 01 之间) 。例:I = imread(pout.tif);J = imadjust(I, 0.3 0.7, ); %输出灰度范围为默认范围,即为0, 1imshow(I), figure, imshow(J)不使用 imadjust 函数,利用 matlab 语言直接编程也很容易实现灰度图像的
3、对比度调整。但运算的过程中应当注意以下问题, 由于我们读出的图像数据一般是 uint8 型,而在MATLAB 的矩阵运算中要求运算变量为 double 型(双精度型) 。因此读出的图像数据不能直接进行运算,必须将图像数据转换成双精度型数据 。MATLAB 中提供了这样的图像数据类型转换函数:im2double 函数,其语法格式为:I2 = im2double(I1)该函数将 I1 的各元素除以 255 后转换为 01 内的双精度型数据。运算之后的图像数据再显示时可以再转化成 uint8 型,格式为:I3 = im2uint8 (I2)该函数将 I2 的各元素乘以 255 后转换为 0255 内
4、的 uint8 型数据,其中小于 0 的元素均设置为 0,大于 255 的元素均设置为 255。线性运算示例:K1=imread(pout.tif);I=im2double(K1);J=I*0.43;K2=im2uint8(J);subplot(1,2,1), imshow(K1)subplot(1,2,2), imshow(K2)非线性运算示例:K1=imread(pout.tif);I=double(K1);Dm=double(max(max(K1);J=( Dm/2)*(1+(1/sin(pi/4)*sin(pi/2)*(I/Dm)-0.5);K2=uint8(J);subplot(1,
5、2,1), imshow(K1)subplot(1,2,2), imshow(K2)注意:函数 double、uint8 与 im2double、im2uint8 不同,它们仅仅对数据作类型转换,而不对数据作范围限定。2、直方图均衡化直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概率密度分布的图像,经过某种变换变成一幅具有均匀灰度概率密度分布的新图像,从而改善图像的灰度层次。MATLAB 图像处理工具箱中提供的 histeq 函数,可以实现直方图的均衡化。对于灰度图像,histeq 函数的基本调用格式为J=histeq(I, n)该函数返回原图像 I 经过直方图均衡化
6、处理后的新图像 J。n 为指定的均衡化后的灰度级数,缺省值为 64。例:I = imread(pout.tif);J = histeq(I);subplot(2,2,1), imshow(I);subplot(2,2,2), imhist(I, 64);subplot(2,2,3), imshow(J);subplot(2,2,4), imhist(J, 64); 0 100 2000200040000 100 2000100020003000对于索引图像,调用格式为:Newmap=histeq(X, map)返回值 Newmap 将是输出图像的新的调色板。利用 matlab 语言直接编程也很
7、容易实现直方图均衡化处理。三、实验内容及要求1、用 MATLAB 在自建的文件夹中建立 example2.m 程序文件。在这个文件程序中,将 girl2.bmp(或 pout.tif、lenna2.bmp 等)一幅灰度图像文件读出,显示它的图像及灰度直方图(可以发现其灰度值集中在一段区域) 。用 imadjust 函数将它的灰度值调整到0,1之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别;改变灰度值调整范围,观察调整后的图像的变化及其与原图像的差别,调整后的灰度直方图的变化及其与原灰度直方图的区别。进一步利用改变图像灰度值调整范围,实现图像的明暗反转,观察比较原
8、图与反转后的图像。程序: A=imread(E:1girl2.bmp,bmp); figure(1),subplot(2,2,1);imshow(A); figure(1),subplot(2,2,2);imhist(A); B=imadjust(A,0.35 0.65,); figure(1),subplot(2,2,3);imshow(B); figure(1),subplot(2,2,4);imhist(B)域) 。用 imadjust 函数将它的灰度值调整到0,1 之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别;改变灰度值调整范围,观察调整后的图像的变化
9、及其与原图像的差别,调整后的灰度直方图的变化及其与原灰度直方图的区别;进一步利用改变灰度值调整范围,实现图像的反转。 程序: A=imread(E:1girl2.bmp,bmp); figure(1),subplot(2,2,1);imshow(A); figure(1),subplot(2,2,2);imhist(A); B=imadjust(A,0.35 0.65,); figure(1),subplot(2,2,3);imshow(B); figure(1),subplot(2,2,4);imhist(B) 两次改变调整范围: A=imread(E:1girl2.bmp,bmp); C=
10、imadjust(A,0.35 0.65,0 0.5); figure(2),subplot(2,2,1);imshow(C); figure(2),subplot(2,2,2);imhist(C); D=imadjust(A,0.35 0.65,0.2 0.8); figure(2),subplot(2,2,3);imshow(D); figure(2),subplot(2,2,4);imhist(D)域) 。用 imadjust 函数将它的灰度值调整到0,1 之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别;改变灰度值调整范围,观察调整后的图像的变化及其与原图
11、像的差别,调整后的灰度直方图的变化及其与原灰度直方图的区别;进一步利用改变灰度值调整范围,实现图像的反转。 程序: A=imread(E:1girl2.bmp,bmp); figure(1),subplot(2,2,1);imshow(A); figure(1),subplot(2,2,2);imhist(A); B=imadjust(A,0.35 0.65,); figure(1),subplot(2,2,3);imshow(B); figure(1),subplot(2,2,4);imhist(B) 两次改变调整范围: A=imread(E:1girl2.bmp,bmp); C=imadj
12、ust(A,0.35 0.65,0 0.5); figure(2),subplot(2,2,1);imshow(C); figure(2),subplot(2,2,2);imhist(C); D=imadjust(A,0.35 0.65,0.2 0.8); figure(2),subplot(2,2,3);imshow(D); figure(2),subplot(2,2,4);imhist(D)域) 。用 imadjust 函数将它的灰度值调整到0,1 之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别;改变灰度值调整范围,观察调整后的图像的变化及其与原图像的差别,
13、调整后的灰度直方图的变化及其与原灰度直方图的区别;进一步利用改变灰度值调整范围,实现图像的反转。 程序: A=imread(E:1girl2.bmp,bmp); figure(1),subplot(2,2,1);imshow(A); figure(1),subplot(2,2,2);imhist(A); B=imadjust(A,0.35 0.65,); figure(1),subplot(2,2,3);imshow(B); figure(1),subplot(2,2,4);imhist(B) 两次改变调整范围: A=imread(E:1girl2.bmp,bmp); C=imadjust(A
14、,0.35 0.65,0 0.5); figure(2),subplot(2,2,1);imshow(C); figure(2),subplot(2,2,2);imhist(C); D=imadjust(A,0.35 0.65,0.2 0.8); figure(2),subplot(2,2,3);imshow(D); figure(2),subplot(2,2,4);imhist(D)图像的反转: A=imread(E:1girl2.bmp,bmp); E=imadjust(A,0.35 0.65,1 0); figure(3),subplot(1,2,1);imshow(E); figure
15、(3),subplot(1,2,2);imhist(E);2、 (选做内容)读取一幅灰度图像,不调用 imadjust 函数,利用 MATLAB 语言直接自编程序实现图像的对比度调整。对比度调整: A=imread(E:1girl2.bmp,bmp); I=double(A); J=I*1.5+40; A1=uint8(J); figure(4);subplot(1,2,1),imshow(A); figure(4);subplot(1,2,2),imshow(A1); 反转:X,MAP=imread(E:1girl2.bmp,bmp); figure(5);imshow(X,1-MAP);3
16、、 读取一幅灰度图像,用 histeq 函数将原始图像的灰度直方图均衡化,同时观察均衡化后的图像与前面图像的差别,均衡化后的灰度直方图与前面的灰度直方图的区别。灰度图像: F=imread(E:1rice.tif,tif); figure(6);subplot(2,2,1),imshow(F); figure(6);subplot(2,2,2),imhist(F); G=histeq(F); figure(6);subplot(2,2,3),imshow(G); figure(6);subplot(2,2,4),imhist(G);索引图像: H=imread(E:1forest.tif,tif); figure(7);subplot(2,2,1),imshow(H); figure(7);subplot(2,2,2),imhist(H); I=histeq(H); figure(7);subplot(2,2,3),imshow(I); figure(7);subplot(2,2,4),imhist(I); 4、利用 fft 函数和 ifft 函数,对图像进行傅里叶变换和逆傅里叶变换,并将图像显示在一张图上,进行对比。