matlab做gaussian高斯滤波
原文链接:https://blog.csdn.net/humanking7/article/details/46826105
函数: fspecial
函数: imfilter
代码实现
clc;
%----------------------------------------------
%对图像进行高斯滤波,并显示图像
%----------------------------------------------
%读进图像
[filename, pathname] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png' }, '选择图片');
if filename == 0
return;
end
[m, n, z] = size(Image);
if z>1
Image = rgb2gray(Image);
end
gausFilter = fspecial('gaussian', [5,5], sigma);
gaus= imfilter(Image, gausFilter, 'replicate');
%显示图像-----------------------
figure(1)
subplot(1,2,1);
imshow(Image);
title('原图像');
subplot(1,2,2);
imshow(gaus);
title('滤波后');
————————————————
版权声明:本文为CSDN博主「祥知道」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/humanking7/article/details/46826105
来源:https://www.cnblogs.com/miki-52/p/5289062.html 待验证
Gauss滤波快速实现方法(转)
二维高斯函数具有旋转对称性,处理后不会对哪一个方向上的边缘进行了过多的滤波,因此相对其他滤波器,具有无法比拟的优越性。但是传统Gauss滤波随着图像尺寸的增加,运算复杂度呈平方上涨,因此需要对其优化改进。下面,分别介绍传统型,分解型和递归迭代型三种实现方法。
1 传统型
Gauss滤波首先需要构建一个Gauss滤波核,公式为:
Matlab实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
dSigma =0.8; fK1=1.0/(2*dSigma*dSigma); fK2=fK1/ pi ; iSize = 5; step = floor (iSize/2 + 0.5); for i = 1 : iSize x= i -step; fTemp=fK2* exp (-x*x*fK1); for j = 1 : iSize y= j -step; model(x+step,y+step)=fTemp* exp (-y*y*fK1); end end dSum = sum ( sum (model)); model = model/dSum; %Gauss核数值归一化 |
图1 Gauss滤波核(5*5大小)
接下来就是将输入图像和滤波核进行卷积操作。其实质就是对原始图像进行加权求和,把这个“和”赋给中心像素。对于一个2048*2048的图像,需要进行104734756次乘法运算,和104734756次加法运算,运算复杂度是很高的。
2 分解型
我们可以把一个二维Gauss核分解为两个一维高斯核,然后先对行做一次一维卷积,再对这个卷积结果做一次一维列卷积,得到的结果完全一模一样,而开销会小很多。
一维高斯核函数:
Matlab代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
|
dSigma =0.8; fK1=1.0/(2*dSigma*dSigma); fK2=fK1/ pi ; iSize = 5; step = floor (iSize/2 + 0.5); for i = 1 : iSize x= i -step; fTemp=fK2* exp (-x*x*fK1); model(1,x+step) = fTemp; end dM = sum (model); model = model / dM; |
图2 一维高斯滤波核(1*5大小)
一维卷积原理和二维卷积一样,只不过我们只需要将同一行或同一列上的数据,按位置一一加权求和,再把“和”赋给中心元素。
对于一个2048*2048的图像,需要进行41918464次乘法运算,和41918464次加法运算。相比传统运算量,只是前者的1/2.4985。如果遇到频繁计算Gauss滤波的算法,后者明显比前者速度快很多。
3 递归迭代型
第二种方法较第一种方法,虽然有了较大改善,但是任然复杂度较高。这里再介绍一种更快速的逼近Gauss滤波方法。
具体步骤分为两步:首先对图像做一次前向滤波,其次,对图像再做一次后向滤波。
Forward:
Backward:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
qFactor = 5; b0Coeff = 1.57825 + (2.44413 * qFactor) + (1.4281 * qFactor * qFactor) + (0.422205 * qFactor * qFactor * qFactor); b1Coeff = (2.44413 * qFactor) + (2.85619 * qFactor * qFactor) + (1.26661 * qFactor * qFactor * qFactor); b2Coeff = (-1.4281 * qFactor * qFactor) + (-1.26661 * qFactor * qFactor * qFactor); b3Coeff = 0.422205 * qFactor * qFactor * qFactor; normalizationCoeff = 1 - ((b1Coeff + b2Coeff + b3Coeff) / b0Coeff); vDenCoeff = [b0Coeff, -b1Coeff, -b2Coeff, -b3Coeff] / b0Coeff; vXSignal = zeros (61, 1); vXSignal(31) = 10; vYSignal = filter (normalizationCoeff, vDenCoeff, vXSignal); vYSignal = filter (normalizationCoeff, vDenCoeff, vYSignal( end :-1:1)); figure (); plot (vYSignal); |
来源:https://baike.baidu.com/item/高斯滤波/9032353?fr=aladdin
简介

