图像直方图均衡化:Python实现直方图均衡化、直方图相似度检测、Python实现直方图反向投影

本文介绍了图像直方图的概念、特性,并详细讲解了直方图均衡化的原理和Python实现,用于提升图像对比度。接着讨论了通过直方图检测图像相似度的方法,包括灰度和RGB直方图的相似度计算。最后,阐述了直方图反向投影技术,用于在图像中定位相似区域,展示了Python实现示例。
摘要由CSDN通过智能技术生成

本文内容

  • 直方图的定义及其特性
  • 直方均衡化的及其Python实现
  • 图片相似度检测算法及其Python实现
  • 直方图反向投影及其Python实现

(所有代码可在我的GitHub找到,传送门:

https://github.com/Panacea1999/image_algorithms/tree/main/histogram_algorithms)

直方图的定义及特性

直方图是对数据分布的一种准确的图形表示,对于连续数据和离散数据都适用。横轴代表数值(连续数据)或其类型(离散数据),纵轴代表样本空间中每一种数据出现的频数。

以彩色图片的灰度直方图为例,首先需要将彩色图片转换为灰度图片。将颜色的灰度分为256个等级,用0~255的整数表示。其中0表示黑色,255表示白色。统计灰色图片中每一种灰度对应的像素点的个数并以直方图的形式绘制,即灰度直方图,如下图所示:
在这里插入图片描述
对于彩色图像,在RGB三色通道上分别实现上述过程,即可得到RGB直方图,如下图所示:在这里插入图片描述
在将图片转换为直方图的过程中,像素点的空间信息将被丢失,即对于一张直方图,我们只能得到某个特定颜色颜色的像素点一共有多少个,而无法得知这些像素点的具体位置信息。也就是我们无法通过直方图来反推原始图像。进一步说,直方图具有一对多的特性,举例:
在这里插入图片描述
这两张图像具有完全一样的直方图,然而其原始图片并不相同。因此直方图的转换是一个不可逆过程。

此外,直方图能在一定程度上表现图片的质量。对于色彩丰富且对比均衡的图片,其灰度直方图应是较为平均地分布在0~255整个区间。而对于欠曝或者过曝的图像,其灰度直方图将呈现不均匀的分布,甚至被限制在某一个区间。举例:
在这里插入图片描述
在这里插入图片描述
第一张图片为网络下载的原图的灰度直方图结果,其对比度适中,灰度直方图分布也较为平均。而第二张图片是作者手动降低其对比度后的图片,其灰度直方图表示大量像素点密集地聚集在0~50灰度范围内。

直方图均衡化(Histogram Equalization, HE)及其Python实现

在现实生活中,某些图像受限于拍摄环境的光线、角度及拍摄设备,存在对比度过低的情况。通过上述直方图的性质可知,如果能通过将对比度低的图片的直方图修改为分布均衡的直方图,就可以解决对比度过低的问题,这一过程即直方图均衡化,是图像增强算法的一种(Enhancement Algorithm)。

具体的做法是,首先计算灰度图像的累计分布函数(不需要了解数学原理的同学可以直接跳过这一部分去看Python实现):

c ( f ) = ∑ t = 0 f p f ( t ) = ∑ t = 0 f n t / n , f = 0 , 1 , . . . , L c(f)=\sum_{t=0}^fp_f(t)=\sum_{t=0}^fn_t/n , f=0,1,...,L c(f)=t=0fpf(t)=t=0fnt/n,f=0,1,...,L

其中 p f ( t ) p_f(t) pf(t)为概率分布函数,t是虚拟变量, n t n_t nt表示所有灰度为t的像素点的数量,n表示所有像素点的总数量,L为图像中出现的灰度级别的数量。

定义 g = T ( f ) g=T(f) g=T(f)为直方图均衡化的点操作过程,其将原图片的 f ( x , y ) f(x,y) f(x,y)映射至输出图像的 g ( x , y ) g(x,y) g(x,y)。有:

g = T ( f ) = r o u n d

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值