基恩士的浓淡补正算法(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实现的。
如果想时刻关注本人的最新文章,也可关注公众号:

基恩士的浓淡补正算法(Shading Correction Filter)的模拟实现。的更多相关文章
- 从局部信息推测基恩士的Removing BackGround Information算法的实现。
最近从一个朋友那里看到了一些基恩士的资料,本来是想看下那个比较有特色的浓淡补正滤波器的(因为名字叫Shading Correction Filter,翻译过来的意思有点搞笑),不过看到起相关文档的附近 ...
- 三维网格补洞算法(Poisson Method)
下面介绍一种基于Poisson方程的三角网格补洞方法.该算法首先需要根据孔洞边界生成一个初始化补洞网格,然后通过法向估算和Poisson方程来修正补洞网格中三角面片的几何形状,使其能够适应并与周围的原 ...
- 三维网格补洞算法(Poisson Method)(转载)
转载:https://www.cnblogs.com/shushen/p/5864042.html 下面介绍一种基于Poisson方程的三角网格补洞方法.该算法首先需要根据孔洞边界生成一个初始化补洞网 ...
- PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)
PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分) Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...
- 三维网格补洞算法(Radial Basis Function)
在逆向工程中,由于设备或模型的原因,我们获取得到的三维模型数据往往并不完整,从而使得生成的网格模型存在孔洞,这对后续的模型分析会造成影响.下面介绍一种基于径向基函数(RBF:Radial Basis ...
- Linux用户身份(命令详解与补正)
基于Red Hat Enterprise Linux 7.5 Linux中的root就是存在于所有类UNIX系统中的超级用户,持有最高管理权限,能添加/删除用户.开关机.关闭或开启硬件或者系统服务等, ...
- 三维网格去噪算法(bilateral filter)
受图像双边滤波算法的启发,[Fleishman et al. 2003]和[Jones et al. 2003]分别提出了利用双边滤波算法对噪声网格进行光顺去噪的算法,两篇文章都被收录于当年的SIGG ...
- PID算法的理解及场景模拟
增量式PID算法的简化版之后的公式: △u(t)=Ae(t)-Be(t-1)+Ce(t-2) △u:PID控制器输出的下一时刻的调整量 e(t):PID控制器在当前时刻的状态变化量-给定值 e(t-1 ...
- 算法笔记_224:夺冠概率模拟(Java)
目录 1 问题描述 2 解决方案 1 问题描述 足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表 ...
随机推荐
- 集合——Collection接口,List接口
集合:对象的容器,定义了对多个对象进行操作的常用方法.可实现数组的功能 集合和数组的区别: 数组长度固定,集合长度不固定 数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型. 集合的位置 ...
- Linux和kali Linux 介绍
常用的渗透测试平台 CTFTools kali (近亲 Ubuntu) Parrot Security OS PentestBox --由印度人开发,运行在Windows下的渗透测试环境 kali L ...
- 浅谈 TCP、IP、DNS 和 HTTP 的关系
一.浅谈三个协议的基本概念 1.IP 协议 按层次分,IP网际协议位于网络层,几乎所有的网络的系统都会用到 IP 协议,其重要性非同一般.IP 协议作用就是把各种数据包传送给对方,对方的地址就要看其 ...
- python学习-Day17
目录 今日内容详细 生成器对象(自定义迭代器) 小总结 自定义range方法 通过生成器模拟range方法 先以两个参数的range方法为例 针对一个参数情况 针对三个参数情况 自定义的range方法 ...
- 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)
目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...
- apparmor 源码分析
这里不对apparmor做介绍,记录一下源码分析过程. 初始化 static int __init apparmor_init(void) -> security_add_hooks(appar ...
- CSAPP 之 DataLab 详解
前言 本篇博客将会剖析 CSAPP - DataLab 各个习题的解题过程,加深对 int.unsigned.float 这几种数据类型的计算机表示方式的理解. DataLab 中包含下表所示的 12 ...
- Android添加背景图片和设置app图标
Android添加背景图片和设置app图标 Android 添加背景图片 第一步:找到你要当做背景的图片,并下载下来 第二步:将图片复制到app->res->mipmap文件夹下 第三步: ...
- install ubuntu on raspberry pi 4b
how to install 第一次连 wifi 时总会失败,需要 sudo reboot 重启后,就可以正常连接 当需要切换 wifi 时,修改 network-config 文件是无效的,需要 s ...
- [持续更新] Python学习、使用过程中遇见的非代码层面知识(想不到更好的标题了 T_T)
写在前面: 这篇博文记录的不是python代码.数据结构.算法相关的内容,而是在学习.使用过程中遇见的一些没有技术含量,但有时很令人抓耳挠腮的小东西.比如:python内置库怎么看.python搜索模 ...