(Matlab) Performance of Gaussian filtering using imfilter on a binary image

五迷三道 提交于 2019-12-02 03:30:01

It might be that the smoothing part is unnecessary, a simple thresholding of your image leads to a pretty clear identification of the fly:

f=rgb2gray(imread('frame.png'));
BW=f>30;
props=regionprops(BW, 'BoundingBox');
imshow(f)
rectangle('Position',props.BoundingBox, 'LineWidth',2, 'EdgeColor','b');

Result:

To answer your question about fast smoothing, you could use FFT-based low-pass filtering instead of a moving gaussian to smoothen your frames much faster. Example for one frame (the mask needs only to be done once):

f=rgb2gray(imread('frame.png'));
D=30;
[x,y]=size(f);

%Generating a disc-shaped binary mask with radius D:

Mask = fspecial('disk',D)==0;
Mask = ~imresize(padarray(Mask, [floor((x/2)-D) floor((y/2)-D)], 1, 'both'), [x y]);

% (Apply this to all the frames:)

MaskedFFT=fftshift(fft2(f));.*Mask;
Filteredf=abs(ifft2(MaskedFFT));

Result:

Original (f)

Filtered (Filteredf)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!