Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance (Matlab)二值图像上使用imfilter的高斯滤波性能_Performance_Matlab_Filter_Gaussian - Fatal编程技术网

Performance (Matlab)二值图像上使用imfilter的高斯滤波性能

Performance (Matlab)二值图像上使用imfilter的高斯滤波性能,performance,matlab,filter,gaussian,Performance,Matlab,Filter,Gaussian,我目前正在编写一个程序,在一个小房间里跟踪一只正在运行的苍蝇,我想要的是苍蝇中心的XY坐标。 对于这一点,我首先使用高斯滤波器对每一帧进行滤波,使用f特殊的‘高斯’、[30]、100和imfilter得到苍蝇所在的白云。我需要这个来减少苍蝇中心的噪音。 我使用im2bw将结果转换成一个具有特定阈值的二值图像,以从前面提到的云中获得一个白色斑点。 为了获得坐标,我使用regionprops查找白色斑点的质心。 它已经可以正常工作了,但它需要时间——30分钟的视频大约需要6小时;不过,帧速率是100

我目前正在编写一个程序,在一个小房间里跟踪一只正在运行的苍蝇,我想要的是苍蝇中心的XY坐标。 对于这一点,我首先使用高斯滤波器对每一帧进行滤波,使用f特殊的‘高斯’、[30]、100和imfilter得到苍蝇所在的白云。我需要这个来减少苍蝇中心的噪音。 我使用im2bw将结果转换成一个具有特定阈值的二值图像,以从前面提到的云中获得一个白色斑点。 为了获得坐标,我使用regionprops查找白色斑点的质心。 它已经可以正常工作了,但它需要时间——30分钟的视频大约需要6小时;不过,帧速率是100 fps

我已经发现高斯滤波占据了大部分时间——我能调整一下这个过程吗? 我读到了关于conv2的文章,据说它速度更快,但对二进制图像不起作用,是吗?把我的二进制图像转换成单幅或双幅会把它们搞砸

我已经在其他层面上对代码的性能进行了研究,比如调整搜索窗口等,所以过滤是我所能评估的


提前感谢

可能不需要平滑部分,对图像进行简单的阈值化可以非常清晰地识别苍蝇:

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

为了回答您关于快速平滑的问题,您可以使用基于FFT的低通滤波,而不是移动高斯来更快地平滑帧。例如,对于一帧,遮罩只需执行一次:

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));
结果:

原始f

过滤过滤器


这是一个示例图像:doubleimage就是这样做的:在我看来,您的第一个图像不是二进制的,更像是灰度。@user3459888您在第二个图像中看到的是通过范围转换突出显示的噪声。它也出现在您的原始图像中。使用阈值来摆脱它看我的编辑。1当然你是对的,它是灰度;我在脑子里把事情搞混了…我对Matlab比较陌生,所以发生了。。。2苍蝇的识别不是问题,而是噪音-我还想过滤掉苍蝇的小动作,因为研究的目标是运动。3我现在使用im2bw使用特定阈值将原始帧转换为二进制,使用conv2模糊该图像以获得白色云,然后再次使用im2bw以不同的阈值获得或多或少的圆形白色斑点。这比使用2xim2bw+imfilter快约30%,这是可以接受的。我将使用基于FFT的滤波器进行实验,看看这是否更快。非常感谢你的努力!