matlab省边界,图像中的matlab聚合边界框区域

我有一个图像I,以及矩阵A中的一组边界框位置,A = [x10 y10 x11 y11; x20 y20 x21 y21 ... xn0 yn0 xn1 yn1]。 这些框可以在下面的图像上可视化。

imshow(I);

numparts = floor(size(A, 2)/4);

for i = 1:numparts

x1 = A(1,1+(i-1)*4);

y1 = A(1,2+(i-1)*4);

x2 = A(1,3+(i-1)*4);

y2 = A(1,4+(i-1)*4);

line([x1 x1 x2 x2 x1]',[y1 y2 y2 y1 y1]','color',colorset{i},'linewidth',2);

end

如何汇总这些边界框区域,以便将这些框中的像素标记为1,否则标记为0? 我不希望包含A中所有边界框的包罗万象的边界框。我需要一个更精确的面积图来聚合A中的边界框。

f4a691bcc6d38e20cbc5f8230c9c9097.png

如果我对您的理解正确,则希望将每个边界框的内部都设置为1,而将其余元素都设置为0。我还要假设您的数组的结构使得每一行的第一行两个坐标是特定边界框的左上角,而后两个坐标是特定边界框的右下角。

您可以做的是创建一个二进制图像,并将每个填充的边界框绘制到该二进制图像中。然后,您将获得一个包含所有边界框以及整个内部设置为1的形状。这样,请执行以下操作:

%// Declare mask

mask = false(size(I,1), size(I,2));

%// Go through each bounding box pair of co-ordinates and draw a bounding box

%// inside the mask

%// Directly using your code... though you can do this more efficiently

numparts = floor(size(A, 2)/4);

for i = 1:numparts

x1 = floor(A(1,1+(i-1)*4));

y1 = floor(A(1,2+(i-1)*4));

x2 = floor(A(1,3+(i-1)*4));

y2 = floor(A(1,4+(i-1)*4));

%// Draw bounding box here

mask(y1:y2,x1:x2) = true;

end

%// Show the original image as well as the mask beside it

figure;

subplot(1,2,1);

imshow(I);

subplot(1,2,2);

imshow(final_mask);

final_mask现在应该包含您要查找的内容。我在这里假设的是x是水平的,而y是垂直的。如果不是这种情况,则只需在for循环的最终语句中交换第一维索引和第二维索引以适合您的目的。

请特别注意,我采用了每个(x,y)坐标的floor,因为我不确定您是否将这些位置作为浮点数或整数。为了能够使用我所做的事情,您必须确保坐标是整数才能能够索引到我要制作的蒙版中。

另外,此代码不提供任何错误检查。如果您的任何边界框超出了图像边界,则MATLAB会生成错误通知您这一事实。我将留给您做其他错误检查,以在蒙版中在图像边界之外绘制边界框。如果您对此不担心,则不必编写此步骤。

我还编写了代码以在一个窗口中显示原始图像及其旁边的聚合蒙版。

祝好运!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值