高斯滤波的快速实现
来源:互联网 发布:手机短信淘宝链接 编辑:程序博客网 时间:2024/04/27 22:54
http://www.cnblogs.com/ImageVision/archive/2012/06/11/2545555.html
二維高斯函數具有旋轉對稱性,處理後不會對哪一個方向上的邊緣進行了過多的濾波,因此相對其他濾波器,具有無法比擬的優越性。但是傳統Gauss濾波隨著圖像尺寸的增加,運算復雜度呈平方上漲,因此需要對其優化改進。下面,分別介紹傳統型,分解型和遞歸迭代型三種實現方法。
1 傳統型
Gauss濾波首先需要構建一個Gauss濾波核,公式為:
Matlab實現代碼:
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代碼實現:
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:
參考資料:Recursive implementation of the Gaussian filter。 Ian T. Young,1995
- 高斯滤波的快速实现
- 快速高斯滤波
- 快速高斯滤波
- 高斯滤波的C#实现方法
- 均值滤波的快速实现
- 高斯滤波 openCV实现
- 高斯滤波 openCV实现
- 高斯滤波/高斯平滑/高斯模糊的实现及其快速算法(Gaussian Filter, Gaussian Smooth, Gaussian Blur, Fast implementation)
- 高斯滤波/高斯平滑/高斯模糊的实现及其快速算法(Gaussian Filter, Gaussian Smooth, Gaussian Blur, Fast implementation)
- 快速高斯滤波(转载)
- CUDA实现图像的高斯滤波(opencv实现)
- 基于opencv的高斯滤波实现的VC++代码
- 图像平滑技术之盒滤波、均值滤波、中值滤波、高斯滤波、双边滤波的原理概要及OpenCV代码实现
- 3*3高斯,BOX,拉普拉斯滤波的实现
- 一维中值、均值、高斯滤波的Matlab实现
- 数字图像处理,高斯平滑滤波的C++实现
- 图像高斯滤波的FPGA实现--实时高速
- 用matlab实现一维信号的高斯滤波
- POJ 1930
- 浏览器兼容性问题
- JS判断PC端或移动端跳转至相应页面
- Why I am Here
- 系统重装后恢复MySQL数据
- 高斯滤波的快速实现
- JEE中事物的总结
- 双线性插值算法的详细总结
- LeetCode[Math]----Excel Sheet Column Title----Excel Sheet Column Number
- 网页中控件绑定数据源小demo
- PAT (Basic Level) Practise (中文)1033. 旧键盘打字(20)
- MySQL导出和导入含有二进制字段的数据
- LeetCode_OJ【73】Set Matrix Zeroes
- Linux下tmpfs与ramfs的区别