【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)

这篇具有很好参考价值的文章主要介绍了【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明:原创内容,创作不易,欢迎点赞收藏~

摘    要

       随着信息化时代的到来,计算机视觉得以迅速发展,在社会生活中的各个领域发挥了重要作用。然而,近年来大气污染逐渐加重,雾霾天气出现的频率越来越高,导致户外成像设备不能捕捉到高质量的清晰图像,无法正常运用于计算机视觉系统。因此,对雾天图像进行去雾处理的计算机视觉技术得以发展和运用。

      本课程设计依照何恺明博士等人在《Single Image Haze Removal Using Dark Channel Prior》(点击查看论文链接)中提到的基于暗通道先验的图像去雾算法,使用MATLAB语言实现了一个基于暗通道先验单幅图像去雾的系统。结合暗通道先验条件与雾天图像模型,通过原始有雾图像得到图像的暗通道图,然后估计大气光照和介质传输率,由雾天图像模型复原出无雾图像。系统实现后,将各种各样的有雾图像输入系统中进行实验,实验的结果证明了所提出的基于暗通道先验的图像去雾算法的有效性。基于暗通道先验的图像去雾算法是一种简单有效的图像去雾算法,值得在此基础上加以改进和创新。

系统功能分析

       按照何恺明博士等人在《Single Image Haze Removal Using Dark Channel Prior》中提到的基于暗通道先验的图像去雾算法,在使用MATLAB编程时,首先需要根据原始有雾图像通过计算后得到图像的暗通道图像JDark,应当编写一个darkChannel函数将原始图像作为输入,暗通道图像作为输出。得到暗通道图像后,需要根据原始图像和暗通道图像的信息估计大气光照,应当编写一个atmLight函数来实现该过程,以暗通道图像和原始图像的信息作为输入,大气光照作为输出。计算得到大气光照后,再根据原始图像和大气光照估计出该天气下的介质传输率,应当编写一个transmissionEstimate函数来实现该过程,以大气关照和原始图像作为输入,以介质传输率作为输出。最后根据雾天图像模型即可复原出无雾图像J,因此需要编写一个函数getRadiance来实现该过程,以原始图像、大气光照、介质传输率作为输入,以无雾图像J作为输出。经过上述步骤后,便可由一幅有雾图像复原出其对应的无雾图像。

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)

图1 图像去雾系统结构图

功能实现

       本课程设计,使用Windows11下的MATLAB 2022a编写实现。图像去雾算法参考何恺明博士等人发表的《Single Image Haze Removal Using Dark Channel Prior》一文。

     1.暗通道图像的获取——Jdark=darkChannel(img)

在论文中,图像暗通道图像被以下公式所定义:

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB) 

图2 暗通道图像定义

因此编写的MATLAB代码如下:

function JDark = darkChannel(im2)
%根据图像得到图像的暗通道图像
[height, width, ~] = size(im2);
patchSize = 15; %设置参数Patch Size大小为15
padSize = floor(patchSize/2); %将填充数组的padSize设置为Patch Size的一半左右
JDark = zeros(height, width); % 返回的暗通道图像
imJ = padarray(im2, [padSize padSize], Inf); % 用无穷大初始化填充数组
for j = 1:height
    for i = 1:width
    patch = imJ(j:(j+patchSize-1), i:(i+patchSize-1),:);
    %求取最小值作为暗通道中的值
    JDark(j,i) = min(patch(:));%局部区域内的暗通道是该区域内所有通道的最小值
    end
end

     2.估计大气光照——A=atmLight(im,JDark)
在论文中,大气光照的估计方法为:

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)

图3 大气光照定义

即在暗通道图像里挑选出0.1%的最亮像素,将这些像素对应的原始图像的最亮的像素值的平均值作为大气光照。

因此编写的MATLAB代码如下:

function A = atmLight(im, JDark)
%4.3中估计大气光 A
% 大气光的颜色非常接近天空的颜色
% 所以选择所以只需选择暗通道图像(JDark)中中最接近1的前几个像素
% 通过对暗通道图像中前0.1%最亮像素取平均即可
% 获取图片大小
[height, width, ~] = size(im);
imsize = width * height;
numpx = floor(imsize/1000); % 图像中前0.1%的像素个数
JDarkVec = reshape(JDark,imsize,1); %暗通道图像像素向量化
ImVec = reshape(im,imsize,3); %原图图像像素向量化
% 根据像素值对暗通道图像中的像素进行排序
[JDarkVec, indices] = sort(JDarkVec); 
indices = indices(imsize-numpx+1:end); % 取出最亮的0.1%个像素值索引
atmSum = zeros(1,3);
for ind = 1:numpx
    atmSum = atmSum + ImVec(indices(ind),:);%累加求和
end
A = atmSum / numpx;%求平均值

     3.估计介质传输率——transmission = transmissionEstimate(im,A)
在论文中,介质传输率的计算方法为:

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)

图4 介质传输率定义

