灰度变换

灰度变换:

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);
View Code

执行结果为:

      

更普通的形式是:

     

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);
View Code

执行结果为:  可以看出用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)线型间隔的。

原文地址:https://www.cnblogs.com/liugl7/p/5243284.html