图像处理之图像增强项目---csdn去雾专栏1
(一)高斯低通滤波去噪
高斯低通滤波器(Gaussian Low Pass Filter)是一类传递函数为高斯函数的线性平滑滤波器。又由于高斯函数是正态分布的密度函数。因此高斯低通滤波器对于去除服从正态分布(Normal distribution)的噪声非常有效。一维高斯函数和二维高斯函数 (高斯低通滤波器的传递函数) 的表达形式分别如下:
公式中,为标准差,由于图像通常是二维信号,因此图像去噪通常使用二维高斯函数作为传递函数,而高斯函数具有可分离的特性,因此可以先对行进行高斯滤波,再对列进行高斯滤波,这样二维高斯函数就可以降为一维高斯滤波。下图1分别模拟了标准差为10和标准差为50的高斯函数。
图1:不同标准差时的高斯曲线
从上图可以看出,高斯函数的标准差越大,高斯曲线越平滑。去噪能力越强,图像越模糊。
下图2用均值为0方差分别为0.1,0.5,1.0的高斯噪声对原图像进行污染的结果。
图2
高斯滤波的实现方式有时域方式和频域方式两种,一种是时域高斯低通滤波,一种是频域高斯低通滤波。下面首先看看时域高斯低通滤波的结果。时域高斯低通滤波的实质是定义一个奇数大小的模板(3 X 3 ;5 X 5 ;7 X 7 ……),然后让该模板遍历整副图像,模板中的加权平均值就是模板中心的值。时域高斯低通滤波的结果如下图所示:
图3:不同的标准差和领域大小时的去噪后的图像
从上图可以看出,当领域窗口固定时,标准差越大,去除高斯噪声能力越强,图像越模糊,当标准差为2以上时,去噪能力几乎不再增加,只有当增加领域的大小时,去噪能力才会进一步增强。下面我们可以看一下,标准差分别为10和30的高斯曲线来进一步说明在邻域窗口大小一致的情况下,标准差越大,高斯曲线越宽,那么去高频噪声的能力就越强。但是他不是无限增强的,最终会趋于一个稳定值,只有当继续增大邻域窗口时,去噪能力才会进一步增强。
图4:不同标准差时的高斯曲线
上述时域高斯低通滤波的matlab源代码如下:
- %时域高斯低通去噪
- x = imread('NoiseImage.jpg');
- subplot(231),imshow(x);title('高斯噪声为0.1的原图')
- y1 = fspecial('gaussian',5,0.1);
- z1 = imfilter(x,y1,'symmetric');
- subplot(232),imshow(z1);title('领域窗口大小为5X5,标准差为0.1');
- y2 = fspecial('gaussian',5,2);
- z2 = imfilter(x,y2,'symmetric');
- subplot(233),imshow(z2);title('领域窗口大小为5X5,标准差为2');
- y3 = fspecial('gaussian',5,3);
- z3 = imfilter(x,y3,'symmetric');
- subplot(234),imshow(z3);title('领域窗口大小为5X5,标准差为3');
- y4 = fspecial('gaussian',5,5);
- z4 = imfilter(x,y4,'symmetric');
- subplot(235),imshow(z4);title('领域窗口大小为5X5,标准差为5');
- y4 = fspecial('gaussian',11,5);
- z4 = imfilter(x,y4,'symmetric');
- subplot(236),imshow(z4);title('领域窗口大小为11X11,标准差为5');
下面实现频域高斯低通滤波器
由于时域滤波的本质就是采用原始图像与滤波核(领域窗口)进行卷积的操作,我们知道卷积的运算速度是比较慢的,由傅里叶变换的性质可知,时域卷积可以转化为频域的乘积。因而频域高斯低通滤波应运而生。该部分内容基本源于冈萨雷斯版数字图像处理中第四章的内容,为了避免抄书,这里仅给出与时域滤波有相似结果的频域滤波的matlab源代码。
频域高斯低通滤波器的传递函数为:;Matlab自带了低通滤波器函数lpfilter;它的源代码如下:
- function H = lpfilter(type, M, N, D0, n)
- %LPFILTER Computes frequency domain lowpass filters.
- % H = LPFILTER(TYPE, M, N, D0, n) creates the transfer function of
- % a lowpass filter, H, of the specified TYPE and size (M-by-N). To
- % view the filter as an image or mesh plot, it should be centered
- % using H = fftshift(H).
- %
- % Valid values for TYPE, D0, and n are:
- %
- % 'ideal' Ideal lowpass filter with cutoff frequency D0. n need
- % not be supplied. D0 must be positive.
- %
- % 'btw' Butterworth lowpass filter of order n, and cutoff
- % D0. The default value for n is 1.0. D0 must be
- % positive.
- %
- % 'gaussian' Gaussian lowpass filter with cutoff (standard
- % deviation) D0. n need not be supplied. D0 must be
- % positive.
- [U, V] = dftuv(M, N);
- % Compute the distances D(U, V).
- D = sqrt(U.^2 + V.^2);
- % Begin filter computations.
- switch type
- case 'ideal'
- H = double(D <= D0);
- case 'btw'
- if nargin == 4
- n = 1;
- end
- H = 1./(1 + (D./D0).^(2*n));
- case 'gaussian'
- H = exp(-(D.^2)./(2*(D0^2)));
- otherwise
- error('Unknown filter type.')
- end
为了防止傅里叶变换时由于周期性而导致的相邻周期之间的干扰,需要对输入图像进行0填充,对应于时域滤波中的imfilter函数中的“symmetric”选项。频域中采用paddedsize函数来实现。频域高斯低通滤波的matlab代码如下:
- f = imread('NoiseImage.jpg');
- subplot(221)
- imshow(f);title('原图')
- f_r = f(:,:,1);
- f_g = f(:,:,2);
- f_b = f(:,:,3);
- [M,N] = size(f_r);
- sig1 = 50; %%截止频率
- PQ = paddedsize(size(f_r)); %%确定输入图像补0后的边界大小
- Fp_r = fft2(f_r,PQ(1),PQ(2)); %% R通道傅里叶变换
- Fp_g = fft2(f_g,PQ(1),PQ(2));
- Fp_b = fft2(f_b,PQ(1),PQ(2));
- Hp1 = lpfilter('gaussian',PQ(1),PQ(2),2*sig1); %%生成高斯低通滤波,
- Gp_r1 = Hp1.*Fp_r; %% R通道高斯低通滤波
- Gp_g1 = Hp1.*Fp_g;
- Gp_b1 = Hp1.*Fp_b;
- gp_r1 = real(ifft2(Gp_r1)); %% 取得R通道的傅里叶反变换;
- gp_g1 = real(ifft2(Gp_g1));
- gp_b1 = real(ifft2(Gp_b1));
- gpc_r1 = gp_r1(1:size(f,1),1:size(f,2));
- gpc_g1 = gp_g1(1:size(f,1),1:size(f,2));
- gpc_b1 = gp_b1(1:size(f,1),1:size(f,2));
- gpc1 = cat(3,gpc_r1,gpc_g1,gpc_b1);
- gpc1 = uint8(gpc1);
- subplot(222),imshow(gpc1);title('截止频率为50的低通滤波')
- %%下面计算截止频率为30的频域高斯低通滤波
- sig2 = 30;
- Hp2 = lpfilter('gaussian',PQ(1),PQ(2),2*sig2); %%生成高斯低通滤波,
- Gp_r2 = Hp2.*Fp_r; %% R通道高斯低通滤波
- Gp_g2 = Hp2.*Fp_g;
- Gp_b2 = Hp2.*Fp_b;
- gp_r2 = real(ifft2(Gp_r2)); %% 取得R通道的傅里叶反变换;
- gp_g2 = real(ifft2(Gp_g2));
- gp_b2 = real(ifft2(Gp_b2));
- gpc_r2 = gp_r2(1:size(f,1),1:size(f,2));
- gpc_g2 = gp_g2(1:size(f,1),1:size(f,2));
- gpc_b2 = gp_b2(1:size(f,1),1:size(f,2));
- gpc2 = cat(3,gpc_r2,gpc_g2,gpc_b2);
- gpc2 = uint8(gpc2);
- subplot(223),imshow(gpc2);title('截止频率为30的低通滤波')
- %%下面计算截止频率为10的频域高斯低通滤波
- sig2 = 10;
- Hp3 = lpfilter('gaussian',PQ(1),PQ(2),2*sig2); %%生成高斯低通滤波,
- Gp_r3 = Hp3.*Fp_r; %% R通道高斯低通滤波
- Gp_g3 = Hp3.*Fp_g;
- Gp_b3 = Hp3.*Fp_b;
- gp_r3 = real(ifft2(Gp_r3)); %% 取得R通道的傅里叶反变换;
- gp_g3 = real(ifft2(Gp_g3));
- gp_b3 = real(ifft2(Gp_b3));
- gpc_r3 = gp_r3(1:size(f,1),1:size(f,2));
- gpc_g3 = gp_g3(1:size(f,1),1:size(f,2));
- gpc_b3 = gp_b3(1:size(f,1),1:size(f,2));
- gpc3 = cat(3,gpc_r3,gpc_g3,gpc_b3);
- gpc3 = uint8(gpc3);
- subplot(224),imshow(gpc3);title('截止频率为10的低通滤波')
仿真结果如下:
高斯低通滤波虽然较为简单,个人觉得将它说的非常明白,还是有些困难,这与自己的表达能力差有很大的关系,以后要养成些博客的习惯,希望能够尽早提高。我还是习惯用时域滤波的方法,频域滤波可以将时域的卷积运算转化为频域乘积运算,然而时域转化为频域过程中的傅里叶计算同样耗费时间。时域运算是领域操作,而频域计算式整体操作,关于时域和频域孰优孰劣还有待进一步考究。
高斯低通滤波应该是最基本的去噪手段,后面将进一步阐述双边滤波去噪、非局部均值去噪,以及核回归用于图像去噪。
-------------------------------------------任何一个理论,无论它是简单还是复杂,都应该将它剖析的非常清楚,这样才有可能将复杂的问题简单化,首先要将自己说服,才有可能让别人信服----------------------------------------------
http://bbs.csdn.net/topics/390872980 暗通道
http://www.csdn.net/tag/%25E5%258E%25BB%25E9%259B%25BE
http://www.csdn.net/article/2014-03-06/2818665-90s-coder-lady/2 浙大90后妹子机器学习
图像处理之图像增强项目---csdn去雾专栏1的更多相关文章
- Retinex图像增强和暗通道去雾的关系及其在hdr色调恢复上的应用
很多人都认为retinex和暗通道去雾是八杆子都打不着的增强算法.的确,二者的理论.计算方法都完全迥异,本人直接从二者的公式入手来简单说明一下,有些部分全凭臆想,不对之处大家一起讨论. 首先,为描述方 ...
- 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)
最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html 可处理视频的示例:视频去雾效果 在图像去雾这个领域,几乎没有人不知道< ...
- 一种可实时处理 O(1)复杂度图像去雾算法的实现。
在我博文的一系列的文章,有不少算法都于去雾有关,比如限制对比度自适应直方图均衡化算法原理.实现及效果.局部自适应自动色阶/对比度算法在图像增强上的应用这两个增强算法都有一定的去雾能力,而最直接的就是& ...
- paper 105: 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果及其他
在图像去雾这个领域,几乎没有人不知道<Single Image Haze Removal Using Dark Channel Prior>这篇文章,该文是2009年CVPR最佳论文.作者 ...
- paper 100:何恺明经典去雾算法
一:由简至美的最佳论文(作者:何恺明 视觉计算组) [视觉机器人:个人感觉学习他的经典算法固然很重要,但是他的解决问题的思路也是非常值得我们学习的] 那是2009年4月24日的早上,我收到了一封不同 ...
- OpenCV导向滤波(引导滤波)实现(Guided Filter)代码,以及使用颜色先验算法去雾
论文下载地址:http://research.microsoft.com/en-us/um/people/jiansun/papers/GuidedFilter_ECCV10.pdf 本文主要介绍导向 ...
- 基于暗通道优先算法的去雾应用(Matlab/C++)
基于暗通道优先的单幅图像去雾算法(Matlab/C++) 算法原理: 参见论文:Single Image Haze Removal Using Dark Channel Pri ...
- 基于clahe的图像去雾
基于clahe的图像去雾 通过阅读一些资料,我了解到clahe算法对图像去雾有所价值,正好opencv中有了实现,拿过来看一看. 但是现在实现的效果还是有所差异 #); clahe] ...
- ImageSharp一个专注于NetCore平台图像处理的开源项目
今天大家分享的是一个专注于NetCore平台图像处理的开源项目,老实说为这篇文章取名字想了5分钟,可能是词穷亦或是想更好的表达出这款开源项目的作用:这个项目在图像处理方面有很多功能,如:缩放,裁剪,绘 ...
随机推荐
- Xode 8 的那些坑
刚发布完Xcode的8.0果断更新了,发现用起来非常容易闪退,关键是我编辑项目时默认使用Xcode8打开,导致我用Xcode7打开Xib是报错: This version does not suppo ...
- Java-二叉树-插入、删除、遍历
二叉树的具体特性和细节知识点,自行百度,直接上代码. 节点:节点内容.左子孩子.右子孩子.父亲 class Node { private int data; private Node leftChil ...
- 【CF1025A】Doggo Recoloring(签到)
题意:给定一个长度为 n 的小写字母串.可以将出现次数大于等于2的字母全部变成另一个小写字母,问最后能否将该小写字母串的所有字母变成同一个字母 n<=1e5 思路: #include<cs ...
- net9:磁盘目录文件保存到XML文档及其XML文档的读写操作,以及绑定XML到treeview
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] directorytoxml类: using System;using System.Data;using Sys ...
- GridView从行寻找到该控件,以及从该控件获知该行
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] GridView从行寻找到该控件: protected void Button3_Click(object sen ...
- “百度杯”CTF比赛 十月场_Login
题目在i春秋ctf大本营 打开页面是两个登录框,首先判断是不是注入 尝试了各种语句后,发现登录界面似乎并不存在注入 查看网页源代码,给出了一个账号 用帐密登陆后,跳转到到member.php网页,网页 ...
- Epoll详解及源码分析【转】
转自:http://blog.csdn.net/chen19870707/article/details/42525887 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] ...
- 制作不随浏览器滚动的DIV-带关闭按钮
制作不随浏览器滚动的DIV 效果见 http://bbs.csdn.net/topics/90292438 的滚动效果. $(function(){ //获取要定位元素距离浏览器顶部的距离 var ...
- hdu 4183(网络流)
Pahom on Water Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Drupal service module 介绍
https://www.ostraining.com/blog/drupal/services/ https://www.drupal.org/node/1246470 https://www.dru ...