是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。与此相关的有Gauss-Laplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积至空域卷积。
定义
原理


应用
两种方式
可分离滤波器
模型建立
来源:matlab
std = p3;
[x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));
arg = -(x.*x + y.*y)/(2*std*std);
h(h<eps*max(h(:))) = 0;
if sumh ~= 0,
h = h/sumh;
end;
matlab做gaussian高斯滤波的更多相关文章
- 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现
基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1. 背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...
- matlab中fspecial Create predefined 2-D filter以及中值滤波均值滤波以及高斯滤波
来源: 1.https://ww2.mathworks.cn/help/images/ref/fspecial.html?searchHighlight=fspecial&s_tid=doc_ ...
- SIFT四部曲之——高斯滤波
本文为原创作品,未经本人同意,禁止转载 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 或 ...
- OpenCV计算机视觉学习(4)——图像平滑处理(均值滤波,高斯滤波,中值滤波,双边滤波)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice &q ...
- 学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波
本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤 ...
- OpenCV实现的高斯滤波探究_1(《学习OpenCV》练习题第五章第三题ab部分)
首先看下OpenCV 官方文档对于cvSmooth各个参数的解释: Smooths the image in one of several ways. C: void cvSmooth(const C ...
- 机器学习进阶-阈值与平滑-图像平滑操作(去噪操作) 1. cv2.blur(均值滤波) 2.cv2.boxfilter(方框滤波) 3. cv2.Guassiannblur(进行高斯滤波) 4. cv2.medianBlur(进行中值滤波)
1.cv2.blur(img, (3, 3)) 进行均值滤波 参数说明:img表示输入的图片, (3, 3) 表示进行均值滤波的方框大小 2. cv2.boxfilter(img, -1, (3, ...
- Atitit 图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)
Atitit 图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenC ...
- 基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存
如题:使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换.高斯滤波.canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存 ...
随机推荐
- Android开发必有功能,更新版本提示,检测是否有新版本更新。下载完成后进行安装。
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. 给大家介绍个东西,MarkDown真的超级超级好用.哈哈.好了, 正题内容如下: 先 ...
- Android开发之TextView中间设置横线,适用于电商项目,商品原价之类的功能。
textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); //中间横线 textview.getPaint().setFlags(Pai ...
- Android开发之http网络请求返回码问题集合。
HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 一.1xx(临时响应) 表示临时响 ...
- IOS 提审
关于上架AppStore最后一步的“出口合规信息”.“内容版权”.“广告标识符”的选择 https://blog.csdn.net/ashimar_a/article/details/51745675
- 只有一重循环的排序——侏儒排序(Gnome Sort)
侏儒排序:从头(i=0)开始遍历元素,如果当前元素比前一个元素大(array[i]>array[i-1]),就把它跟前一个元素互换(Swap(a[i],a[i-1]))并继续检查它(i--),否 ...
- Tiled and Unity
https://www.mapeditor.org https://assetstore.unity.com/packages/tools/integration/tiled-to-unity-172 ...
- PAT甲级1151(由前序和中序确定LCA)
The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...
- A Walk Through the Forest (最短路+记忆化搜索)
Jimmy experiences a lot of stress at work these days, especially since his accident made working dif ...
- C# 转化成 json ,特殊字符的处理
//1.定义string jsonText0= "{\"beijing\":{\"zkkke\":\"2222\",\" ...
- 对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你
对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你 项目背景 我所在的组织项目数量众多,使用的语言和框架也很多,比如Java.ReactNative.C# .NET.A ...