我有一个由一些图像点组成的矩阵。请看下面的
Cout=
[215,59;165,126;215,72;236,65;258,60;296,71;296,84;246,77;240,120;228,120;225,74;176,58;178,72];
现在我想找到[x,y,width,height]
下面的矩形点rec=[105,210,31,31]
我应该如何在Matlab中编码? 感谢。
答案 0 :(得分:1)
使用inpolygon。[https://www.mathworks.com/help/matlab/ref/inpolygon.html]
如何运作
in = inpolygon(xq,yq,xv,yv)返回,指示xq和yq指定的查询点是在xv和yv定义的多边形区域的边缘内还是在边缘上。
xq:查询点的x坐标,指定为标量,矢量,矩阵或多维数组(xq的大小必须与yq的大小相匹配)。
yq:查询点的y坐标,指定为标量,矢量,矩阵或多维数组。
xv:多边形顶点的x坐标,指定为矢量(xv的大小必须与yv的大小相匹配)。
yv:多边形顶点的y坐标,指定为矢量。
in:多边形区域内或边缘上的点的指示符,作为逻辑数组返回。 in与xq和yq的大小相同。
% points of image you're searching
% (x,y) are not the coordinates of matrices in MATLAB! And images are
% matrices. The coordinates of matrices are (row, column) which is NOT (x,y) - it's (y,x).
yq=Cout(:,1)
xq=Cout(:,2)
xv=[rec(1);rec(1);rec(1)+rec(3);rec(1)+rec(3);rec(1)];
yv=[rec(2);rec(2)+rec(4);rec(2)+rec(4);rec(2);rec(2)];
in = inpolygon(xq,yq,xv,yv)
我通过这种方式找到了2分。
答案 1 :(得分:0)
这就是你所需要的(我认为):
Cout= [235,65;296,71;296,84;240,120;229,119;224,74;165,126];
Rec=[105,210,31,31];
% set the range of the rectangle in x and y
xr=[Rec(2) (Rec(2)+Rec(4))];
yr=[Rec(1) (Rec(1)+Rec(3))];
% draw the rectangle for ref
rectangle('Position',Rec); hold on
% the next line is what you asked for, checking if points fall in the
% rectangle I chose here limits with < and >, but you may want <= and >= ...
id = Cout(:,1)<xr(end) & Cout(:,1)>xr(1) & Cout(:,2)<yr(end) & Cout(:,2)>yr(1);
% let's check:
plot(Cout(:,2),Cout(:,1),'x',Cout(id,2),Cout(id,1),'ro')