用于实时视频和图像去雾的优化对比度增强算法
1. 简介
该算法由一个韩国人提出,论文原文pdf版地址:https://download.csdn.net/download/HIVAN1/12188573,该论文中提出的优化对比度增强算法即可用于图像去雾,也可用于视频去雾,本文主要讲解图像去雾核心思想和方法,视频去雾只是增加临时一致性因子来消除去雾后的帧间差异。
2. 算法思想
算法还是基于以下大气散射模型
根据上式,最终无雾图像由下式得到:
由上式可知,要得到无雾图像J,需要先求出透射率t,以及大气光A。整个算法就围绕如何求上述两个量而展开。
作者认为雾的存在降低了图像对比度,因此,去雾实际上是增加图像对比度,但是增加对比度的同时,会导致图像像素值超出0-255这个范围,导致信息量的损失。因而,作者要提出的去雾算法必须权衡这两者的关系,最大限度提升对比度的同时,带来最小信息量的损失。
基于上述两点考虑,作者提出两个公式,如下图所示:
上图是优化对比度公式
上图是信息损失公式,最终的权衡函数如图所示:
算法的目标就是最小化这个E值。
下面对上面几个公式进行汉语解释,可能有点拗口,就是记录一下便于下次看的时候理解。
在讲解之前,我们先做这样一个假设,假设已经求出了大气光A值,然后随便取了一个t值,该t值对整幅图像都相同,通过去雾公式,计算去雾之后的图像J。
优化对比度公式就是图像J每个通道、每个位置的像素值,减去对应通道均值的平方和,再对平方和求均值。即求彩色图像的方差。
信息损失公式就是图像J超出0-255的各个位置、各个通道像素值的超出部分的平方和的均值,比如(0,0)位置、(R,G,B)值为(260,50,-10),则该位置超出部分值为(260-255)2+(-10)2),将图像中所有这样的像素计算出的结果全部相加然后除以像素数量(像素数量=宽高通道数)就是信息损失公式。
3. 算法流程
3.1 求取大气光
该论文求取大气光A值的方法和暗通道去雾算法不同,更加具有鲁棒性。求大气光算法主要分为以下几步:
- 将图像srcImage均分为四部分,分别为左上:ulImage,右上:urImage,右下:brImage,左下:blImage。
- 计算每部分得分,方法如下:先计算每部分每通道的均值和标准差(例如:左上部分ulImage:ulMeanR,ulMeanG,ulMeanB,ulStdR,ulStdG,ulStdB)。然后计算得分Score(例如左上部分:ulScore=(ulMeanR-ulStdR)+(ulMeanG-ulStdG)+(ulMeanB-ulStdB))。
- 将得分最高的图像部分赋给srcImage。
- 重复1-3步,直到最高得分区域面积小于预先设定值。作者代码中设置的是200。
- 取该区域最亮点的RGB值作为大气光值,方法如下min(||(R,G,B)-(255,255,255)||)。即每点distance=sqrt((255-R)2+(255-G)2+(255-B)2),distance最小的点即为最亮点。
注意:我认为该计算大气光方法的前提是假设天空区域图像亮度值较大且较为均匀,因此,各通道均值较大,而标准差较小,这样得分才会最大化。
但是实践证明此方法计算的大气光也可能存在问题,对于工业应用,一般是光源打光,没有天空部分,在镜头起雾的情况下,若图像中有较为鲜艳的颜色,我的实践图像中存在较大块明亮黄色区域(RG通道值较大,B通道值较小),其余部分为灰白色(RGB通道值相似),导致黄色区域中最亮的像素被计算为大气光值,最后去雾后,图像灰白色部分都变为暗紫色,整个图像颜色偏色严重。
因此,我认为要么找到一种更具鲁棒性的方法,要么根据自己图像的特点进行大气光值修正,我就是用的后者,由于图像大部分区域为灰白色,因此,我将计算得到的大气光RGB值中与其他两个相差较大的值修正为另外两个值的和的均值。
3.2 求粗透射率图
粗投射率的求取是一个迭代的过程:
- 先对图像分块,分块大小为30*30,每块图像的初始投射率是相同的,初始值为trans = 0.3。
- 然后对各个通道利用公式
计算出图像J。 - 计算图像J每块的对比度:对每一个图像块(width, height),其通道数为n,其像素数量为nNumofPixels = width*height*n,然后计算其每个通道、每个位置像素值的平方和fSumofSquaredOuts,然后计算每个通道、每个位置像素值的和fSumofOuts。对比度 Econtrast = -(fSumofSquaredOuts/nNumofPixels - (fSumofOuts/nNumofPixels)2)。
计算对比度的同时计算信息损失:对每个通道、每个位置的像素值value,若超出255,则计fSumofSLoss += (value-255)2,若小于0,则计fSumofSLoss += value2。信息损失 Eloss= fSumofSLoss/nNumofPixels。 - 计算代价函数:根据引入的惩罚系数λ,代价函数fCost = λ*Eloss+Econtrast。若fCost为首次计算或非首次计算但fMinCost>fCost,则fMinCost = fCost,该图像块的transmission = trans。然后该块的trans += 0.1。
- 循环迭代2-4步,迭代次数<7。
3.3 细化透射率图
本步骤使用导向滤波实现,将原图像的灰度图作为导向图,粗投射率图像作为待滤波图像,进行导向滤波,得到细化后的透射率图像。
3.4 恢复无雾图像
利用本文最开始的无雾图像计算公式恢复出无雾图像J即可。恢复得到的无雾图像一般比原图暗,可以适当利用gamma校正等手段校正图像亮度。
4. 效果
最终去雾效果如下图:
5. 代码
作者论文和代码链接:http://mcl.korea.ac.kr/projects/dehazing/#userconsent#,论文下载要收费,可以在本文开头下载链接中下载论文。
本人代码链接:https://github.com/ZPEthanWen/ImageAlgorithmDraft,若访问不了github,还可以在本站下载:https://download.csdn.net/download/HIVAN1/12230497
用于实时视频和图像去雾的优化对比度增强算法相关推荐
- 用于图像去雾的优化对比度增强算法
图像去雾哪家强?之前我们已经讨论过了著名的基于暗通道先验的图像去雾(Kaiming He, 2009)算法,如果你用兴趣可以参考: 暗通道优先的图像去雾算法(上) 暗通道优先的图像去雾算法(下) 此外 ...
- [Python图像识别] 四十六.图像预处理之图像去雾详解(ACE算法和暗通道先验去雾算法)
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 【Gated Context Aggregation Network for Image Dehazing and Deraining用于图像去雾和去雨的门控上下文聚合网络】,个人笔记,勿喷
摘要 图像去雾旨在从模糊图像中恢复未损坏的内容.我们没有利用传统的低级或手工图像先验作为恢复约束,例如暗通道和增加的对比度,而是提出了一个端到端的门控上下文聚合网络来直接恢复最终的无雾图像.在这个网络 ...
- 【MATLAB图像处理实用案例详解(1)】—— 基于直方图优化的图像去雾技术
目录 一.背景意义 二.理论基础 2.1 空域图像増强 2.2 直方图均衡化 三.方法选择 3.1 全局直方图算法 3.2 局部直方图算法 3.3 Retinex算法 四.效果演示 五.完整代码 一. ...
- 【第 01 章 基于直方图优化的图像去雾技术-全套系统MATLAB智能驾驶深度学习】
毋庸置疑的是,在汽车智能技术.汽车新能源技术.汽车电子这个群雄逐鹿的赛道.智能驾驶技术的要求也在不断的提升. 智能车辆教学平台.智能网联教学平台.汽车电子教学设备.在环仿真系统,目前主流的系统有很多, ...
- RYF-Net: 深度融合网络用于单幅图像去雾(Deep Fusion Network for Single ImageHaze Removal-IEEE_TIP-2020)
概述 在本文中提出了一种基于卷积神经网络的体系结构来估计模糊场景的场景传输图(TrMap).本文提出的网络以雾图像为输入,利用本文提出的RNet和YNet分别通过RGB和YCbCr颜色空间提取雾霾相关 ...
- IPUDN(用于单幅图像去雾的透射图和大气光导迭代更新器网络)CVPR_2020
摘要: 本文提出了一种基于新颖的迭代更新框架的迭代先验更新网络 (IPUDN).我们提出了一种新颖的卷积体系结构来估计信道方向的大气光,并将其与估计的透射图一起用作去雾网络的先验.使用通道方向的大气光 ...
- 基于MATLAB改进暗通道先验的图像去雾算法
基于MATLAB改进暗通道先验的图像去雾算法 摘要:暗通道先验去雾算法求得的的透射率比较精细,去雾效果优于大多数去雾算法.然而在暗通道求取过程中,最小值滤波的处理会使得暗色向外扩张,导致透射率扩张变大 ...
- 高级图像去雾算法的快速实现。
http://blog.csdn.net/occupy8/article/details/40322683 最新的效果见 :http://video.sina.com.cn/v/b/124538950 ...
- 高级图像去雾算法的快速实现
FROM:http://blog.csdn.net/occupy8/article/details/40322683 最新的效果见 :http://video.sina.com.cn/v/b/1245 ...
最新文章
- C++11中unique_ptr的使用
- php获取python的变量,PHPPython变量交换
- Silverlight在IIS中的配置
- html css加载不了_CSS加载会阻塞页面显示?
- 【渝粤教育】21秋期末考试个人与团队管理10257k2
- Python学习之路39-特性property
- mysql8 设置了默认值 CURRENT_TIMESTAMP 依然报null问题
- 端午节那晚,见了个小学时的同学!
- [转]Python中RE模块的应用
- 一步一步学Repast 第二章(把界面显示出来)
- Python助你秒抢红包,拼手速?不存在!
- MPICH2 bcast广播函数使用
- tp5微信开发(一) ---- 微信公众号配置token
- Github Pages + Hugo 搭建个人博客
- LeetCode:14. Longest Commen Prefix(Easy)
- DirectX 9.0笔记]第一章 初始化 Direct3D
- 电感RDC、IDC值是什么意思?或DCR DCI
- 极验验证的滑动验证码破解
- 【03yy and one】
- Ubuntu软件安装与更改镜像源(超详细)
热门文章
- 数据仓库开发工程师岗位要求
- css3新单位vw、vh、vmin、vmax的使用介绍
- html博客音乐播放器代码大全,播放器代码大全
- Eclipse 启动时提示loading workbench错误并提示查看.log
- 强化学习RL——多臂老虎机问题
- html5下拉菜单清除样式,如何取消下拉菜单格式
- 等保测评机构申请难吗?到哪里申请?
- 计算机如何切换显卡,Win7系统双显卡怎么切换独立显卡?电脑双显卡切换方法...
- lte基站信号测试软件,LTE基站的RF一致性测试
- 《信号与系统》解读 第1章 信号与系统概述-1:信号与系统的描述和分析方法