因此编写的MATLAB代码如下:

function transmission = transmissionEstimate(im,A)
%4.1估计传输率
omega = 0.95; %保留景深感,保留少量的雾而设置的参数
%对有雾图的每一个颜色通道进行归一化
im3 = zeros(size(im));
for ind = 1:3 
    im3(:,:,ind) = im(:,:,ind)./A(ind);
end
transmission = 1-omega*darkChannel(im3);%计算出传输率

     4.复原得到无雾图像——J = getRadiance(A,im,transmission)

在论文中,无雾图像复原的计算方法为:

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB) 

图5 无雾图像复原

因此编写的MATLAB代码如下:

function J = getRadiance(A,im,transmission)
t0 = 0.1;%设置传输率下界
J = zeros(size(im));
for ind = 1:3
    J(:,:,ind) = (im(:,:,ind) - A(ind))./max(transmission,t0)+A(ind); 
end
J = J./(max(max(max(J))));

运行展示

(1)如下图所示,原始图片中太阳光照下的丁达尔效应被去雾算法去除。

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)
图6 (图片来源:Pexels素材图片)

(2)如下图所示,游戏截图中的雾气被去除,能见度变高,但仍有雾气残留。

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)

图7 (图片来源:米哈游《原神》孤云阁游戏内截图)

(3)如下图所示,森林中的雾气被去除掉,人物和树木的轮廓更加明显。

【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB) 图8 (图片来源:Pexels素材图片)

总结与展望

        本课程设计通过MATLAB编程实现了何恺明博士等人在《Single Image Haze Removal Using Dark Channel Prior》中提到的基于暗通道先验的图像去雾算法,在参阅完他们的这篇著名论文后,尽管有些小困惑在心头,但心中不得不肃然起敬。本以为会是一种相当复杂的图像去雾算法,在理解其大致思想后,我心中才明白好的算法应该就是返璞归真,大道至简的。使用简单的模型,有效解决实际生活中困难的问题。论文中提到的暗通道先验是基于户外无雾图像的一种统计结果,即除去天空区域外,图像中大部分局部局域中的有些像素总是在RGB通道中至少有一个通道有着非常小的亮度值,这样的像素被称为暗像素。而在有雾图像中这些暗像素的亮度值则由大气光照所导致。这一重要的统计规律的发现,无疑对该论文中图像去雾算法产生了巨大的帮助,但我想这也一定离不开何恺明博士等人对雾天图像的大量实验研究才能有所发现。科学的真理往往藏在隐秘的地方,需要锲而不舍的人去发现和探索。在通过MATLAB编程后,才发现纸上得来终觉浅,经过不断地重复参阅论文,反复理解和感悟,加上一步步编程实践,才让我更好地理解了这篇著名的论文,获益匪浅。

        暗通道先验是一种通过对大量无雾图像研究所得到的统计结果,它并不能很好地适用于所有有雾图像的去雾处理,当图像中场景的像素强度与大气光照类似时,如雪雾天气下的场景,白色背景的场景等等,暗通道先验图像去雾算法就不再适用了。另外,暗通道先验图像去雾算法中,有不少参数设定在日常经验之中,例如原始图像提取暗通道图像的过程中,PatchSize,大小的设定;在估计介质传输率中,景深系数omega大小的设定;有雾图像复原成无雾图像中,介质传输率下界t0的大小的设定。这些参数的变化,都会切实影响到去雾图像的效果。如果某一参数不合适,往往就不能得到一幅视觉上观感较好的去雾图像,如何针对每一幅图像选定合适的参数进行图像去雾,从而达到更好的去雾效果,将是一个值得探讨和研究的有意义的问题。

        总而言之,基于暗通道先验的单幅图像去雾算法是一个简单和非常有效的图像去雾算法,解决了图像去雾过程中的一些具有挑战性的问题,但依我之见,算法还有完善和发展的空间,在未来的图像去雾算法中具有很大的发展潜力,并且值得研究者在此基础上不断改进、完善和创新。

主要参考文献

[1]He Kaiming,Sun Jian,Tang Xiaoou. Single Image Haze Removal Using Dark Channel Prior.[J]. IEEE transactions on pattern analysis and machine intelligence,2011,33(12). 
[2]孙维江. 基于暗通道先验信息的单幅图像去雾研究[D].兰州理工大学,2018.
[3]张赛赛.基于单幅数字图像去雾技术综述[J].电脑编程技巧与维护,2022(08):147-151.DOI:10.16184/j.cnki.comprg.2022.08.002.
[4]李博文,刘进锋.图像去雾技术研究综述[J].现代计算机,2022,28(13):57-61.
[5]陈俊安,陆庚有,谢倩怡,龚智慧,刘建平,彭绍湖.图像去雾算法研究综述[J].电脑与电信,2022(07):63-66.DOI:10.15966/j.cnki.dnydx.2022.07.012.
[6]张雪,王峰,赵佳.基于暗通道先验的单幅图像去雾改进算法[J].阜阳师范大学学报(自然科学版),2022,39(02):69-75.DOI:10.14096/j.cnki.cn34-1069/n/2096-9341(2022)02-0069-07.
[7]胡莹洁. 雾天图像去雾方法研究[D].中国矿业大学,2022.DOI:10.27623/d.cnki.gzkyu.2022.000563.
[8]张威. 基于改进暗通道算法的单幅图像去雾研究[D].南京邮电大学,2021.DOI:10.27251/d.cnki.gnjdc.2021.000756.

 文章来源地址https://www.toymoban.com/news/detail-452752.html

