[论文阅读] LCC-NLM(局部颜色校正, 非线性mask)
[论文阅读] LCC-NLM(局部颜色校正, 非线性mask)
文章: Local color correction using non-linear masking
1. 算法原理
如下图所示为, 算法原理框图.

其核心有2个步骤:
- 对图像进行模糊, 生成mask;
- 对图像进行gamma校正, 得到输出图像, 校正公式为:

对公式含义的解释. 如下图所示, 为不同mask情况下, 输入和输出的关系, 可以看到:
- 当mask>128时, gamma校正幂次为 \(2^\frac{128-mask}{128}<1\), 校正后的值会增大, 如图中绿色线条所示
- 当mask=128时, gamma校正幂次为1, 校正不会改变大小, 如图中黄色线条所示
- 当mask<128时, gamma校正幂次为 \(2^\frac{128-mask}{128}>1\), 校正后的值会减小, 如图中青色线条所示

2. 算法关键
如上述处理过程, 算法关键有2个:
- 如何生成mask, 是否需要取反滤波?
- gamma校正公式中使用的是与128进行比较, 对于图像整体偏暗或者偏亮的图像是否有效果?
2.1 是否需要滤波
至于是否需要滤波, 文章中一句话已经说明: 滤波可以将同一输入映射成不同的输出.
A local color correction will provide a method to map one input value to many different output values, depending on the values of neighboring pixels.
文章中, 另一句话, 更明显地说明了原因: 当mask没有模糊时, 图像的对比度会降低; 反之, 当mask模糊过度时, 就会简化成简单的gamma校正.
If the mask is not blurred, then the image contrast will be excessively reduced. In comparison, if the mask is overly blurred then this algorithm reduces to simple gamma correction.
这里详细说明这句话的意思:
- 当有滤波时, 利用了局部邻域像素的信息: 对于同一个输入, 由于邻域像素不同, mask也不相同, 从而使得输出也不相同; 对于同一邻域内不同的输入, mask相同会使得邻域内输出变化相同;
- 当没有滤波时, 没有利用局部邻域像素的信息, 这里mask可以为固定值或者当前像素的取反值: mask为固定值时, 相当于滤波时窗口半径非常大(滤波后图像为一个常数), 这样相当于对图像做了一个全局的gamma校正, 效果可能不理想; mask为当前像素取反时, 邻域内每个像素的mask都不相同, 输出变化也不相同, 可能会降低图像对比度;
因而, 是需要滤波的. 如下所示, 为不同参数滤波后的效果:


如上所示, 为使用了快速均值滤波不同参数情况下的效果:
- 滤波半径为0时, 相当于没有滤波, mask为输入取反; 从图中可以看到, 图像中的草皮细节被模糊, 可能就是邻域内的变化不相同导致的;
- 滤波半径为15时, mask得到了图像大致结构; 从图中可以看到, 图像整体效果较好;
- 滤波半径为300时, mask基本为一个常数; 从图中可以看到, 效果不是太好;
这里有个问题, 如何选取合适的滤波参数?
2.2 算法适用性
从公式1中可以看到, 当图像整体亮度<128, 或者整体亮度>128时, 效果不太好, 如下图所示.

为了使的算法更具一般性, 可以先对图像进行线性拉伸, 然后再进行处理, 如下图所示结果:


这里线性拉伸不一定是最好的方法, 有可能只用线性拉伸已经有足够好的效果了.
3. 算法改善
3.1 公式调整1
算法在计算mask时, 进行了取反, 在进行gamma校正时, 也是做了取反, 实际上做了重复的工作, 因而可以进行简化, 简化后的校正公式为:
\]
更改后, 与原始算法是等效的, 更改前后结果对比如下所示.

可以看到, 二者完全是一样的效果.
3.2 公式调整2
结合上面说的拉伸方法, 可以直接在公式中进行更改, 更改后公式如下:
\]
其中, ratio 为抛出一定比例后的最大值, 下图所示为抛出1%后的效果:


