【问题标题】:Generating a bounding box around a fragmented silhouette in matlab在matlab中围绕碎片轮廓生成边界框
【发布时间】:2015-04-27 12:02:33
【问题描述】:

您好,我正在使用 matlab。我正在尝试在轮廓周围生成一个边界框。这里的问题是剪影是支离破碎的 如图所示

我试过的代码是

BW=bwconncomp(image);
STATS = regionprops(BW, 'FilledArea','BoundingBox');

这给了我一个围绕剪影一部分的边界框。我不能使用dilate,这是在这种情况下首选的形态学操作,因为它将轮廓与相邻片段连接起来。

提前感谢您的帮助。

【问题讨论】:

  • 这是原图吗?还是沿着加工线走几步?因为可能有更好的方法来进行分割,从而使这变得更容易。至少你可以圈出二进制掩码的哪一部分是“剪影”,因为它不是立即可见的。
  • 右边区域是人。轮廓经过一点处理后获得。最初的轮廓是一个连接所有碎片的完整斑点。
  • 可以发原图不做处理吗?
  • @user2307268 那么您尝试以下建议了吗?

标签: matlab image-processing computer-vision bounding-box


【解决方案1】:

这里有一些东西可以让您使用您发布的图片。我使用了一个带有角度的线条结构元素来扩大图像并放大来自剪影左侧的白色小块的信号。然后使用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')

输出:

希望能有所帮助!

【讨论】:

【解决方案2】:

由于您有一个包含像素索引的向量数组(bwconncomp() 返回一个具有名为 PixelIdxList 的成员的结构),您可以通过查找具有 min x、min y、max x、max y 的像素来创建一个矩形。

这是一个很好的例子:2D Minimal Bounding Box

【讨论】:

  • 我没有投反对票,但这几乎不是答案;您能否详细说明或提供一些可能对 OP 有用的代码?
  • @sithereal,您似乎对图像处理感兴趣-您能否帮助我们打开这个专门的小组:area51.stackexchange.com/proposals/66531/computer-vision/72084 只需对不到 10 票赞成的问题进行投票。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2016-11-20
  • 2020-06-17
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多