类扫描宝去灰底算法

873 阅读3分钟
原文链接: blog.csdn.net

偶然的机会接触到一个项目,需要实现类似扫描宝的图片去灰底功能。但网上的相关资料太少,不得已自己研究,总算找到了方法。虽然效果比不上扫描宝,但也还是不错的。

1 算法效果

废话不多说,先上效果图
图 1 处理前的图片
图 2 处理后的图片
图 3 处理前的图片
图 4 处理后的图片

更多的样例效果详见 Examples

2 算法原理

算法大致可以分为三步:
1、局部对比度增强和亮度增强
2、增白处理
3、伽马变换

2.1 局部对比度增强和亮度增强

由于图片局部有时会过暗或过亮,因此使用全局对比度增强效果不会太好,采用局部增强反而更符合要求。

局部对比度增强和亮度增强公式

I n ew =( I a vr a g e +c ont ra s t ( I o ld I a vr a g e )) brig h t

式中,I a vr a ge 为局部块像素灰度的平均值,c ontra st 为对比度增强系数,b rig h t 为亮度增强系数。

c ont ra s t 可以是固定值。
b rig ht 则应该是动态值,比如亮度过暗的区域,亮度增强系数应该取大值。再如,对于大块有色区域,分布在好几个局部块中,为了防止出现亮度不均匀,亮度增强系数的选取又不应差别过大。

进行完这一步,去灰底的效果已经非常明显了,但此时,背景仍不是纯白的效果,同时,由于采用了局部算法,图像出现了很明显的分块痕迹,需要进一步增白剔除。

2.2 增白处理

这一步只要是把背景中残留的灰色像素替换为白色像素,关键是如何区分出灰色像素,我们在 HSV 颜色模型下考虑问题。

HSV 颜色模型

用锥角 (即 S 分量和 V 分量的比值)和 V 分量来作为判别准则,由模型可知,灰色像素的锥角较小,同时为了剔除黑色像素,像素的明度 (V )又不能太小。因此可以拟定这样一条判别准则:

锥角小于一定值,同时明度大于一定值的像素为灰色像素

对于识别出的灰色像素,认为修改为白色像素,这样不仅增白了背景,还有效去除了分块的痕迹。

2.3 伽马变换

其实进行完以上两步,已经基本达到了去灰底的要求,进行伽马变换只不过是进行一些修饰工作。
这里写图片描述

在 HSV 颜色空间下,分别对色彩饱和度和明度进行伽马变换。

选取 γ<1的伽马变换,对饱和度进行变换可以使图片的色彩更加鲜艳,对明度进行变换可以增强图片整体的亮度

γ 选取过小反而造成色彩的失真,或者使图片太亮而牺牲了对比度。

3 结语

算法中用到的方法都是图像处理中的常用方法,原理很简单,但真正到需要解决一个具体问题的时候,能用起来又是何其难也。

算法完整代码已上传到 Github

欢迎 Star , 欢迎指教。