zoukankan      html  css  js  c++  java
  • 灰度变换

    灰度变换:

    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)线型间隔的。

  • 相关阅读:
    文件处理(记录经典代码及相关逻辑)
    python与pip在widow下cmd命令行操作问题收集:python、pip不是内部或外部命令,也不是可运行程序
    python—函数中存在的部分问题
    python —匿名函数(lambda)
    Python—递归函数
    python-函数参数
    python代码运行过程
    String类练习
    String类的常用方法
    死锁与进程通信
  • 原文地址:https://www.cnblogs.com/liugl7/p/5243284.html
Copyright © 2011-2022 走看看