直方图均衡化的方法,直方图均衡化的原理
直方图均衡化是基于累积分布函数,将原始图像的灰度直方图从比较集中的某个灰度区间非线性映射到整个灰度范围内更均匀的分布,从而增强对比度。本文将详细讲解直方图均衡化的原理,有需要的可以参考。
00-1010 1.点运算符2。线性灰度变换3。直方图均衡化4。代码练习。
目录
点算子是两个像素的灰度值之间的映射关系,属于像素的逐点运算,相邻像素不参与运算。算子是最简单的图像处理方法,如亮度调整、对比度调整、颜色变换、直方图均衡化等。
1.点算子
线性灰度变换表示为:
Rk和sk分别是输入和输出像素的灰度值。
图2.1线性灰度变换
当a & gt1、扩大了输出图像像素的灰度范围,增强了图像对比度;当a & lt1,事实正好相反。这是因为人眼不容易分辨相似的灰度值,所以如果一幅图像的灰度值范围很小,视觉细节就不够清晰。当a=1,b0时,点运算符将图像的灰度整体上移或下移,即使整个图像变亮或变暗。
图2.2图像对比(左为弱对比,右为强对比)
2.线性灰度变换
下图再次给出了图像对比的例子。
图3.1图像对比示例
直方图均衡化是基于累积分布函数,将原始图像的灰度直方图从比较集中的某个灰度区间非线性映射到整个灰度范围内更均匀的分布,从而增强对比度。
下面描述直方图均衡化的数学原理。首先,做出如图所示的原始图像灰度的概率直方图。
图3.2直方图均衡原理
设输入像素的灰度值为rk,累积分布函数为
其中ni是图像中灰度值为ri的像素的出现频率,n是图像中的像素总数。设输出像素的灰度值为sk,像素范围为smin-smax。期望输出灰度直方图是均匀分布的,即
使C(sk)=C(rk),即。
因此,最终直方图均衡化的点运算符是
因此,最终直方图均衡化的点运算符是
3.直方图均衡化
根据上述原则写出累积分布函数的计算公式和均衡算子。
#计算累积分布函数
丹麦克朗:
#读取图片的灰度直方图。
#bins是直方图方形柱的值向量。
#hist是每个值区间中箱的频率值。
hist,bin=NP . histogram(rk,256,[0,256])
#计算累积分布函数
returnhist.cumsum()
#计算灰度均衡图。
德国马克:
cdf=C(rk)
#均衡
CDF=(CDF-CDF . min())*(255-0)/(CDF . max()-CDF . min())0
returncdf.astype(uint8 )
均衡时,直接调用函数即可。下面给出了完整的代码。
importnumpyasnp
importcv2ascv
frommatplotlibimportpyplotasplt
#计算累积分布函数
丹麦克朗:
#读取图片的灰度直方图。
#bins是直方图方形柱的值向量。
#hist是每个值区间中箱的频率值。
hist,bin=NP . histogram(rk,256,[0,256])
#计算累积分布函数
returnhist.cumsum()
#计算灰度均衡图。
德国马克:
cdf=C(rk)
#均衡
CDF=(CDF-CDF . min())*(255-0)/(CDF . max()-CDF . min())0
returncdf.astype(uint8 )
#阅读图片
img=cv.imread(1.png ,0)
#将2D数字图像矩阵转换成1D矢量
rk=img.flatten()
#原始图像的灰度直方图
plt.hist(rk,256,[0,255],color=r )
Cv.imshow(原始图像,img)
#直方图均衡化
imgDst=T(rk)[img]
Cv.imshow(直方图均衡化后的图像,imgDst)
plt.hist(imgDst.flatten(),256,[0,255],color=b )
plt.show()
看效果:
图4.1直方图均衡化效果(灰度直方图)
图4.2均衡前
均衡后的图4.3
以上是Python学习中直方图均衡化原理的详细说明。关于Python直方图均衡化的更多信息,请关注盛行IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。