灰度变换:
1.幂律变换的基本形式是:
s = c rγ 其中c、γ为正常数。
对于该函数,测试代码如下:
1 x=[0:0.01:1]; 2 y1=x.^5; 3 y2=x.^3; 4 y3=x.^1.5; 5 y4=x; 6 y5=x.^0.6; 7 y6=x.^0.3; 8 y7=x.^0.15; 9 hold on; 10 plot(x,y1); 11 plot(x,y2); 12 plot(x,y3); 13 plot(x,y4); 14 plot(x,y5); 15 plot(x,y6); 16 plot(x,y7);
执行结果为:
更普通的形式是:
2.函数imadjust是一个基本的图像处理工具箱函数,用于对灰度级图像进行灰度变换。该函数的一般语法格式为: g = imadjust(f,[low_in high_in],[low_out,high_out],gamma)
(1) imadjust()用于图像反转,代码如下:当然这种反转也可以用 g = imcomplement(f)来操作。
1 hold on; 2 f = imread('sky1.jpeg'); 3 imshow(f); 4 g1 = imadjust(f,[0,1],[1,0]); 5 figure,imshow(g1); 6 g2 = imcomplement(f); 7 figure,imshow(g2);
执行结果为: 可以看出用imadjust执行的结果与用imcomplement执行的结果一样。
换一张图有更直观的效果:
(2) g2 = imadjust(f,[0.5,0.75],[1,0]); 该命令将0.5到0.75之间的灰度拓展到整个[0,1]范围。这种类型的处理对于强调感兴趣灰度区非常有用。
同样对上面的测试图进行操作,得到如下图像:
(3)g3 = imadjust(f,[],[],2); 可以压缩灰度级的低端并拓展高端,这样可得到gamma = 2增强后的结果。
(4)有时,能够自动地使用函数imadjust而不必关心上面讨论的低参数或高参数是非常有用的。这时,可使用函数stretchlim,其基本语法为Low_High = strstchlim(f) 其中,Low_High是一个两元素向量,该向量由一个低限和一个高限组成,用于实现对比度拉伸。Low_High在默认情况下,Low_High中的值指定灰度级,这些灰度级充满f中底部和顶部1%的所有像素值。该结果以向量[low_in high_in]的形式用于函数imadjust中,如下:
>> g = imadjust(f,stretchlim(f),[]) 执行之后对比度有所提升。
如下图:
另外一种调用方式是:>> g = imadjust(f,stretchlim(f),[1 0]) , 增强负片图像的对比度。
(5) g = c*log(1+f) 其中c是一个常数,f是浮点数。该曲线形状与伽马曲线类似,只是在两个坐标轴上,低值设定为0,高值设定为1. 但要注意伽马曲线的形状是可变的,而对数函数的形状是固定的。
对数变换的一项应用是压缩动态范围。通过计算对数,如106的动态范围会降低到14左右(ln(106)=13.8), 这样就更易于处理。执行对数变换时,我们希望使得压缩值出现在完整范围内。对8比特来说,在MATLAB中,这样做的最简方法是使用语句 >> gs = im2uint8(mat2gray(g)); 通过使用函数mat2gray会将值限定在[0,1]范围内,使用函数im2uint8会将值限定在[0,255]范围内,把该函数图像转换为uint8类。
eg:利用对数变换减小动态范围
>> g1 = im2uint8( mat2gray(8*log(1+ double(f)) ) );
>> imshow(g1)
得到如下结果: (这张图并不能反映出改善视觉效果的作用,仅仅是显示结果)
(6)指定任意灰度变换
g = interp1(z,T,f) 其中f是输入图像,g是输出图像,z是长度与T相同的列向量,其形成方式如下: z = linspace(0,1,numel(T))' 另外需要说明的是函数linspace(a,b,n)会生成一个行向量,该行向量的n个元素是在a和b之间(包括a和b)线型间隔的。