基恩士的浓淡补正算法(Shading Correction Filter)的模拟实现。
知道这个算法应该有很久了,主要当时在意2个事情,一个是这个名字的翻译是在是搞笑,第二是这个算法的效果。不过一直以来都十分好奇这个算法是怎么实现的。因为之前一直无法实际的用基恩士的软件平台用不同的图片去测试这个算法的不同结果,故而无从分析和总结规律,但是恰好最近有朋友能帮这个忙,获得了一些测试数据,也基本分析出了这个算法的大概。 我们首先看看这个算法的官方文档的说明:
其中文的参考界面如下图:
参数很多啊。
其中补正方法里有4种方法:平均值补正、中间值补正、阴影补正、高速阴影补正等。当选择平均值补正和中间值补正时,我们发现下面的抽取大小和抽取方向都变为不可用了,所以就是说明他们不需要这个参数。就平这一点,我们其实就可以猜到这个算法的一个基准数据,比如这个平均值补正,结合其帮助文档里说的,就可以猜测到他是以全图的平均值为一个基准数据进行后续的处理。那个中间值补正,我原以为他是用中值滤波来做的,但是一看没参数可选,后来一想也就是用全图的中值(用直方图做统计,累加直方图数据到图像像素量一半时那个值)作为计算依据的。
当选择阴影补正或者高速阴影补正时,可选择抽取大小和处理方向,文档里说什么基于抽取大小生产什么曲线,我感觉有点带偏了,应该就是某种模糊吧,所谓高速啥的,应该指不同类型的模糊。
在明暗抽取中,他有明部、暗部、明暗和明暗独立四个选项,其实所谓明暗也就是各个像素点和基准数据之间的比较,当选择明时,保留大于的部分,选择暗时,保留小于的部分,明暗都选择,我原以为是明暗的结果相加求平均,但是实际测试好像真的不是,但是也没有发现其他的办法。
当选择明暗独立时,下部的增益和出去干扰旋向会增加明部和暗部的独立设置。 这里的增益其实就是一个线性的放大系数,去除干扰是一个offset项目,类似于
y = gain * diff + offset;
这样的一个表达式吧。
下面的对比度平均化没有去研究他,感觉作用不是很大,范围外参照其实没啥,就是决定了边缘像素如何处理,选择on,边缘部分可以参考超出的位置的值(前提是要有).off应该就是选择了镜像或者重复边缘之类的吧。 次数这个参数也是垃圾参数。
找了几个图做了测试,通过调整一些参数,可以达到不错的效果:
当然这些图都是我精心挑选的来表示这个算法很好,实际上对于很多图像,我们是得不到理想的结果的。所以每个算法都有其局限性和适应范围。
一个值得注意的事项是,抽取方向的参数也还是有一定的作用,比如上面的后2个图,就必须分别用X和Y方向的抽取,才能获得有效目标,而抽取大小也是有一定的限制的,必须合适,方可有效。
这个算法的速度的核心还是后台使用的各种模糊或者其他的基础算法,本身的计算量确很小。
本文Demo下载地址: https://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,位于Detection-》Auxliary Enhance-》 Shading Correction Filter。里面的所有算法都是基于SSE实现的。
如果想时刻关注本人的最新文章,也可关注公众号:
最新文章
- Java Selenium封装--RemoteWebElement
- 热更新脚本C#light,ulua,Scorpio性能比较
- Java EE 学习总结
- Ubuntu12.04安装64位系统出现编译错误error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or dir
- 【读书笔记】读《编写高质量代码—Web前端开发修炼之道》 - JavaScript原型继承与面向对象
- 2014.12.05(解决eclipse的adb打不开)
- 增强学习(Reinforcement Learning and Control)
- tomcat 8.0 安装
- 在Visual Studio中Git的基本使用
- mvc log4net将日志写入数据库失败解决之道——开启内部调试
- React和动态网站接口的经济学
- css3隐藏导航栏总结
- Spring整合JMS(四)——事务管理
- UVA12186
- 20160222.CCPP体系详解(0032天)
- Java面试题集锦(持续更新)
- ELK新手教程——pomelo + log4js + ELK(一)
- vuex使用
- Ubuntu 12.04 root用户登录设置
- OpenStack入门篇(七)之认证服务Keystone