高斯滤波/高斯平滑/高斯模糊的实现及其快速算法(Gaussian Filter, Gaussian Smooth, Gaussian Blur, Fast implementation)

本文总结了高斯滤波的实现方法,包括原始卷积、可分离卷积、基于FFT的卷积以及递归高斯滤波。讨论了不同方法的算法复杂度,并提供了Matlab代码示例,特别指出递归高斯滤波算法能实现O(1)级别的复杂度,适用于大规模滤波器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上介绍针对图像进行高斯模糊的文章不少,其原理比较简单,这里就不做过多介绍。这里简单总结一下实现高斯模糊的几种算法(假设图像大小是M*N,filter的半径是r,注意,很多文章使用的术语是filter size,指的是半径大小或者直径大小,一般情况下filter的半径r取3倍或者4倍的sigma):

1.最原始的实现方法是,使用高斯函数生成高斯模板,然后使用该模板对图像做卷积(convolution)。该方法的算法复杂度是O(M*N*r^2),也就是,对每个像素而言,复杂度是O(r^2),与滤波器大小成quadratic关系。如果增大滤波器size,算法会明显减慢。

下面是Matlab实现的代码(注意,为了代码方便,以下代码中出现的filter size均指滤波器直径,而不是半径!):

function [T] = GenGaussFilterKernel(size, sigma) 
% here the size is the diameter of the filter

if mod(size, 2) == 0
    size = size + 1;
end

T = zeros(size, size);
distMat = zeros(size, size);
centerIdx = ceil(size / 2);

for i = 1:size
    for j = 1:size
        distMat(i,j) = sqrt(abs(i - centerIdx) ^ 2 + abs(j - centerIdx) ^ 2);
    end
end

T = exp(-distMat.^2 / (2 * sigma^2));

 

function [img_ext] = PaddingImgByMirrorEdge(img, r)

[h,w] = size(img);

% make a larger image, mirror the edges
img_ext = zeros(h + 2*r, w + 2*r);
img_ext(r+1:h+r, r+1:w+r) = img;
img_ext(1+r:h+r, 1:r) = fl
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值