原来一直认为彩色图像的去色算法没啥研究价值,网络上已经有很多类似的算法了,
比如著名的Gray = R*0.299 + G*0.587 + B*0.114公式,或者LAB颜色通道的L值,HSL的L通道等等,
直到最近看一些论文,发现原来也有很多人对这个过程进行过详细的研究和创新。
在学习这些算法的同时,使我也认识到,任何你认为简单的东西在背后都有可能有着复杂的机理,
只是你没有发现而已。
好的去色算法能够保留 彩色图中的对比关系
某些去色算法使得红花和绿叶去色后基本变得一致了,这其实即是所谓的对比度丢失,
这种丢失对于普通的图像处理用户也许问题不大,不过对于图像分析方面是很不利的。
论文1 Color2Gray: Salience-Preserving Color Removal Color2GrayMatlabCode
这个代码仅仅具有学习价值,因为作者在论文中说100*100大小的图像算法用时12.7秒,这么长的时间那还搞个屁啊。
论文2 主页 Contrast Preserving Decolorization 代码已在opencv的decolor()函数实现论文
OpenCV消色decolor函数,比RGB2Gray函数转换更鲁邦!!!!!!!!!!!!!!!!!!!!!
void decolor(InputArray src, OutputArray grayscale, OutputArray color_boost)
Parameters:
src – Input 8-bit 3-channel image.
grayscale – Output 8-bit 1-channel image.
color_boost – Output 8-bit 3-channel image.
论文3 Real-time Contrast Preserving Decolorization代码
速度快
他没有像第二篇那样采用了二维的模型,而是简化为一维模型,
类似于公式Gray = R*0.299 + G*0.587 + B*0.114,论文中也是使用W1,W2,W3三个系数来控制结果值,
但是这三个系数不是固定的,而是同用户输入的图像自适应的。
同时有约束条件W1>0;W2>0;W3>0,以及W1+W2+W3=1;满足这几个条件的W1,W2,W3的值的组合还是有无限个的,
但是作者注意到系数的微小变化对于输出的结果的影响不是特别大,
因此,论文中提出了将每个系数在[0,1]之间量化为10等份,
即只取0、0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8,0.9、1.0这11个值,
在满足约束条件的情况下,W1、W2、W2的组合总共只会有11*(11+1)/2 =66 种。
这种搜索空间的离散化,在很多算法中都可以去模仿的!!!!!!!!!!
min(sum((gx-gy-δx,y)^2))
其中gx,gy为灰度化后的像素值。而δx,y则表示颜色对比度,
三篇论文中开始的时候都是用的LAB颜色空间的一些相关计算公式。