查找指定矩形中的数组中的点(matlab)

时间:2017-11-05 10:01:38

标签: matlab

我有一个由一些图像点组成的矩阵。请看下面的

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中编码? 感谢。

2 个答案:

答案 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') 

enter image description here