在matlab中生成碎片轮廓周围的边界框

在matlab中生成碎片轮廓周围的边界框,matlab,image-processing,computer-vision,bounding-box,Matlab,Image Processing,Computer Vision,Bounding Box,你好,我是matlab的工作人员。我试图在轮廓周围生成一个边界框。这里的问题是轮廓是零碎的 如图所示 我试过的代码是 BW=bwconncomp(image); STATS = regionprops(BW, 'FilledArea','BoundingBox'); 这给了我一个包围剪影一部分的边界框。我不能使用explate,这是本例中首选的形态学操作,因为它将剪影与相邻片段连接起来 提前感谢您的帮助。因为您有一个包含像素标记的向量数组(bwconncomp()返回一个包含名为PixelI

你好,我是matlab的工作人员。我试图在轮廓周围生成一个边界框。这里的问题是轮廓是零碎的 如图所示

我试过的代码是

BW=bwconncomp(image);
STATS = regionprops(BW, 'FilledArea','BoundingBox');
这给了我一个包围剪影一部分的边界框。我不能使用
explate
,这是本例中首选的形态学操作,因为它将剪影与相邻片段连接起来


提前感谢您的帮助。

因为您有一个包含像素标记的向量数组(bwconncomp()返回一个包含名为PixelIdxList的成员的结构),所以您可以通过查找最小x、最小y、最大x、最大y的像素来创建矩形


这里有一个很好的例子:

这里有一些东西可以让你使用你发布的图像。我使用了一个带角度的线条结构元素来放大图像,并放大了剪影左侧白色小块的信号。然后使用
regionprops
更容易单独识别对象,并选择面积最大的对象(即轮廓),使用属性
FilledArea
计算,并在原始图像上报告边界框。这可能并不完美,但这是一个开始,似乎给出了一个相当不错的结果

代码如下:

clear
clc
close all

BW = im2bw(imread('Silhouette.png'));
BW = imclearborder(BW);

%// Dilate with a line structuring element oriented at about 60 degrees to
%// amplify the elements at an angle that you don't want.
se = strel('line',5,60);        
dilateddBW = imdilate(BW,se);

figure;
imshow(dilateddBW)
放大后的图像如下所示:

调用
regionprops
并显示输出:

%// Get the region properties and select that with the largest area.
S = regionprops(dilateddBW,'BoundingBox','FilledArea','PixelIdxList');

boundingboxes = cat(1, S.BoundingBox);
FilledAreas = cat(1,S.FilledArea);

[~,MaxAreaIndex] = max(FilledAreas);

%// Get linear indices of the corresponding silhouette to display along
%// with its bounding box.
MaxIndices = S(MaxAreaIndex).PixelIdxList;

%// Create empty image to put the silhouette + box
NewIm = false(size(dilateddBW));

NewIm(MaxIndices) = 1;

figure;

imshow(BW)
rectangle('Position',boundingboxes(MaxAreaIndex,:),'EdgeColor','r')
输出:


希望这能有所帮助

这是原图吗?还是在生产线下走几步?因为可能有一种更好的分割方法,wpuld可以让这更容易。至少你可以圈出二元面具的哪一部分是“轮廓”,因为它不是很明显。右边的区域是人。经过一点处理后得到了轮廓。最初的剪影是一个完整的斑点,连接着所有的碎片。你能在不经过处理的情况下发布原始图像吗?@user2307268那么你试过下面的建议了吗?我没有投反对票,但这几乎不是一个答案;你能详细说明一下,或者提供一些对OP有用的代码吗?@sithereal,看来你对图像处理很感兴趣——你能帮我们打开这个专门的小组吗:只需对不到10票的问题进行投票。谢谢。看来你对图像处理很感兴趣——你能帮我们打开这个专门的小组吗:只需对不到10票的问题进行投票。谢谢