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