宽动态红外图像增强算法综述
回顾过去
带你回顾宽动态红外图像增强算法的历史进程,历来学者的一步步革命(新的算法框架提出),一步步改革(改进优化),从简单粗暴到细致全面。
正所谓是:改革没有完成时,只有进行时。没有完美的算法,也没有最好的算法,只有更好更优秀的算法。
展望未来
以现在看90年代的算法,那时候的算法是有点粗糙,但是正是在这一点点的积累上,才有了现在较之优秀完美的算法。
正所谓是:站在巨人的肩膀,我们看得更远,不积跬步无以至千里。

目录

为什么需要该算法?
摘要
主要的三类算法思路大致介绍
第一类:基于映射的宽动态图像增强算法
第二类:基于图像分层的宽动态图像增强算法
第三类:基于梯度域的宽动态图像增强算法
三类算法的对比与优缺点分析

1.关于为什么需要宽动态红外图像增强算法?
详见我之前的文章《数字细节增强算法的缘由与效果(我对FLIR文档详解)》
https://blog.csdn.net/hahahahhahha/article/details/102978112.

2.摘要:
从三类算法开始介绍,基于映射的宽动态图像增强算法,基于图像分层的宽动态图像增强算法,基于梯度域的宽动态图像增强算法。

3.主要的三类算法思路大致介绍
早期的算法(大概1999年之前),主要是基于映射的。实现简单,复杂度低,但是细节不够凸显。
为此,学者提出了基于图像分层的算法(大概是从2001年开始),这种算法是将原始图像分为基础层和细节层,然后分别处理,以保证在压缩动态范围的前提下凸显细节信息,这类算法在细节增强上有了很大提升,但是容易产生 梯度反转 和 光晕现象。
为解决 梯度反转 和 光晕现象,学者又提出了基于梯度域的算法,但是不如第二类算法的细节效果好。

4.第一类:基于映射的宽动态图像增强算法
包括有:自增益的线性映射,Gamma 曲线,直方图投影等。

4.1 自增益的线性映射**
Iout(i,j)=255*Iin(i,j)/(max(Iin)-min(Iin));
最大值和最小值都是去掉极值之后得到的。
如何去极值呢?留给你自己思考吧。

4.2 Gamma 曲线
不同的Gamma参数 对应不同的效果,时好时坏,得手动调试,无法自适应。
还有就是无法消除或者越过“空缺灰度值”,因为gamma曲线无法做到分段处理。

4.3 借助直方图
4.3.1 最原始的直方图均衡
在某些场景上效果不错,但是缺点也很明显,过度增强,噪声过度放大,丢细节,褪色。

4.3.2 平台直方图均衡
最原始的直方图均给我们带来了一种高对比度的视觉体验,但它问题多多。
就丢细节这一点,FLIR在它的文档中已经明确说明:FLIR的DDE不是HE(直方图均衡)。我的这篇文章中对此有说明 https://blog.csdn.net/hahahahhahha/article/details/102978112.
它的水洗效果washed-out褪色 ,它的噪声放大更是无法容忍。
因此,学者又提出了一些优化办法。1995年,Vickers 提出了基于阈值的平台直方图均衡算法(plateau histogram equalization ,PHE) 。

4.3.3 自适应直方图均衡
1987年,PIZER等人还提出了自适应直方图均衡算法(adaptive histogram equalization ,AHE),这是一种不同于最原始的直方图均衡它是分区域的,从此打开了直方图均衡的另一扇窗,大家才知道原来还可以这么玩,也便有了“全局global”和“局部local ”之说。
AHE的优点是能够凸显局部细节,但是其缺点也是很恼人的,那就是很容易放大噪声。

4.3.4 限制对比度的自适应直方图均衡
1994年,ZUIDER VELD提出了对比度限制的自适应直方图均衡(CLAHE)算法,发表了举世瞩目的经典论文《contrast limited adaptive histogram equalization 》(强烈推荐学习),在算法在医学图像处理,安检图像处理有着非常广泛的应用。该算法从娘胎里就带来了光晕现象,还需改善。
MATLAB的Image toolbox 中有相关函数adapthisteq,我个人觉得:输入参数为手动,不能自适应,只是16-16,或者8-6,不适用于16bit到8bit 的红外图像处理。要想用,那就看原论文,自己写代码。

4.3.5 直方图映射
2009年,南理工的左超等人,在其论文中提出了一种改进型的直方图映射(modified histogram projection),该算法是在原始直方图均衡的基础上改进,不会放大噪声,类似普通的线性映射,与普通线性映射的区别是,该算法能够有效的越过(或者消除)“空缺灰度值”,在高动态的红外图像压缩中,能够得到一种类似“自适应的分段线性映射”的方法。对于灰度跨越过大的图像,效果很好。比如:一个人手上拿着一个很热的水杯。

结束语:
这一回用一首打油诗做个总结:
红外图像宽动态,
算法分为三大派。
基于映射第一类,
各路学者太有才。
全局局部都能搞,
是否线性无所谓。
噪声抑制很关键,
图像效果得改善。

