CEM和BBHE

本文介绍了CEM和BBHE两种图像处理方法。CEM通过提升亮度改善图像,但可能会使原本亮部过亮。BBHE是两次直方图均衡化,根据灰度均值分割处理,避免了整体亮度提升。代码示例展示了如何在Python中实现这两种方法,虽然对RGB图像处理会有颜色失真,但效果尚可。
摘要由CSDN通过智能技术生成

逆光图像处理


今天又了解到了两种对亮度处理的方法。分别是CEM和BBHE。
参考: CEM_matlab. BBHE_matlab. BBHE_C++.

CEM

单纯的CEM公式比较简单,原理和公式如下
在这里插入图片描述
根据网上一个matlab程序复写了一遍python的,灰度图是有效果的。彩色图片下我一开始用HSV空间中拿出V分量,会产生色差。
对rgb图像就对三个通道都进行了cem模型,效果还可以。
但是注意到他的作用是提升亮度,即使本来很亮的位置他仍然在提升亮度
效果如下,右面时处理之后的效果。
在这里插入图片描述

BBHE

简单来说就是进行两次直方图均衡算法。将图片灰度均值作为分开的标准。
灰度直方图均衡的步骤比较简单:
1.统计所有出现的灰度值的次数
2.将次数归一化,得到归一化直方图
3.计算累计直方图
4.将累计直方图进行区间转换
而BBHE就是先根据灰度均值分割成两部分来计算。第一部分计算(0,mean_gray)的归一化直方图,第二部分计算(mean_gray,255)的归一化直方图。和直接计算的区别就在于分母不同。直接计算分母是所有像素个数,而BBHE是属于(0,mean_gray)或(mean_gray,255)的像素个数。分子都是某像素(如0,1,2…)出现的个数。
也就是说第一个累计直方图在像素值为mean_gray出就已经为1了并且之后也都为1。第二个累计直方图,在像素值小于mean_gray时全部为mean_gray对应的值,直到最后为1。
而均衡化体现在最后一步的区间转换上。也就是说。比如原图片像素是一堆聚集在1到10之间的数,求出每个数出现的频率,并进行了累计。然后再扩展到1~255的范围时只需要将累计的结果直接乘255就可以了。

灰度直方图原来是个这么奇妙的东西啊。比如10,20,30,40,50每个出现了一次。那么频率就都是1/5。累加直方图就可以通过区间转换把频率和数值联系起来。累计直方图为1/5,2/5,3/5,4/5,5/5。区间转换公式就是:结果 = 最小值 + 累计直方图的值 ×(最大值 - 最小值)

我之前一直以为直方图均衡化只是将小范围的数值投影到大范围,但是现在看起来并不是这样。使得,肯定不是这样,我以前太想当然了。

代码

在网上找到了matlab和c的,我就简单的改成了python的,希望能帮助到大家。

CEM

def cem(img, lamb=1.33):
    # 求取灰度均值
    height, width = img.shape
    all = height * width
    gray_mean = np.sum(img) / all
    # 图像优化
    fcem = np.exp
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值