【发布时间】:2014-05-19 16:53:09
【问题描述】:
我已经使用 MATLAB 为此处提到的一组单词创建了边界框
Draw bounding boxes for entire word instead of each character in an image - MATLAB
现在,我想将每个边界框指定的区域的内容复制到另一个矩阵中以进行进一步计算。
给定边界框的坐标,我该怎么做?
编辑
在使用@beaker提到的方法时发现了一个问题
这是原始代码,其中binary是二进制格式的图像文件。
Ibox(:,cnt) 给了我绘制的每个矩形的坐标。
imshow(normal);
boxes = zeros(0,1);
Sp = 10.5;
binclosed = imclose(binary, strel('rectangle',[4 ceil(Sp/2)]));
[Ilabel,num] = bwlabel(binclosed);
Iprops = regionprops(Ilabel, 'BoundingBox');
Ibox = reshape([Iprops.BoundingBox],[4 num]);
for cnt=1:num
rectangle('position',Ibox(:,cnt),'edgecolor','r');
X = (Ibox(:,cnt))';
X1 = X(1);
Y1 = X(2);
W = X(3);
H = X(4);
X2 = X1 + W;
Y2 = Y1 - H;
coords = [X1,Y1,X2,Y2];
boxes = [boxes;coords];
end
现在boxes 正在存储每个区域的坐标。
为了提取区域,我在做
for c=1:num
subimage = binary(boxes(c,1:2),boxes(c,3:4));
imshow(subimage);
end
这给了我原始图像的随机剪辑。
当我检查boxes 中的坐标值时,我发现它们是浮动的。
如果我的图像是二进制格式,会发生什么情况?
【问题讨论】:
-
@beaker 我就是这么做的。我正在使用我用来绘制矩形的坐标来获取每个区域的起点和终点。现在,当我使用这些点将每个区域的数据复制到另一个矩阵中时,我发现这些坐标是浮动的。如果我的图像是二进制形式,这怎么可能?
-
您最初的问题并没有说明从二进制更改为浮点是问题所在。如果您没有向我们提供足够的信息来了解实际问题是什么,我们应该如何知道如何回答您的问题?请发布一个 minimal 代码示例来演示您的问题,以及输入和输出矩阵的至少维度和类型,包括实际的和期望的。
-
@beaker 这不是最初的问题。这是一个被发现的问题。我尝试了您的初始解决方案,它有效,但不如预期。我将上传必要的信息并更新我的查询。
-
边界框的坐标不是整数,因为包围矩形的边界位于两个像素之间。
标签: matlab