时间有限,先写这么多。
下回聊重点聊:
“基于图像分层的宽动态图像增强算法”。

【红外DDE算法】聊聊红外图像增强算法的历史进程(第一回)的更多相关文章

  1. 【红外DDE算法】数字细节增强算法的缘由与效果(我对FLIR文档详解)

    [红外DDE算法]数字细节增强算法的缘由与效果(我对FLIR文档详解) 1. 为什么红外系统中图像大多是14bit(甚至更高)?一个红外系统的性能经常以其探测的范围来区别,以及其对最小等效温差指标.首 ...

  2. 分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!

    过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研究称为R ...

  3. LeetCode初级算法--字符串02:字符串中的第一个唯一字符

    LeetCode初级算法--字符串02:字符串中的第一个唯一字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog. ...

  4. MicroPython TPYBoard v102 无线红外遥控舵机(基于红外解/编码模块)

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 红外解码/编码模块介绍 模块上搭载了红外接收头.红外 ...

  5. Self-organizing Maps及其改进算法Neural gas聚类在异常进程事件识别可行性初探

    catalogue . SOM简介 . SOM模型在应用中的设计细节 . SOM功能分析 . Self-Organizing Maps with TensorFlow . SOM在异常进程事件中自动分 ...

  6. 算法 -- 四种方法获取的最长“回文串”,并对时间复杂进行分析对比&PHP

    https://blog.csdn.net/hongyuancao/article/details/82962382 “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就 ...

  7. 算法进阶面试题01——KMP算法详解、输出含两次原子串的最短串、判断T1是否包含T2子树、Manacher算法详解、使字符串成为最短回文串

    1.KMP算法详解与应用 子序列:可以连续可以不连续. 子数组/串:要连续 暴力方法:逐个位置比对. KMP:让前面的,指导后面. 概念建设: d的最长前缀与最长后缀的匹配长度为3.(前缀不能到最后一 ...

  8. 牛客寒假算法基础集训营4 I Applese 的回文串

    链接:https://ac.nowcoder.com/acm/contest/330/I来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串. ...

  9. 【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()

    问题描述 算法 Algorithms (第四版)书中,第1章:基础编程模型第15题: 结果: 编写一个静态方法 histogram(), 接受一个整型数组a[] 和一个整数M为参数,并返回一个大小为M ...

随机推荐

  1. linux 老式 PCI 探测

    在老的内核版本中, 函数 pci_register_driver, 不是一直被 PCI 驱动使用. 相反, 它 们要么手工浏览系统中的 PCI 设备列表, 要么它们将调用一个能够搜索一个特定 PCI ...

  2. 用C++获取屏幕上某点的颜色

    假定坐标点 x=50,y=50. 输出 RGB 用 16 进制数.Afxwin.h 你建项目时可得.#include <Afxwin.h>#include <Windows.h> ...

  3. ZR普转提2

    ZR普转提2 A 谢谢刁神教我A题 刚开始读错题了,以为是一个不可做的数位DP,然后就暴力滚粗 直到问了问刁神,发现自己题意是错的 然后成了比较简单的题目 直接暴力枚举每一位填什么,剩下的位数的数字都 ...

  4. Linux 内核注册一个 USB 驱动

    所有 USB 驱动必须创建的主要结构是 struct usb_driver. 这个结构必须被 USB 驱动填 充并且包含多个函数回调和变量, 来向 USB 核心代码描述 USB 驱动: struct ...

  5. UE4 C++ 代码编译方式

    Unreal 有一个非常酷的特性 —> 不必关闭编辑器就可以编译 C++ 更改! 有两种方法可以达到这个目的: 1.直接点击编辑器主工具栏中的 编译(Compile) 按钮. 2.在编辑器继续运 ...

  6. form提交时accept-charset属性在IE及Edge下不起作用解决方案

    问题描述 我的页面是utf-8编码 目标页面是EUC-JP编码 即使已经设置了accept-charset="EUC-JP",提交后IE 和 Edge下还是乱码 解决方案: 1. ...

  7. HDU1166 敌兵布阵 BZOJ1012 最大数[树状数组]

    一.前置知识-树状数组 树状数组(binary indexed tree)是一种简洁的代码量很小的数据结构,能够高效的处理前缀区间上的问题.在很多情况下能写树状数组解决的就不用码半天线段树了. 树状数 ...

  8. SpringBoot-Swagger整合zuul智能列表

    SpringBoot-Swagger整合zuul智能列表 简介 可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调. 现在基本都是多模块微服务化,每个服务都有这样的ui页 ...

  9. vim 方式快捷编辑代码

    说明 **I: ** 行首插入 **a: ** 追加 **A: ** 行尾插入 **R: ** 替换文字 **v: ** 选择 **ctrl-v: ** 选择举行区域 **x: ** 删除 **dd: ...

  10. MySQL基础篇(03):系统和自定义函数总结,触发器使用详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.系统封装函数 MySQL 有很多内置的函数,可以快速解决开发中的一些业务需求,大概包括流程控制函数,数值型函数.字符串型函数.日期时间函数 ...