2013-11-17 3 views
1

Мне было интересно, как бы я применил гауссовский фильтр между двумя изображениями в MATLAB. Я понимаю, для пространственного фильтра Гаусса на одном изображении, вы могли бы сделать что-то вроде следующего:Применение временного гауссовского фильтра к серии изображений

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

Но алгоритм я пытаюсь реализовать для оптического потока (от Trucco и Верри текста) описывает применение фильтра Гаусса с sigma = 1.5 кадра во временном измерении в последовательности кадров.

Есть ли способ сделать это в MATLAB? Я думаю, возможно, будет работать 3D-фильтр Гаусса, но я не уверен, что это правильный способ сделать это или как я буду создавать или применять такой фильтр.

ответ

1

Вы можете сохранять изображения в [ширина х высота х кадров] массива и применить фильтр по 3 Dimention

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

+ 1 'normpdf' может быть хорошим сокращением для создания фильтра. –

Смежные вопросы