本人参考下面的文献实现了自己的偏色检测:
测控技术2008 徐晓昭等 基于图像分析的偏色检测及颜色校正方法
在我的实现中,通过分析上述文献的思路,认为文献中的公式4有问题。
我的实现中,没有采用上述文献中的公式4,而是用另外的方法计算偏色因子K的值。这种修改可能与所实现的RGB到LAB空间转换的有关系。
我测试过openCv的rgb2lab的方法,openCv的lab取值区间均转换到0-255,通过转换到正常的LAB取值区间,及L为0-100,a,b为-128-127,发现结果与Photshop转换的结果相差迥异。而我的RGB到LAB的空间转换结果在绝大多数颜色上和Photoshop的转化结果相差1个像素。经过定点优化的RGB到LAB空间转换的速度非常之快。
上述文献中颜色校正的方法是对每一个通道,通过求解一个大规模的线性方程组得出校正系数,然后去校正。而我的实现方法极其简单。
2.1 首先根据偏色因子的偏色程度决定是否存在偏色,是否需要校正。
2.2 根据颜色分类A,B的均值确定到底是哪一种偏色。
2.3 根据不同的偏色情况,分别采用线性拉伸的策略把A,B的均值等效移位到分布中心的附近。
偏色图像:
偏色因子 K = 2.3
校正之后:
偏色图像:
偏色因子: K= 1.96
偏色校正之后:
本文算法在主频为800M的手机上,对于图片大小为640x480的图像,偏色检测+偏色校正总的处理时间小于100ms。