仿照“扫描全能王”主要算法,进行算法增强

    在工作生活中偶尔接触到“扫描全能王”,感觉特别是其中的图像增强效果非常不错,由于基于手持设备、对于日常操作来说也是非常方便。身为图像处理算法工程师,自然对其中的原理比较感兴趣。经过一段时间思考实践,特别要感谢 https://blog.csdn.net/pleasecallmewhy/article/details/8776998 作者“图夫作坊“提供的帮助,基于OpenCV对原算法进行了某种程度的实现。由于采用的都是公开的信息,所以这里拿出来进行分享,希望能够帮助大家解决类似问题。
 
一、主要算法原理
实现这样一个图像增强的算法,肯定是一个”复合算法“,但是对于主要算法,我
 
引用https://blog.csdn.net/pleasecallmewhy/article/details/8776998 作者“图夫作坊“原话,这样的一个问题可以归并为:

“问题规范为图像A,B,为同一场景在不一样的光照拍摄图片,那么:

光照分布 L = A / B

如果已知 A, L ,则 B = A / L (B 为A去光照的结果)

这里L约等于 gaussFilter(A, 大核)

算是展现了图像除法的经典案例“

这是比较贴切的。实际上实现的效果类似ps中的“分离”算法,具体效果大家可以自己打开PS尝试一下。
 
二、算法仿真
    划分模式的计算公式:结果色 = (基色 / 混合色) * 255
    分析每个颜色通道的数值,并用基色分割混合色基色数值大于或等于混合色数值,混合出的颜色为白色。基色数值小于混合色,结果色比基色更暗。因此结果色对比非常强
    两个一样的图层(复制基色图层),图层混合模式改为划分结果色就是白色
    混合色为白色,结果色就是基色;混合色为黑色,结果色就是白色;

以上思路,翻译成代码基本就是
 
    Mat src = imread("E:\\未来项目\\白板增强\\images\\t1.jpeg");
    src.convertTo(src,CV_32FC3,1.0/255);
    Mat gauss;
    Mat dst = src.clone();
    cv::GaussianBlur(src,gauss,Size(101,101),0);
    
    //划分
    //如果混合色与基色相同则结果色为白色
    //如混合色为白色则结果色为基色不变
    //如混合色为黑色则结果色为白色
     dst = src/gauss;
 
在加上一些效果调整,可以得到比较好的效果。当然比不上原始算法:
 
算法效果
这个结果,再进行一下曲线处理效果会更好,我忘截图了,大家可以自己实验一下。
 
三、反思小结
     反思“扫描全能王”的成功,最为重要的是切合“扫描增强”的相关算法做了很多具体的工作—这才是最有价值的。能够找到一个算法和现实的切合点,并且做出解决现实问题的程序,这是一件非常美好的事情。
 
感谢阅读至此,希望有所帮助。

猜你喜欢

转载自www.cnblogs.com/jsxyhelu/p/10289357.html