调整图像大小以适应 MATLAB 中的孤立对象

Resizing an image to fit around an isolated object in MATLAB

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

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

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

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

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

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

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

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

因此:

%// 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, :);

今天的话是边界框 !

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

有关 Matlab 中的更多实现细节,请参阅此Matlab help forum question