4. 代码
原始方法:
gray = double(gray);
gray_inv = 255 - gray;
mask = meanFilterSat(gray_inv, radius);
lcc = 255 * (gray / 255) .^ (2 .^((128 - mask) / 128));
调整后:
gray = double(gray);
mask = meanFilterSat(gray, radius);
lcc = 255 * (gray / 255) .^ (2 .^((mask - 127) / 128));
最后, 使用ratio的方法为:
gray = double(gray);
mask = meanFilterSat(gray, radius); % 快速均值滤波
h_gray = hist_count(gray); % 直方图
ranges = getRanges(h_gray, 0.01); % 动态范围
lcc = 255 * (gray / ranges(2)) .^ (2 .^((mask - 127) / 128));
[论文阅读] LCC-NLM(局部颜色校正, 非线性mask)的更多相关文章
- 论文阅读笔记三十六:Mask R-CNN(CVPR2017)
论文源址:https://arxiv.org/pdf/1703.06870.pdf 开源代码:https://github.com/matterport/Mask_RCNN 摘要 Mask R-CNN ...
- 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)
今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...
- [论文阅读]阿里DIN深度兴趣网络之总体解读
[论文阅读]阿里DIN深度兴趣网络之总体解读 目录 [论文阅读]阿里DIN深度兴趣网络之总体解读 0x00 摘要 0x01 论文概要 1.1 概括 1.2 文章信息 1.3 核心观点 1.4 名词解释 ...
- [论文阅读笔记] Structural Deep Network Embedding
[论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...
- 论文阅读:Face Recognition: From Traditional to Deep Learning Methods 《人脸识别综述:从传统方法到深度学习》
论文阅读:Face Recognition: From Traditional to Deep Learning Methods <人脸识别综述:从传统方法到深度学习> 一.引 ...
- 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification
Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...
- [论文阅读]阿里DIEN深度兴趣进化网络之总体解读
[论文阅读]阿里DIEN深度兴趣进化网络之总体解读 目录 [论文阅读]阿里DIEN深度兴趣进化网络之总体解读 0x00 摘要 0x01论文概要 1.1 文章信息 1.2 基本观点 1.2.1 DIN的 ...
- BERT 论文阅读笔记
BERT 论文阅读 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 由 @快刀切草莓君 ...
- [论文阅读笔记] node2vec Scalable Feature Learning for Networks
[论文阅读笔记] node2vec:Scalable Feature Learning for Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 由于DeepWal ...
随机推荐
- Linux指令手册 (一)
指令格式 指令主体 [选项] [操作对象] 一个完整的指令是由"指令主体"."选项"和"操作对象"组成的,其中指令主体只能有一个,选项有零个 ...
- [转载] 笑话:Developer and product manager
A man flying in a hot air balloon suddenly realizes he's lost. He reduces height and spots a man dow ...
- 最常见的安全漏洞– Acunetix Web应用程序漏洞报告2021
每年,Acunetix都会为您提供最常见的Web安全漏洞和网络外围漏洞的分析.我们的年度Web应用程序漏洞报告(现已成为Invicti AppSec指标的一部分)是基于从Acunetix在线获得的真实 ...
- WPF教程四:字段、属性、依赖项属性的演变过程
这个章节主要讲解属性是什么,为什么会演变出依赖项属性,依赖属性的优势是什么.以及如何更好的使用属性和依赖项属性. 一.属性 属性是什么. 翻了好几本C#的书和微软的文档,我觉得对属性讲解比较好理解的就 ...
- Nginx的安装和部署
Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发 ...
- 题解 guP4552 IncDec Sequence
这道题是一道差分的题目 差分数组p即p[i]=a[i]-a[i-1] 如果我们把一个区间[l,r]里的数+1,那么我们不难发现p[l]'=a[l]+1-a[l-1]=p[l]+1,p[r+1]'=a[ ...
- C语言:进制转化
16进制数4321转10进制:原来方法 =4*16^3+3*16^2+2*16^1+1*16^0 =4*16^3+3*16^2+2*16^1+1 =16*(4*16^2+3*16^1+2)+1 =16 ...
- MySQL 8.x 新版本特性赶紧学!!Linux 服务器上安装 MySQL 8.x
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 引言 ...
- SQL慢查询排查思路
前言 平时在工作中每天都会做巡检,将前一天所有超过500ms的慢SQL排查出来 查找原因,是否能进行优化.慢慢中,在形成了一套思路方法论. 我个人认为对于排查慢SQL还是有一定的帮助 (一).是否是S ...
- Python中调用Java程序包
<原创不易,转载请标明出处:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html> 开发Python程序,需求中需要用到Java代 ...