到了这里,关于【计算机视觉课程设计】基于暗通道先验单幅图像去雾算法的实现(MATLAB)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计:基于计算机视觉的苹果成熟度检测系统 目标检测

    目录 前言 项目背景 数据集 设计思路 更多帮助     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充

    2024年04月17日
    浏览(35)
  • 基于计算机视觉,深度学习、机器学习,OpenCV,图像分割,目标检测卷积神经网络计算机毕业设计选题题目大全选题指导

    随着深度学习、机器学习和神经网络技术的快速发展,计算机视觉领域的应用变得越来越广泛和有趣。本毕业设计旨在探索这一领域的前沿技术,将深度学习模型、神经网络架构、OpenCV图像处理工具,以及卷积神经网络(CNN)的强大能力结合起来,以解决实际图像处理问题。

    2024年02月08日
    浏览(45)
  • 【北邮鲁鹏老师计算机视觉课程笔记】02 filter

    二进制图像: 灰度图像: 彩色图像: 噪声点让我们看得难受是因为噪声点与周边像素差别很大 滤波核= 卷积核 对应相乘再累加起来 卷积核记录了权值,把权值套到要卷积的目标图上,对应相乘 线性和平移不变形 因为实际使用的时候卷积核是对称的,因此不要求翻转 真实

    2024年02月20日
    浏览(31)
  • 毕业设计选题:基于深度学习的舌头分割系统 人工智能 YOLO 计算机视觉

    目录 前言 课题背景和意义 实现技术思路 一、 算法理论基础 1.1 Snake模型  1.2 几何约束  1.3 切片重组 二、 数据集 三、实验及结果分析 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。

    2024年02月19日
    浏览(59)
  • 毕业设计:基于机器学习的硬币检测识别系统 人工智能 YOLO 计算机视觉

    目录 前言 课题背景和意义 实现技术思路 一、 硬币检测方法 1.1 规格、变形监测 1.2 变色检测 二、 数据集 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为

    2024年02月20日
    浏览(50)
  • 【北邮鲁鹏老师计算机视觉课程笔记】09 Segmentation 分割

    【北邮鲁鹏老师计算机视觉课程笔记】09 Segmentation 分割 找一个合适的分割方法 过分割:分割得太细 自底向上的方法 无监督的 自底向上:基于像素的 自顶向下:从语义的角度 人会感觉下面的线比上面的线长 人的感知:先感知部件,然后理解组合后的整体语义 临近的、颜色

    2024年02月19日
    浏览(34)
  • 【北邮鲁鹏老师计算机视觉课程笔记】08 texture 纹理表示

    【北邮鲁鹏老师计算机视觉课程笔记】08 texture 纹理表示 规则和不规则的 从纹理中恢复形状 通过识别纹理分析物理性质 如何区分纹理 发现模式、描述区域内模式 A对应图2 B对应图3 C对应图1

    2024年02月20日
    浏览(40)
  • 【北邮鲁鹏老师计算机视觉课程笔记】06 corner 局部特征

    【北邮鲁鹏老师计算机视觉课程笔记】06 corner 局部特征 ①提取特征 ②匹配特征 ③拼接图像 我们希望特征有什么特性? ①可重复性 ②显著性 ③计算效率和表达紧凑性 ④局部性 在角点,往任意方向移动窗体都会发生变化 用泰勒展开,建立E(u,v)和(u,v)的直接关系 E(u,v)是移动

    2024年02月20日
    浏览(30)
  • 毕业设计选题 基于深度学习的人流量预测系统 人工智能 YOLO 计算机视觉

    目录  前言 设计思路 一、课题背景与意义 二、算法理论原理 2.1 卷积神经网络 2.2 注意力机制 三、检测的实现 3.1 数据处理 3.2 实验环境搭建 3.3 实验及结果分析 最后        📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要

    2024年01月19日
    浏览(47)
  • 基于python的计算机视觉的答题卡识别及判分系统设计与实现

    摘 要 相比传统的纸质阅卷模式,答题卡的出现帮助教师缓解了试卷批阅的压力,答题卡配合光标阅读机的阅卷模式也逐渐普及应用,然而光标阅读机购买及维护费用较高不利于普通学校的使用。随着计算机视觉研究的不断发展,答题卡识别也成为了计算机视觉研究的重要内

    2024年02月10日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包