zoukankan      html  css  js  c++  java
  • 直方图均衡化会造成灰度级的合并【伪轮廓】

      均衡化处理后的图象只能是近似均匀分布。均衡化图象的动态范围扩大了,但其本质是扩大了量化间隔,而量化级别反而减少了

      因此,原来灰度不同的象素经处理后可能变的相同,形成了一片的相同灰度的区域,各区域之间有明显的边界,从而出现了伪轮廓

      如果原始图像对比度本来就很高,如果再均衡化则灰度调和,对比度降低。在泛白缓和的图像中,均衡化会合并一些象素灰度,从而增大对比度。均衡化后的图片如果再对其均衡化,则图像不会有任何变化。

      灰度直方图均衡化的算法,简单地说,就是把直方图的每个灰度级进行归一化处理,求每种灰度的累积分布,得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图中的每个像素。

    经典的直方图均衡化算法可能存在以下一些不足:

    1. 输出图像的实际灰度变化范围很难达到图像格式所允许的最大灰度变化范围。          
    2. 输出图像的灰度分布直方图虽然接近均匀分布, 但其值与理想值1/n仍有可能存在较大的差异, 并非是最佳值。          
    3. 输出图像的灰度级有可能被过多地合并。由于灰度的吞噬也易造成图像信息的丢失。         

     直方图均衡化的机理,是将对应像素较少的几个连续灰度级合并成一个灰度级,通过减少灰度级来实现的均衡化。对于离散灰度级的图像,不可能做到完全的均衡,我们得到的结果只是一个大致的均衡。

    〈=s〈=1。则前后之间存在如下转换关系:

                      s(k) = T(r(k))

        T(r)为一个单调递增函数,它的获得可由下面的公式给出:

                      T(r(k)) = ∑pr(r(j)) , j=0:k

                      pr(r(k)) = n(r(k))/n ,表示每一个灰度值出现的概率

                      n = ∑n(rj) , j=0:L-1 ,图像总像素值

        计算s(k) = T(r(k),就得到了r(k)~s(k)的映射关系。寻找待处理图像的灰度值全部转换成相应灰度值,便完成了直方图的均衡化操作。

        如某图像有像素分布:

    • 原灰度级r(k)    : 0      0.1    0.2    0.3    0.4    0.5    0.6    0.7    0.8    0.9     1
    • 像素数n(r(k))   : 15     2      10     11     6      3      9      12     23     8       1
    • 灰度概率pr(r(k)): 0.15   0.02   0.1    0.11   0.06   0.03   0.09   0.12   0.23   0.08   0.01
    • 转换函数T(r(k)) :  0.15   0.17   0.27   0.38   0.44   0.47   0.56   0.68   0.91   0.99    1
    • 现灰度s(k)      : 0.2    0.2    0.3    0.4    0.4    0.5    0.6    0.7    0.9    1       1

        由此,得到转换关系为

    [转载]直方图均衡化

    灰度值0、0.1都写成0.2,概率0.17;合并了

    灰度级0.2写成0.3,概率0.1;

    灰度值0.3、0.4都写成0.4,概率0.17;合并了

    灰度级0.5写成0.5,概率0.03;

    灰度值0.6写成0.6,概率0.09;

    灰度级0.7写成0.7,概率0.12;

    灰度值0.8写成0.9,概率0.23;

    灰度级0.9、1写成1,概率0.09;合并了

    matlab实现:
    im = imread('image/dipum_images_ch03/Fig0308(a)(pollen).tif');
    [m,n] = size(im);
    L = 256;   %灰度级L=256
    pixel = zeros(1,L);  %
    for i=1:L
        temp = find( im==(i-1) );
        len = size(temp);
        pixel(i) = len(1)/(m*n);
    end
    T = linspace(0,L-1,L);
    temp = 0;
    for i=1:L
        temp = temp + pixel(i);
        T(i) = temp;
    end
    s = uint8(T * L);
    newim = im;
    for i =1:L
        newim(find(im == (i-1))) = s(i);
    end
    newpixel = zeros(1,L);
    for i=1:L
        temp = size( find( newim==(i-1) ) );
        newpixel(i) = temp(1) /(m*n);
    end
    subplot(2,2,1);imshow(im);
    subplot(2,2,2);bar(0:L-1,pixel);
    subplot(2,2,3);imshow(newim);
    subplot(2,2,4);bar(0:L-1,newpixel);

    效果图:


    [转载]直方图均衡化

     [转载]直方图均衡化_what_lei_新浪博客 http://blog.sina.com.cn/s/blog_14bd3d4230102vlo0.html


    全景可视化辅助泊车系统研究 - 豆丁网 http://www.docin.com/p-1007391317-f4.html


    [精品]一种改进的直方图均衡化 - 其它资料 - 道客巴巴 http://www.doc88.com/p-3042245231576.html


    解决:

    1、动态均衡化和分段直方图均衡无法解决!

    2、局部对比度增强技术

  • 相关阅读:
    javascript给builtin对象添加新方法
    __stdcall、__cdecl 、CALLBACK 几种函数修饰符
    判断是空白符(空格、换页、换行、回车、横向制表和纵向制表)的方法
    strcpy函数的实现
    strncpy实现
    strcat实现
    android修改标题栏高度
    断言 assert
    字符类别测试总结
    判断是否是控制字符
  • 原文地址:https://www.cnblogs.com/wxl845235800/p/7429223.html
Copyright © 2011-2022 走看看