将时间高斯滤波器应用于一系列图像

Posted

技术标签:

【中文标题】将时间高斯滤波器应用于一系列图像【英文标题】:Applying a temporal Gaussian filter to a series of images 【发布时间】:2013-11-17 00:15:53 【问题描述】:

我想知道如何在 MATLAB 中的两个图像之间应用高斯滤波器。我了解对于一张图像上的空间高斯滤波器,您会执行以下操作:

gauss_filter = fspecial('gaussian', [3 3], 1.5);
processed = imfilter(image, gauss_filter, 'replicate');

但我尝试为光流实现的算法(来自 Trucco 和 Verri 文本)描述了在帧序列中跨时间维度应用 sigma = 1.5 帧的高斯滤波器。

有没有办法在 MATLAB 中做到这一点?我认为也许 3d 高斯过滤器会起作用,但我不确定这是否是正确的方法,或者我将如何创建/应用这样的过滤器。

【问题讨论】:

【参考方案1】:

您可以将图像存储在 [width x height x frames] 数组中,并在第三维应用过滤器

img_array(:,:,1) = img1;
img_array(:,:,2) = img2;
img_array(:,:,3) = img3;
%...
sigma = 1.5;
fsize = 10;
x = linspace(-fsize / 2, fsize / 2, fsize);
gauss = exp(-x .^ 2 / (2 * sigma ^ 2));
gauss = gaussFilter / sum (gauss); 

for i=1:width
  for j=1:height
    array_filtered(i,j,:) = conv(img_array(i,j,:), gaussFilter, 'same');
  end
end

正如@s.bandara 建议的那样,您可以使用gauss = normpdf(x,0,sigma) 而不是

gauss = exp(-x .^ 2 / (2 * sigma ^ 2));
gauss = gaussFilter / sum (gauss); 

【讨论】:

+1 normpdf 可能是生成过滤器的好方法。

以上是关于将时间高斯滤波器应用于一系列图像的主要内容,如果未能解决你的问题,请参考以下文章

高斯滤波

学习 opencv--- 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波

图像滤波之高斯滤波介绍

MATLAB中的高斯滤波器

高斯滤波

[Python从零到壹] 五十五.图像增强及运算篇之图像平滑(均值滤波方框滤波高斯滤波)