动态目标框定

动态目标框定

说明

在前文的运动目标分割基础上,此文将运动目标标定出来。主要是实现对人和车的认定。

实验思路

想要得到人,所以不需要在乎内部细节,而是要得到人的轮廓。那么,首先需要把人与车的轮廓尽可能呈现出来且各自连为一体,中间尽量没有孔洞。其次,找出人与车的区别。最后,根据两者区别框定人。

具体操作

获取轮廓得到带框定图像,先通过中值滤波消去部分噪点,再通过膨胀实现区域连通;
调用regionprops函数得到连通域边界的属性;
根据所得属性寻找人与车连通域的区别,发现主要在于人所占面积范围为1500-3500px,且其最小矩形长大于宽;
用以上区别来限制框定范围。

核心代码

for nn=41:500
    filename = sprintf('待框定/dkd%04d.jpg',nn); 
    I = imread(filename);
    BW = im2bw(I, graythresh(I));
    [L,num]=bwlabel(BW,8);
    STATS = regionprops(BW,'basic');      %获取轮廓信息,Area、Centroid、BoundingBox
    [B,L] = bwboundaries(BW,'noholes');  %寻找边缘  
    imshow(label2rgb(L, @jet, [.5 .5 .5]))
    hold on
    for k = 1:length(B)
        boundary = B{k};
        plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)  %框轮廓
        for i=1:num                          %限定人的轮廓的条件
         if((STATS(i).Area>1500)&&(STATS(i).Area<3500)&&STATS(i).BoundingBox(4)>STATS(i).BoundingBox(3))
                                               %矩形框定人
                rectangle('Position',STATS(i).BoundingBox,'Curvature',[0,0],'LineWidth',2,'EdgeColor','r');
                                               %text命令
                text(STATS(i).Centroid(1),STATS(i).Centroid(2),'people','Color','black');
            end
        end
                                               %保存
        saveas(1,['kd',sprintf('%04d',nn),'.jpg']);
    end
end

实验结果

动态目标框定

上一篇:用pyhton分析数据的抽样分布


下一篇:Linux系统监控——dstat 工具的使用