我想知道如何在MATLAB中在两个图像之间应用高斯滤波器。我理解在一个图像上使用空间高斯滤波器,您可以执行以下操作:
gauss_filter = fspecial('gaussian', [3 3], 1.5);
processed = imfilter(image, gauss_filter, 'replicate');
但是我试图为光流实现的算法(来自Trucco和Verri文本)描述了在帧序列中应用跨越时间维度的sigma = 1.5帧的高斯滤波器。
有没有办法在MATLAB中执行此操作?我想也许三维高斯滤波器可以工作,但我不确定这是否是正确的方法,或者我将如何创建/应用这样的滤波器。
答案 0 :(得分:1)
您可以在[width x height x frames]数组中存储图像,并在第3维上应用滤镜
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);