从 imfill 中删除背景或标记填充区域

remove background or mark filled areas from imfill

我正在 matlab 中对使用热敏相机从无人机拍摄的灰度图像进行一些图像分割。这个想法是你应该能够放入一个视频,然后它分析每一帧并给出一个新视频作为输出,现在每个人都被标记,聚类并给出帧中的总数。到目前为止,我正在做的去除背景的工作首先是 imtophat,然后是在此之上的一些阈值,我建立了一些分析来识别来自例如人群的人。栅栏、房屋等。然而,这个阈值是静态的,所以一旦室外温度发生变化或层发生变化,例如从草地到停机坪然后我要么得到照片中的很多东西,要么我移除一些人。所以我最终要寻找的是一种摆脱背景的方法。所以我剩下的就是房子、汽车、人等等。

这是最终目标,对此的解决方案将不胜感激。

我尝试做的是首先在第一张图片上使用以下代码(其中 pic1 是原始图片):

%Make it double
pic2 = double(pic1);
%Remove some noise
pic2 = wiener2(pic2);
%Make the pedestrians larger
pic2 = imdilate(pic2,strel('disk',5));
%In case of shadows take these to some minimum
pic3 = pic2.*(pic2>mean(mean(pic2))) + mean(mean(pic2))*(pic2<mean(mean(pic2)));

%Remove some of the background
pic4 = imtophat(pic3,strel('disk',10));

%Make the edges stand out.
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(gaussian, hy, 'replicate');
Ix = imfilter(gaussian, hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);

%Threshold the edges
BW = gradmag>100;

%Close the circles
BW2 = imclose(BW1,strel('disk',5))

现在我有了图片中物体边缘的二值图像。我想填写行人,这样我就可以初步猜测他们在哪里以及他们的样子。所以我申请了imfill。

[BW3] = imfill(BW2);

那我要的是matlab帮我变白的所有像素的坐标。我怎么得到它?我已经尝试使用 [BW3,locations] = infill(BW2),但这不起作用(如我所愿。)

作为测试,您可以使用所附图片。此外,如果您正在尝试解决顶部的最终问题,那么我可以毫不费力地将房屋、汽车和行人赶出去——如果房屋和汽车看起来完整,我可以很好地解决它们。

要获取imfill为您更改的像素,请比较前后图像并使用find获取值已更改的点的坐标。

diffimg = (BW2 ~= Bw3);
[y, x] = find(diffimg);