从imfill

时间:2015-08-21 14:45:35

标签: matlab image-processing image-segmentation

我正在使用热敏相机在无人机拍摄的灰度图像的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),但这不起作用(因为我想要它。)

作为测试,您可以使用附图。此外,如果你正在尝试解决顶部的最终问题,那么我没有问题让房子,汽车和行人出门 - 房子和汽车我可以完美地理清它们是否整齐。{{3 }}

1 个答案:

答案 0 :(得分:1)

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

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