1

我正在处理在单色背景下包含单个对象的 RGB 图像。

我的目标是隔离图像中的对象并调整图像大小以仅包含对象。

通过使用适当的阈值将图像转换为二进制图像,我已经成功地检测到对象。然后,为了隔离原始 RGB 图像中的对象,我使用二进制图像作为原始 RGB 图像的掩码。

maskedImage = bsxfun(@times,originalimage, cast(binaryimage,class(originalimage)));

这给我留下了一张只包含被黑色背景包围的物体的图像。这是因为我使用的二进制图像蒙版包含白色像素中的对象和黑色像素中的背景,并且由于强度值为 0,因此蒙版过程将所有不属于对象的像素转换为黑色像素。我在下面附上了一个例子。

两个木偶

我现在想在对象周围绘制一个边界框并将图像的大小调整为边界框的大小,这样我就可以尽可能多地摆脱周围的黑色像素。有没有办法做到这一点?任何帮助,将不胜感激。

4

2 回答 2

1

给定分割后的图像,您希望裁剪掉所有黑色像素并提供最接近的边界框来完全封装对象。这很简单。

您已经有了一个二进制掩码,可以确定什么是对象,什么是背景。您只需要找到最小跨越边界框。您可以通过获取掩码中所有非零像素位置,并找到最小和最大行和列坐标来找到左上角和右下角。然后,您只需使用这些来裁剪分割的图像。

像这样:

%// Find all non-zero locations in the mask
[row,col] = find(binaryImage);

%// Find the top left corner of the mask
topLeftRow = min(row);
topLeftCol = min(col);

%// Find the bottom right corner of the mask
bottomRightRow = max(row);
bottomRightCol = max(col);

%// Extract the object
extracted = maskedImage(topLeftRow:bottomRightRow, topLeftCol:bottomRightCol, :);
于 2015-10-07T15:50:48.060 回答
1

当天的话是边界框

如果您希望最小面积矩形仅裁剪非零值,您需要区域的边界框,然后将移相器设置为 stun,一切就绪!

有关 Matlab 中的更多实现细节,请参阅此Matlab 帮助论坛问题

于 2015-10-07T15:50:49.883 回答