如何在Matlab中从regionprops(Image,';BoundingBox';)获取矩形子图像?

如何在Matlab中从regionprops(Image,';BoundingBox';)获取矩形子图像?,matlab,image-processing,bounding-box,Matlab,Image Processing,Bounding Box,我在一张较大的图像中识别了一些粒子,需要为每个粒子解析成较小的图像。我已经使用了regionprops的“BoundingBox”函数,但还没有成功。现在如何使用BoundingBox创建图像I的矩形子图像?我可以使用BoundingBox在原始图像上绘制一个矩形,但BoundingBox返回的参数似乎不是像素尺寸(x、y、宽度、高度),(x1、y1、x2、y2)等,我希望边界框会返回这些参数。我已经使用coins.png编写了一些示例代码,以便于任何人理解。你能帮我吗?谢谢 figure(1)

我在一张较大的图像中识别了一些粒子,需要为每个粒子解析成较小的图像。我已经使用了regionprops的“BoundingBox”函数,但还没有成功。现在如何使用BoundingBox创建图像I的矩形子图像?我可以使用BoundingBox在原始图像上绘制一个矩形,但BoundingBox返回的参数似乎不是像素尺寸(x、y、宽度、高度),(x1、y1、x2、y2)等,我希望边界框会返回这些参数。我已经使用coins.png编写了一些示例代码,以便于任何人理解。你能帮我吗?谢谢

figure(1);
I = imread('coins.png');
bw = im2bw(I, graythresh(I));
bw2 = imfill(bw,'holes');
imshow(bw2);


figure(2);
L = bwlabel(bw2);
imshow(label2rgb(L, @jet, [.7 .7 .7]))

figure(3);
imshow(I);
s = regionprops(L, 'BoundingBox');
rectangle('Position', s(1).BoundingBox);

regionprops返回的参数是矩阵坐标中的
[y,x,width,height]
(另请参见)

因此,要提取矩形,请编写:

subImage = I(round(s(1).BoundingBox(2):s(1).BoundingBox(2)+s(1).BoundingBox(4)),...
       round(s(1).BoundingBox(1):s(1).BoundingBox(1)+s(1).BoundingBox(3)));

根据以下文件:

边界框
[ul_角宽度]
,其中:

  • ul_corner:格式为
    [x y z…]
    ,指定边界框的左上角

  • width:格式为
    [x\u width y\u width…]
    ,并指定沿每个标注的边界框宽度

现在您可以使用函数作为
imcrop(I,rect)
其中:

rect是一个四元素位置向量
[xmin-ymin-width-height]
,用于指定裁剪矩形的大小和位置

因此:


是的,你可以循环使用
s.numbjects
,替代Jonas'
1
的迭代器。我不知道
imcrop
的这个用法,它比直接索引图像可读性强得多。FWIW,文档说
imcrop
与Jonas在他的答案中的做法相同。@reve\u etrange:理解dif很重要表示图像位置的不同方法:上述链接更改为:。图像处理工具箱还引入了新的空间参照类:
imref2d
imref3d
s = regionprops(L, 'BoundingBox');

subImage = imcrop(I, s(1).BoundingBox);
imshow(subImage)