直方图均衡化

一、直方图均衡化原理


(1) 直方图均衡化思想
直方图均衡化处理是以累积分布函数为基础的直方图修正法,即通过一个灰度映射函数,将原直方图改造成所希望的直方图。基本思想是均衡化原始图像的灰度值,对在图像中像素个数较少的灰度级进行缩减,而对图像中像素个数较多的灰度级进行扩宽,使图像对应的直方图为均匀分布的形式。增强整体的对比度。


(2)均衡化的步骤
具体步骤
注:取整时可采用公式:k=int((L-1)*s+0.5);最后统计灰度变换后各灰度级的像素数目,再画出均衡后的直方图


(3)为什么选取累积分布函数
均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数(本段参考:http://blog.csdn.net/rushkid02/article/details/9178117


(4)直方图的计算
一幅8灰度级图像具有如下所示的直方图,求直方图均衡后的灰度级和对应概率,并画出均衡后的直方图的示意图。(计算中取整采用四舍五入方法,图中的8个不同灰度级对应的归一化直方图为[0.17 0.25 0.21 0.16 0.07 0.08 0.04 0.02])
这里写图片描述
下面再计算其累积分布函数:
这里写图片描述
把s值近似为最接近的整数,并得到直方图:
这里写图片描述


(5)不足之处
从以上计算中可以看出,虽然均衡化图像对比度增强,但其本质是扩大了量化间隔,而量化级别反而减少了,因此,原来灰度不同的象素经处理后可能变的相同,形成了一片的相同灰度的区域,各区域之间有明显的边界,从而出现了伪轮廓。经典的直方图均衡化算法可能存在以下一些不足:
1、输出图像的实际灰度变化范围很难达到图像格式所允许的最大灰度变化范围。
2、输出图像的灰度分布直方图虽然接近均匀分布, 但其值与理想值1/n仍有可能存在较大的差异, 并非是最佳值。
3、输出图像的灰度级有可能被过多地合并。由于灰度的吞噬也易造成图像信息的丢失。本段参考: www.cnblogs.com/cfantaisie/archive/2011/06/05/2073406.html


二、直方图均衡化的实现
(1)J=histeq(I,n);J为均衡化后得到的图像,n为均衡化后的灰度级数,默认值是64
(2)imhist(I,n);该函数绘制指定灰度级数目为n的直方图,n默认值为256
(3)具体代码:

版本一:利用自带函数
clear all; close all;
I=imread('tire.tif');
J=histeq(I,64);
figure;
subplot(121);
imshow(uint8(I));
subplot(122);
imshow(uint8(J));
figure;
subplot(121);
imhist(I,64);
subplot(122);
imhist(J,64);
版本二:自编函数
clc;
clear;
close all;
I=imread('pout.tif');
[m,n]=size(I);
J=zeros(1,256);
%灰度值统计个数,存放在J中,第i列代表,像素值为i的个数为J(i);
for i=1:m
    for j=1:n
        k=I(i,j);
        J(k+1)=J(k+1)+1;
    end
end
%bar(J);可以用bar画出原始图像直方图(这里的直方图没有归一化)
subplot(2,2,1)
imshow(I);
subplot(2,2,2)
imhist(I);


%计算灰度级像素值个数的概率大小
Z=zeros(1,256);
for i=1:256
    Z(i)=J(i)/(m*n);
end

%计算累积分布函数
G=zeros(1,256);
G(1)=Z(1);
for i=2:256
    G(i)=G(i-1)+Z(i);
end
%上面计算累积分布函数,可以用函数cumsum(Z)代替
%累积分布函数取整,将其归一到1256;
G=uint8(255*G+0.5);
%对图像进行均衡化
for i=1:m
    for j=1:n
        I(i,j)=G(I(i,j)+1);
    end
end
subplot(2,2,3)
imshow(I);
subplot(2,2,4)
imhist(I);

本代码原作者:http://blog.csdn.net/xiajun07061225/article/details/6910129
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值