转载于http://blog.sina.com.cn/s/blog_14d1511ee0102wwyt.html (公式未正常显示,请看原文链接)
一、用法
histeq是Matlab中的一个工具箱函数。其调用格式为:
f1 = histeq(f,n)
[f1,T] = histeq(f,n)
其中,f为输入图像,n为指定直方图均衡化后的灰度级数(若n为向量,且长度小于等于f的灰度级数,则此时为直方图规定化映射,映射灰度区间为n),f1为输出均衡化之后的图像,T为变换矩阵,且存在下列关系:
[m,n]=size(f);
fI=imhist(f);
fI1=fI/(m*n);
fj=imhist(f1);
fj1=fj/(m*n);
可得:
fj1=fl.*T’;
二、数学原理
直方图均衡化方法可以产生一幅灰度级分布概率均匀的图像。以概率论中的概率密度和分布函数为基础,因此,若想对整个函数有准确的把握,则我们首先需要了解:
设一个大小为4X4的4bit(灰度级为2^4=16)灰度图像,将其表示为:
其灰度直方图分布为:
由灰度分布直方图,得其任意一灰度级数x(x∈[1 16])概率密度表达式:
可得灰度级为1、2的概率密度为:
由概率论基本知识,其概率分布函数为
可得灰度级为1、2的分布值为:
通过上述原理,我们不难发现,概率密度表示对应的某一灰度级数在图片中出现的概率,某一灰度级数的分布函数值则表示小于等于该灰度级数的所有灰度值在图片中所占概率。正如前文所述,直方图均衡化作用在于将原始直方图变为更均匀分布的图片。因此,基于上述数学原理,我们便可在此基础上推出直方图均衡化的实现原理:
自己写的代码附上:
f = imread(‘tire.tif’);
[m,n] = size(f);
f1 = im2uint8(ones(m,n));
%得到输入图像的直方图h
h = imhist(f);
l = length(h);
%概率密度PDF
PDF = h/numel(f);
%分布函数CDF
CDF = cumsum(PDF);
%取整扩展,得到均衡化之后的灰度分布直方图
j = CDF.*256;
%由于灰度级数为1-256之间的整数,故需对扩展之后的灰度灰度级数取整才有意义,
%得到的J矩阵为1X256大小,表示扩展之前的灰度级数,其中每个级数对应元素的
%值为该灰度级数扩展后的灰度级数值。如J(3)=24,表示原始灰度直方图为3灰度值
%的地方经灰度扩展后其灰度值为24
J = round(j);
%将扩展后的灰度级数对应映射到图片中
for i=1:l%l=256
nn = find(J==i);%找出扩展后的灰度级数对应的扩展前的灰度级数
L = length(nn);
for k=1:L
nn1 = find(f==(nn(k)-1));%再找到扩展前的灰度级数对应的像素点,
f1(nn1)=i; %并将像素点对应灰度值值置为扩展后的灰度值
end
end
三、
当然,对于T的求法暂时还没弄明白,日后补上。T T
参考文献:
1.章毓晋. 图像工程[M]. 清华大学出版社, 2013.
2.左飞. 数字图像处理:原理与实践(MATLAB版)[M]. 电子工业出版社, 2014.
今天的文章matlab直方图的均衡化_直方图均衡化原理分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/75151.html