图像去雾学习(一):“暗通道”是什么 您所在的位置:网站首页 雾霭是名词吗 图像去雾学习(一):“暗通道”是什么

图像去雾学习(一):“暗通道”是什么

2024-07-14 05:54| 来源: 网络整理| 查看: 265

最近刚开始学图像处理方面的知识,对很多专业名词都并不了解,所以记录一下这方面的知识:

通常彩色图像都包括三个通道,即RGB三通道,也可以理解而成一张图片又三层同样大小的RGB(光学三原色:红绿蓝)三色堆叠而成,而图片实质上是由一个个像素组成的,对应于RGB三色来说,每一种颜色都是由这三原色组合而成,比如红色为(255,0,0),绿色为(0,255,0),粉红为(255,192,203),也就是说一张彩色图片中的每个像素都是以这种形式来表示的。

那么我们通常所说的暗通道,即清晰无雾的图片中除天空区域(因为天空区域或者白色区域和雾的特征较为接近)外的任一局部区域像素至少有一个通道值很低,几乎趋近于零。 那如何求暗通道呢,我们在上面的代码中已经做了详细的说明,便是先求每个像素在三个通道中的最小值,然后得到一张与原始图像大小一致的灰度图,然后再使用最小值滤波进行平滑处理,即在得到的灰度图中,以每一个像素为中心取一定大小的矩形窗口(本文为15x15),取矩形窗口中灰度值的最小值代替中心像素的值,从而得到原始图像对应的暗通道图像。(求暗通道过程中要计算两次最小值)

何博士的基于暗通道先验的单幅图像去雾中的部分代码:

clear all; I=imread('xxxx\dehazing.png'); %读取图片 I=double(I); %将读入图像I的uint8数据转换为double类型的数据 I=I./255; %将像素值转换到0~1之间 dark=darkfunction(I); subplot(1,2,1);imshow(I); subplot(1,2,2);imshow(dark); %展示雾图和对应的暗通道 function [dark] =darkfunction(I) R=I(:,:,1); %将I的第一层赋值给R,下面的G、B分别为I的第二、三层 G=I(:,:,2); %三个参数分别代表行、列和层 B=I(:,:,3); [m,n]=size(R); %size求取矩阵大小,返回其行列值,即m、n a=zeros(m,n); %zeros返回 m x n 大小的零矩阵 for i=1:m %i从1开始一直循环到m for j=1:n a(i,j)=min(R(i,j),G(i,j)); a(i,j)=min(a(i,j),B(i,j)); end; end; %整个for循环就是求取所有像素的RGB三通道(层)中的最小值,最后得到 %一副和原始图像同样大小的灰度图,即单通道图像 d=ones(15,15); %ones产生15x15的全1矩阵 fun=@(block_struct)min(min(block_struct.data))*d; %最小值滤波 %@(block_struct)为装饰器函数,block_struct.data表示传入的数据(图片或者矩阵) dark=blockproc(a,[15,15],fun); %blockproc为分块矩阵处理函数 dark=dark(1:m,1:n); end


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有