MATLAB可视化实战系列(二十五)-MATLAB基于直方图的图像去雾

举报
格图洛书 发表于 2021/11/19 00:13:56 2021/11/19
【摘要】 前言        直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围、灰度分布、整幅图像的亮度均值、阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据。直方图均衡化也叫作直方图均匀化,就是把给定图像的直方图分布变换成均匀分布的直方...

前言

       直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围、灰度分布、整幅图像的亮度均值、阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据。直方图均衡化也叫作直方图均匀化,就是把给定图像的直方图分布变换成均匀分布的直方图,是较为常用的灰度增强算法。直方图均衡化概括起来包括以下三个主要步骤。

以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟!

MATLAB-30天带你从入门到精通

MATLAB深入理解高级教程(附源码)

tableau可视化数据分析高级教程

●预处理。输入图像,计算该图像直方图。

●灰度变换表。根据输入图像的直方图计算灰度值变换表。

●查表变换。执行变换x=H(x),表示对步骤1中得到的直方图使用步骤2得到的灰度值变换表进行查表变换操作,通过遍历整幅图像的每一个像元,将原始图像灰度值x放入变换表H(x)中,可得到变换后的新灰度值x'。

       根据信息论的相关理论,我们可以知道图像经直方图均衡化后,将会包含更多的信息量,进而能突出某些图像特征。下面就为大家介绍三种常用的图像去雾方法。

1.全局直方图处理

通过函数imread读取RGB图像,并通过维数m*n*3的矩阵来表示。其中,维数m*n表示图像的行数、列数信息,维数3表示图像的R、G、B三层通道数据。因此,全局直方图处理通过对RGB图像的R、G、B三层通道分别进行直方图均衡化,再整合到新的图像的方式来进行。

%全局直方图I=imread('photo1.jpg');R=I(:,:,1);G=I(:,:,2);B=I(:,:,3);M=histeq(R);N=histeq(G);L=histeq(B);E=cat(3,M,N,L);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(E);
 

全局直方图去雾处理对比

图片

2.局部直方图处理

全局直方图均衡化增强只是将原图像的直方图进行了均衡化,未能有效保持原始图像的局部特征,容易出现色彩失真问题。通过选择固定尺寸的滑动窗口作用于原始图像来进行局部直方图处理,可以在一定程度上保持原始图像的局部特征,提高图像增强的效果。因此,局部直方图处理通过对RGB图像的R、G、B三层通道分别进行局部直方图均衡化,再整合到新的图像的方式来进行。

%局部直方图I=imread('photo1.jpg');x=mat2gray(I);f=im2double(x);w=4;k=0.06;M=mean2(f);f1=x(:,:,1);f2=x(:,:,2);f3=x(:,:,3);z1=colfilt(f1,[w w],'sliding',@std);m1=colfilt(f1,[w w],'sliding',@mean);z2=colfilt(f2,[w w],'sliding',@std);m2=colfilt(f2,[w w],'sliding',@mean);z3=colfilt(f3,[w w],'sliding',@std);m3=colfilt(f3,[w w],'sliding',@mean);A1=k*M./z1;A2=k*M./z2;A3=k*M./z3;g1=A1.*(f1-m1)+m1;g1=im2uint8(mat2gray(g1));g2=A2.*(f2-m2)+m2;g2=im2uint8(mat2gray(g2));g3=A3.*(f3-m3)+m3;g3=im2uint8(mat2gray(g3));E=cat(3,g1,g2,g3);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(E);
 

局部直方图去雾处理对比

图片

3.Retinex增强处理

为了进行对比,采取了Retinex 图像增强算法来进行对比,该算法可以平衡图像灰度动态范围压缩、图像增强和图像颜色恒常三个指标,能够实现对含雾图像的自适应性增强。因此,Retinex 增强处理通过对RGB图像的R、G、B三层通道分别应用Retinex算法进行处理,再整合到新的图像的方式来进行。

%Retinex增强I=imread('photo1.jpg');f=I;%提取RGB通道fr=f(:,:,1);fg=f(:,:,2);fb=f(:,:,3);%数据类型归一化mr=mat2gray(im2double(fr));mg=mat2gray(im2double(fg));mb=mat2gray(im2double(fb));%定义标准差aa=1000;%定义模板大小n=80;%计算中心n1=floor((n+1)/2);for i=1:n    for j=1:n%高斯函数    b(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*aa))/(pi*aa);    endend%卷积滤波nr1=imfilter(mr,b,'conv','replicate');ng1=imfilter(mg,b,'conv','replicate');nb1=imfilter(mb,b,'conv','replicate');ur1=log(nr1);ug1=log(ng1);ub1=log(nb1);tr1=log(mr);tg1=log(mg);tb1=log(mb);yr1=(tr1-ur1)/3;yg1=(tg1-ug1)/3;yb1=(tb1-ub1)/3;%定义标准差bb=53;%定义模板大小x=31;%计算中心x1=floor((n+1)/2);for i=1:n    for j=1:n%高斯函数    a(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*bb))/(6*pi*bb);    endend%卷积滤波nr2=imfilter(mr,a,'conv','replicate');ng2=imfilter(mg,a,'conv','replicate');nb2=imfilter(mb,a,'conv','replicate');ur2=log(nr2);ug2=log(ng2);ub2=log(nb2);tr2=log(mr);tg2=log(mg);tb2=log(mb);yr2=(tr2-ur2)/3;yg2=(tg2-ug2)/3;yb2=(tb2-ub2)/3;%定义标准差cc=13000;%定义模板大小l=501;%计算中心l1=floor((n+1)/2);for i=1:n    for j=1:n%高斯函数    e(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*cc))/(4*pi*cc);    endend%卷积滤波nr3=imfilter(mr,e,'conv','replicate');ng3=imfilter(mg,e,'conv','replicate');nb3=imfilter(mb,e,'conv','replicate');ur3=log(nr3);ug3=log(ng3);ub3=log(nb3);tr3=log(mr);tg3=log(mg);tb3=log(mb);yr3=(tr3-ur3)/3;yg3=(tg3-ug3)/3;yb3=(tb3-ub3)/3;dr=yr1+yr2+yr3;dg=yg1+yg2+yg3;db=yb1+yb2+yb3;cr=im2uint8(dr);cg=im2uint8(dg);cb=im2uint8(db);E=cat(3,cr,cg,cb);%结果显示subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(E);
 

Retinex算法去雾处理对比

图片

       以上就是今天介绍的三种不同图像去雾算法。其中,Retinex算法在使用时可针对图像对程序中定义的标准差与模板大小进行改动,以便于增强适用性,不同算法在不同照片中的效果也会有所不同。

文章来源: wenyusuran.blog.csdn.net,作者:文宇肃然,版权归原作者所有,如需转载,请联系作者。

原文链接:wenyusuran.blog.csdn.net/article/details/119247114

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。