1.实现river.jpg 图像的直方图均衡,不能直接使用Matlab的histeq( )函数。将有 关均衡图像和调用histeq( )函数的结果作比较。
x – 图像 ni 表示灰度i出现次数,计算灰度i的像素的概率
其中L为 灰度数(本实验为256)
对应于 px 的累积分布函数是图像的累积归一化直方图
为了让这些值回到原先的域,用如下算式变换
y表示对累积分布函数做了一个变换后线性化的值
利用如下算式计算均衡化后的直方图
在我的实现中,cdf实际上是灰度i的像素出现次数的累积,而非概率的累积,通过减去一个cdf的最小值,除以(总像素值-cdf的最小值),之后再乘以(灰度数L-1),得到直方图均衡化后图像的灰度值。
核心代码如图所示
先统计原图像每个灰度级像素的个数
统计每个灰度级像素出现次数的累计
按照算式进行直方图均衡
实验结果如图所示
第一行是原始图像,第二行是hitseq()函数得到的效果,第三行为我自己实现的直方图均衡的结果。
可以看出,我的直方图均衡化结果不如hitseq()函数均衡。灰度值相对集中在中间的区域。
2.将图像 EightAM.png 的直方图匹配为图像 LENA.png 的直方图,显示 EightAM.png在直方图匹配前后的图像,并绘制LENA.png的直方图、直方图匹配 前后EightAM.png的直方图,检查直方图匹配的效果。
算法过程总结为以下步骤
计算原图的直方图h1,计算目标图像的直方图h2
计算两个图像的cdf,标记为原图cdf1,目标图像cdf2
找出min(abs(cdf1(i)-cdf2))并以此代替原图灰度
核心代码如图所示
先计算cdf
采用单映射规则将模板灰度分布特征映射到原始图像中
实验结果如图所示
原图像
匹配图像
匹配后图像