利用CImg实现直方图均衡和色彩迁移

直方图均衡(histogram equalization)

图像直方图用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。直方图均衡就是将直方图均衡的分布在整个像素空间中,可以提高图像的对比度和视觉效果。

实验步骤

对于灰度图像,首先统计图像中每个像素的频数和频率
在这里插入图片描述

然后计算累积概率密度分布函数
在这里插入图片描述

由于像素都是整数值,使用round函数将小数四舍五入,并拓展到0-255,最后根据原图像亮度值赋值新的亮度。

我把上述步骤写成了一个函数myHisteq,然后在main中调用。

彩色图像

对于彩色图像,首先想到的是将RGB三个通道分别进行直方图均衡,然后再合成一张图像。但是这种方法再均衡化的过程中不仅改变了亮度,也改变了色彩,造成了图片的失真。
改进的方法是先将图像从RGB空间转到HSV空间,然后对V通道进行直方图均衡。处理完后再转回RGB空间显示。

在HSV空间中,H代表色调,用角度度量,取值范围为0°~360°,S代表饱和度,取值范围为0%~100%,V代表明度,取值范围为0%(黑)到100%(白)。只对V通道采用直方图均衡可以很好的改善图片的亮度,同时又不产生失真。

实验效果

Original是原图,gray是灰度图像均衡,color1是对RGB空间均衡,color2是对HSV是对HSV空间均衡,可以看到color2的色彩还原更好。

在这里插入图片描述

颜色迁移(color transfer)

颜色迁移是指根据目标图片调整图片的颜色特征。这里使用的是 Color Transfer between Images 这篇论文的方法。RGB三通道有很强的关联性,而做颜色的改变同时恰当地改变三通道比较困难。作者使用了Lab空间,三个通道分别代表亮度,黄蓝和红绿。三个通道相互正交,互不影响。

实验步骤

先将原图像和目标图像转换到Lab空间,分通道计算均值和标准差。下面对每个像素分通道进行处理,把原图像减去原图像的均值乘上目标图片与原图片标准差的比值再加上目标图片的均值,最后转换到RGB空间显示。

实验效果

可以看到src原图像的颜色变得和dest目标图像相近。
在这里插入图片描述

结果分析

这个算法的优点在于实现简单,运行效率高,缺点在于该算法基于整体色彩迁移,对全局颜色比较少的图片有比较好的效果,而对于颜色较多的图片效果不明显。同时如果两张图像的颜色非常不同,再Lab颜色空间处理会扩大色差,导致颜色不自然。对于这些缺点,可以使用局部色彩迁移。论文Local Color Transfer via Probabilistic Segmentation by Expectation-Maximization 提出了利用GMM高斯混合模型以及修改的EM算法来对颜色区域进行分割,得到更好的局部色彩迁移结果。

代码地址

Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值