基恩士的浓淡补正算法(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 问题描述 足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表 ...
随机推荐
- 基于easyx的小时钟
#include <graphics.h> #include <math.h> #include <conio.h> #define PI 3.141592654 ...
- Sql语言学习——DDl
DDL:操作数据库.表 1. 操作数据库:CRUD 1. C(Create):创建 * 创建数据库: * create database 数据库名称; * 创建数据库,判断不存在,再创建: * cre ...
- 云平台短信验证码通知短信java/php/.net开发实现
一.本文目的 大部分平台都有一个接入发送短信验证码.通知短信的需求.虽然市场上大部分平台的接口都只是一个非常普通的HTTP-GET请求,但终归有需要学习和借鉴使用的朋友. 本文的初衷是主要提供学习便利 ...
- 广度优先搜索 BFS 学习笔记
广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...
- java自带的四种线程池
java预定义的哪四种线程池? newSingleThreadExexcutor:单线程数的线程池(核心线程数=最大线程数=1) newFixedThreadPool:固定线程数的线程池(核心线程数= ...
- XCTF练习题---WEB---view_source
XCTF练习题---WEB---view_source flag:cyberpeace{662b1cf989a0a7999a5589290ce5a88e} 解题步骤: 1.观察题目,打开场景 2.根据 ...
- Python技法:用re模块实现简易tokenizer
一个简单的tokenizer 分词(tokenization)任务是Python字符串处理中最为常见任务了.我们这里讲解用正则表达式构建简单的表达式分词器(tokenizer),它能够将表达式字符串从 ...
- form表单,css简介,css选择器,css样式操作
form表单 简介 表单在Web网页中用以让访问者输入数据,当提交表单时,表单中输入的数据被打包传递给Web服务器端的程序 以处理,从而使得Web服务器与用户之间具有交互功能. 表单实现前后台交互:用 ...
- vue中blob文件下载及其它下载方式
一.Blob对象的了解 1:blob表示一个不可变.原始数据的类文件对象.Blob()构造函数返回一个新的blob对象:blob对象的内容由参数给出的值串联组成: 2:new Blob(array, ...
- 136. Single Number - LeetCode
Question 136. Single Number Solution 思路:构造一个map,遍历数组记录每个数出现的次数,再遍历map,取出出现次数为1的num public int single ...