本文介绍的是一种比较实用的低照度图像增强效果很好的方法,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,b​Jc(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​(cmin​AcIc(y)​)=t~(x)y∈Ω(x)min​(cmin​AcJc(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​(cmin​Jc(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​(cmin​AcJc(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​(cmin​AcIc(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​(cmin​AcIc(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》的更多相关文章

  1. Mysql DOC阅读笔记

    Mysql DOC阅读笔记 转自我的Github Speed of SELECT Statements 合理利用索引 隔离调试查询中花费高的部分,例如函数调用是在结果集中的行执行还是全表中的行执行 最 ...

  2. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  3. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  4. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  5. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  6. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  7. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

  8. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

  9. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

  10. Hadoop阅读笔记(五)——重返Hadoop目录结构

    常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...

随机推荐

  1. dp杂题选做

    树的数量 题目其实挺简单的,难点在于状态的设计(其实也没多难). 令 \(f_i\) 表示 \(i\) 个点的 \(m\) 叉树的数量,发现无法转移.设 \(g_{i,j}\) 表示根节点所在子树内有 ...

  2. Prism Sample 15-FilteringEvents

    例14演示了怎样事件聚合器怎样发布与接收信息. 例15增加了一个事件的过滤功能,即设定一个条件,符合的才接收. _ea.GetEvent<MessageSentEvent>().Subsc ...

  3. SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战

    本文为千锋教育技术团独家创作,更多技术类知识干货,点个关注持续追更~ 接口幂等性是Web开发中非常重要的一个概念,它可以保证多次调用同一个接口不会对结果产生影响.如果你想了解更多关于接口幂等性的知识, ...

  4. 2022-10-29:go语言中的defer能非常方便地处理资源释放问题,rust语言里如何实现defer功能呢?

    2022-10-29:go语言中的defer能非常方便地处理资源释放问题,rust语言里如何实现defer功能呢? 答案2022-10-29: rust里有时候你也必须用defer,别说是设计上的问题 ...

  5. 2022-09-29:在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密。 同时给你一个整数 forg

    2022-09-29:在第 1 天,有一个人发现了一个秘密. 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后, 每天 给一个新的人 分享 秘密. 同时给你一个整数 forg ...

  6. 2022-06-16:给定一个数组arr,含有n个数字,都是非负数, 给定一个正数k, 返回所有子序列中,累加和最小的前k个子序列累加和。 假设K不大,怎么算最快? 来自亚马逊。

    2022-06-16:给定一个数组arr,含有n个数字,都是非负数, 给定一个正数k, 返回所有子序列中,累加和最小的前k个子序列累加和. 假设K不大,怎么算最快? 来自亚马逊. 答案2022-06- ...

  7. JVM 优化踩坑记

    本文记录了服务 JVM 优化的过程与思路,有对 JVM GC 原理以及对问题排查方向和工具的介绍,也有走弯路和踩坑,分享出来希望对大家有所帮助. 本文概要 服务异常和排查过程 RPC 接口超时的排查方 ...

  8. Rocky 9 Linux 平台 vim 9.0 源码包编译安装踩坑记录

    目录 vim 9.0 部署准备环境 vim 9.0 源码包正式部署 vim 9.0 初体验 plug-vim 安装插件 在上一篇 <vim入门实战> 篇,我并没有介绍 Linux 平台源码 ...

  9. 使用umi+dva做一个demo

    最初只是使用react 进行开发项目,发现项目过大状态管理起来就相当困难,虽然有redux, mobx,但是使用起来还是相当繁琐,而目前umi有现成的轮子使用简单,当然愿意尝试了,趁现在假期有时间简单 ...

  10. 【python基础】新建/运行python项目

    1.新建python项目 在编写程序之前,我们需要新建一个项目(Project),在桌面双击PyCharm的快捷方式,等待片刻,打开如下所示的软件界面.点击New Project 在弹出的对话框中,需 ...