我正在使用热敏相机在无人机拍摄的灰度图像的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 }}
答案 0 :(得分:1)
要获取imfill
为您更改的像素,请比较之前和之后的图像,并使用find
获取其值已更改的点的坐标。
diffimg = (BW2 ~= Bw3);
[y, x] = find(diffimg);