use*_*339 6 matlab image-processing bounding-box
我有一些粒子,我已经在一个更大的图像中识别出来,需要为每个粒子解析成更小的图像.我已经使用了regionprops的"BoundingBox"函数,但还没有成功.我现在如何使用BoundingBox制作图像的矩形子图像?我可以使用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);
Run Code Online (Sandbox Code Playgroud)
Amr*_*mro 13
根据REGIONPROPS的文档:
BoundingBox是[ul_corner width],在哪里:
ul_corner:在表单中
[x y z ...],指定边界框的左上角width:在表单中,
[x_width y_width ...]并指定沿每个维度的边界框的宽度
现在您可以使用IMCROP函数作为imcrop(I, rect):
rect是一个四元素位置向量
[xmin ymin width height],用于指定裁剪矩形的大小和位置.
从而:
s = regionprops(L, 'BoundingBox');
subImage = imcrop(I, s(1).BoundingBox);
imshow(subImage)
Run Code Online (Sandbox Code Playgroud)
通过regionprops返回的参数[y,x,width,height]在矩阵坐标(另见"意外Matlab的".
因此,要提取矩形,您可以写:
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)));
Run Code Online (Sandbox Code Playgroud)