MATLAB图像处理:一分钟去除图片中的雾霾

一分钟去除图片中的雾霾

———-

山光全暝水光浮。

数里霏霏晓雾收。

露彩乍疑藏汉殿,

日光不透掩秦楼。


这是古人对于雾生动的描写,大概是说雾来无影去无踪,若隐若现十分神秘,然而生活在茫茫穹顶之下的我们,对于雾景的理解,却是这样的:

设想一下,当你身处美景,想一览寒梅的风采,快门一响,却被雾霾抢了镜头:

(ps:这张图真是太适合本帖了)

(图片来源于网上,欢迎保存测试)

广大的程序员们,对于这种情况千万要淡定!我们只需要不疾不徐的掏出笔记本,打开matlab,还原这幅寒梅图的本色只需一分钟!
—————————————————————————————————————————————————
(华丽的分割线,进入正题,从下文开始这幅寒梅图的名字叫fog.jpg)

使用matlab还原一个没有雾霾的世界,当务之急是要明白计算机是怎么看这幅图片中雾霾的,

其实很简单,对于计算机而言,一张像素大小为M*N的图,就是一个行为M(图片的长 ),列为N的一个矩阵(图片的宽),
此矩阵中每一个元素都是一个包含了[R,G,B]三原色的数组,代表着该像素点的颜色值,反过来由M*N个像素点组成的一个矩阵,

就是我们在计算机上看见的图片。

现在我们切实感受一下图像在计算机世界的显示方式,

把fog.jpg从文件夹中拖入matlab当前文件夹中, 在命令行中输入
 I=imread('fog.jpg') %读取图片,并用I保存图片的矩阵
会看见屏幕上数字飞滚,那就是这张图片的矩阵数据,仅仅220*220大小的图片就包含了漫漫多的145200个int类型数据如图:
然而计算机对于雾这种东西的理解,才是本文的精髓,这里要引出一个概念:直方图。直方图是指对图片进行颜色分类后,反映不同颜色出现次数的统计情况(也有人说是统计灰度的,这里说统计色彩为了更好理解),如肉眼所见,雾霾占据了整张图片的大部分面积,把整体的颜色拖向偏白的颜色,这使得该图的直方图变得更为集中于一个区域——白色

如此说来根据计算机对雾霾的理解,去除雾霾的原理,就是让图像的直方图从集中于白色的状态,转化成均匀的分布的状态,这样,图像才会回到原来丰富的色彩,雾霾占据的地方就会变得更加清晰了,然而matlab已然已经准备好了相关的函数histeq(参数是一个uint8的数组)。(终于可以说代码的事了。。。。)

核心代码如下:
function In = removeFogByGlobalHisteq(I)
%removeFogByGlobalHisteq 通过全局平衡直方图对图像去雾处理
%  I 输入图像
%拆分三原色
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%取直方图平衡
M=histeq(R);
L=histeq(G);
N=histeq(B);
%融合直方图
In=cat(3,M,L,N);
%上面的代码就是去雾用的
%-----------------------
%下面的代码都是用于显示的
    figure;
    subplot(2,2,1);imshow(I);title('原图' ,'FontWeight','Bold');
    subplot(2,2,2);imshow(In);title('处理后的图' ,'FontWeight','Bold');
    Q=rgb2gray(I);%获取该图直方图
    W=rgb2gray(In);%获取该图直方图

    subplot(2,2,3);imhist(Q,64);title('原图直方图' ,'FontWeight','Bold');
    subplot(2,2,4);imhist(W,64);title('处理后直方图' ,'FontWeight','Bold');
end


下面是效果图:

(处理后的直方图明显平缓了很多。。)

惊讶看到这一幕,是否很惊讶?!学会这招,强力对抗雾霾,闲来给妹子秀一发,形象瞬间从程序猿、修电脑的

一跃成为软件工程师和亲爱的有没有 得意

偷笑千万不用谢我,应该的应该的。。。。(那啥,我的银行账号写这了哈:xxxxxxxxxxx)




  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值