码迷,mamicode.com
首页 > 其他好文 > 详细

直方图均衡化会造成灰度级的合并【伪轮廓】

时间:2017-08-25 18:46:30      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:src   title   http   之间   直方图的均衡化   效果   灰度   它的   均衡   

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

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

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

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

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

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

效果图:


技术分享

 

直方图均衡化会造成灰度级的合并【伪轮廓】

标签:src   title   http   之间   直方图的均衡化   效果   灰度   它的   均衡   

原文地址:http://www.cnblogs.com/wxl845235800/p/7429223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!