【阅读笔记】低照度图像增强-《Fast efficient algorithm for enhancement of low lighting video》
本文介绍的是一种比较实用的低照度图像增强效果很好的方法,Xuan Dong论文《Fast efficient algorithm for enhancement of low lighting video》
概述
低光照图像取反(255 - 低光照图像),和有雾图像存在一些共性,比如在天空或者遥远的背景这些地方,亮度值都是很高的,但在近景的 RGB 三通道中至少有一个亮度值很低。作者提出直接用去雾算法对低光照图像的反转图像处理,去雾结果再取反得到低照度增强结果。
低照度图像增强算法
大气散射模型
大多透雾算法基于大气散射模型,模型如下:
I
(
x
)
=
J
(
x
)
t
(
x
)
+
A
(
1
−
t
(
x
)
)
I (x) = J (x)t(x) + A(1 − t(x))
I(x)=J(x)t(x)+A(1−t(x))
其中,
I
(
x
)
I(x)
I(x)表示含雾图,
J
(
x
)
J(x)
J(x)表示无雾图,
A
A
A表示大气光模型,
t
(
x
)
=
e
−
β
d
(
x
)
t(x)=e^{- \beta d(x)}
t(x)=e−βd(x)表示传输率矩阵,
β
\beta
β 表示大气散射系数,
d
(
x
)
d(x)
d(x)表示图像区域的景深。雾越浓,到达相机的物体反射的光越少,即传输率越小。
上式可以改写为:
J
(
x
)
=
I
(
x
)
−
A
t
(
x
)
+
A
J (x) = \frac{I (x) - A}{t(x)}+A
J(x)=t(x)I(x)−A+A
为了得到
J
(
x
)
J(x)
J(x),重点在估计
A
A
A和
t
(
x
)
t(x)
t(x)。
暗通道先验知识:
在大部分无雾图像的无天空区域,像素中至少存在一个颜色通道存在很低非常低的亮度值。这个最低的亮度值几乎等同于0。因此,对于一个观测图像J,其暗通道趋近于0,即
J
d
a
r
k
(
X
)
=
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
∈
r
,
g
,
b
J
c
(
y
)
)
→
0
J^{dark}(X) = min_{y \in \Omega (x)}(min_{c \in {r,g,b }} J^{c}(y)) \to 0
Jdark(X)=miny∈Ω(x)(minc∈r,g,bJc(y))→0
其中,
J
c
J^{c}
Jc表示彩色图像每个通道,
Ω
(
x
)
\Omega(x)
Ω(x)表示以
x
x
x为中心的窗口
透雾算法
基于大气散射模型,透雾模型的方法步骤如下:
1、从雾图I (x) 估计传输率矩阵t(x)
2、估计大气光值A
3、通过公式估计无雾图J(x)
首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定,一般有
W
i
n
d
o
w
S
i
z
e
=
2
∗
R
a
d
i
u
s
+
1
WindowSize = 2 * Radius + 1
WindowSize=2∗Radius+1
将雾模型
I
(
x
)
=
J
(
x
)
t
(
x
)
+
A
(
1
−
t
(
x
)
)
I (x) = J (x)t(x) + A(1 − t(x))
I(x)=J(x)t(x)+A(1−t(x))
处理为:
I
c
(
x
)
A
c
=
J
c
(
x
)
A
c
t
(
x
)
+
1
−
t
(
x
)
\frac{I^{c} (x)}{A^{c}} = \frac{J^{c} (x)}{A^{c}}t(x) + 1 − t(x)
AcIc(x)=AcJc(x)t(x)+1−t(x)
假设在窗口内透射率$ t(x)
为常数,定义为
为常数,定义为
为常数,定义为\tilde t(x)
,
,
,A$值已知。对上式求两次最小值运算,得到
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
I
c
(
y
)
A
c
)
=
t
~
(
x
)
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
J
c
(
y
)
A
c
)
+
1
−
t
~
(
x
)
\underset {y \in \Omega (x)}{min}(\underset{c}{min} \frac{I^{c} (y)}{A^{c}}) = \tilde t(x) \underset {y \in \Omega (x)}{min}(\underset{c}{min} \frac{J^{c} (y)}{A^{c}})+ 1 − \tilde t(x)
y∈Ω(x)min(cminAcIc(y))=t~(x)y∈Ω(x)min(cminAcJc(y))+1−t~(x)
根据暗原色先验理论
J
d
a
r
k
(
x
)
=
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
J
c
(
y
)
)
=
0
J^{dark}(x) = \underset {y \in \Omega (x)}{min}(\underset{c }{min} J^{c}(y)) = 0
Jdark(x)=y∈Ω(x)min(cminJc(y))=0
推导出
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
J
c
(
y
)
A
c
)
=
0
\underset {y \in \Omega (x)}{min}(\underset{c }{min} \frac{J^{c}(y)}{A^{c}}) = 0
y∈Ω(x)min(cminAcJc(y))=0
带入透射率为常数的公式,得到透射率预估值
t
~
(
x
)
=
1
−
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
I
c
(
y
)
A
c
)
\tilde t(x) = 1-\underset {y \in \Omega (x)}{min}(\underset{c }{min} \frac{I^{c}(y)}{A^{c}})
t~(x)=1−y∈Ω(x)min(cminAcIc(y))
上式添加一个限制系数,得到
t
~
(
x
)
\tilde t(x)
t~(x):
t
~
(
x
)
=
1
−
ω
m
i
n
y
∈
Ω
(
x
)
(
m
i
n
c
I
c
(
y
)
A
c
)
\tilde t(x) = 1-\omega\underset {y \in \Omega (x)}{min}(\underset{c }{min} \frac{I^{c}(y)}{A^{c}})
t~(x)=1−ωy∈Ω(x)min(cminAcIc(y))
ω
\omega
ω取值0.95
以上假设全球达气光A值时已知的,在实际中,我们可以借助于暗通道图来从有雾图像中获取该值。具体步骤如下:
1)从暗通道图中按照亮度的大小取前0.1%的像素。
2)在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为
A
A
A值。
算法参数优化
文中自适应调节
t
(
x
)
t(x)
t(x),如下式
t
′
(
x
)
=
{
2
∗
t
(
x
)
,
0
<
t
(
x
)
<
0.5
1
,
0.5
<
t
(
x
)
<
1
t'(x) = \begin{cases} 2*t(x),0<t(x)<0.5\\1,0.5<t(x)<1 \end{cases}
t′(x)={2∗t(x),0<t(x)<0.51,0.5<t(x)<1
优化
t
(
x
)
t(x)
t(x)如下,增强暗区提亮,亮区微处理,效果更好
t
′
(
x
)
=
{
t
(
x
)
2
∗
2
,
0
<
t
(
x
)
<
0.5
t
(
x
)
,
0.5
<
t
(
x
)
<
1
t'(x) = \begin{cases} t(x)^2*2,0<t(x)<0.5\\t(x),0.5<t(x)<1 \end{cases}
t′(x)={t(x)2∗2,0<t(x)<0.5t(x),0.5<t(x)<1
效果对比
图、测试图像1、原文处理效果、算法优化处理效果
图、测试图像2、原文处理效果、算法优化处理效果
图、测试图像3、原文处理效果、算法优化处理效果 ## 算法总结 简单易实现的增强算法,普世性较好,透雾算法处理部分兼容各种透雾算法。
算法实现参考
https://github.com/AomanHao/ISP_Low_Light_Image_Enhancement
我的个人博客主页,欢迎访问
我的CSDN主页,欢迎访问
我的GitHub主页,欢迎访问
我的个人博客主页,欢迎访问
我的CSDN主页,欢迎访问
我的GitHub主页,欢迎访问
【阅读笔记】低照度图像增强-《Fast efficient algorithm for enhancement of low lighting video》的更多相关文章
- Mysql DOC阅读笔记
Mysql DOC阅读笔记 转自我的Github Speed of SELECT Statements 合理利用索引 隔离调试查询中花费高的部分,例如函数调用是在结果集中的行执行还是全表中的行执行 最 ...
- [置顶]
人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)
这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
- Hadoop阅读笔记(七)——代理模式
关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...
- Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...
- Hadoop阅读笔记(五)——重返Hadoop目录结构
常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...
随机推荐
- bash shell 无法使用 perl 正则
哈喽大家好,我是咸鱼.今天跟大家分享一个关于正则表达式的案例,希望能够对你有所帮助 案例现象 前几天有一个小伙伴在群里求助,说他这个 shell 脚本有问题,让大家帮忙看看 可以看到,这个脚本首先 ...
- C++ 基于libbfd实现二进制加载器
构建工具解析二进制文件,基于libbfd实现,提取符号和节 BFD库 文档参考: LIB BFD, the Binary File Descriptor Library BFD及Binary File ...
- Ldap同步过滤问题
https://docs.oracle.com/cd/E26217_01/E35191/html/ldap-filters-attrs-users.html
- 【有问必答】搭建uniapp项目流程手把手教学
前言 缘由 博友有问,狗哥必答 前段时间,博友加本狗微信,询问uniapp的学习方法.本狗资历浅薄,没有专门学过uniapp,只能将自己日常开发uniapp的基本流程和步骤进行分享,希望可以略尽绵薄之 ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(16)-Charles其他骚操作之大结局
1.简介 今天就说一些Charles的其他操作.以及抓包跨域的问题和常见的问题如何解决.到此Charles这一系列的文章也要和大家说再见了,其他什么小程序.Android7.0等等的问题可以查看宏哥的 ...
- 【Ubuntu】1. 创建虚拟机
这一篇主要写了虚拟机的创建,不包含操作系统的安装,中间有些步骤没有提到的根据默认操作即可,也可以根据个人情况设置. 点击创建新的虚拟机 这一步可以选择典型安装,过程更简单些,这里我选择自定义. 在安装 ...
- 2022-11-12:以下rust语言代码中,结构体S实现了crate::T1::T2的方法,如何获取方法列表?以下代码应该返回[“m1“,“m2“,“m5“],顺序不限。m3是S的方法,但并不属于c
2022-11-12:以下rust语言代码中,结构体S实现了crate::T1::T2的方法,如何获取方法列表?以下代码应该返回["m1","m2"," ...
- 2022-09-08:以下go语言代码输出什么?A:5 66;B:5 88;C:7 88;D:以上都不对。 package main func main() { var x = []int{4:
2022-09-08:以下go语言代码输出什么?A:5 66:B:5 88:C:7 88:D:以上都不对. package main func main() { var x = []int{4:44, ...
- 2021-11-28:有一棵树,给定头节点h,和结构数组m,下标0弃而不用。 比如h = 1, m = [ [] , [2,3], [4], [5,6], [], [], []]
2021-11-28:有一棵树,给定头节点h,和结构数组m,下标0弃而不用. 比如h = 1, m = [ [] , [2,3], [4], [5,6], [], [], []], 表示1的孩子是2. ...
- Vue入门浅析
title: vue入门浅析 author: Sun-Wind date: May 14,2022 写这篇博文的目的在于为初学vue的同学对vue有一些更进一步的了解 读这篇博文前,您应该至少安装了v ...