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

在指定矩形中的数组中查找点(matlab),matlab,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,宽度,高度]下方的矩形中找到点 rec=[105,210,31,31] 我应该如何在Matlab中编写它? 谢谢。这是您需要的(我想): Cout=[235,65;296,71;296,84;240120;229119;224,74;1

我有一个矩阵,它由一些图像点组成

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,宽度,高度]下方的矩形中找到点

rec=[105,210,31,31]
我应该如何在Matlab中编写它? 谢谢。

这是您需要的(我想):

Cout=[235,65;296,71;296,84;240120;229119;224,74;165126];
Rec=[105210,31,31];
%设置矩形在x和y方向的范围
xr=[Rec(2)(Rec(2)+Rec(4));
yr=[Rec(1)(Rec(1)+Rec(3))];
%绘制矩形以供参考
矩形('位置',Rec);等等
%下一行是您要求的,检查点是否落在
%我在这里选择的矩形限制为<和>,但您可能需要=。。。
id=Cout(:,1)xr(1)和Cout(:,2)yr(1);
%让我们检查一下:
图(Cout(:,2),Cout(:,1),'x',Cout(id,2),Cout(id,1),'ro')
使用多边形[

工作原理:

in=inpolygon(xq,yq,xv,yv)返回in,指示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个点。

似乎所有的
点都不在矩形中;Rec编码的目的是什么?[x y w h]?是的,我想我应该使用inpolygon。但我不知道为什么它不适用于此example@m.kavi-关于您尝试使用
inpolygon
-寻求调试帮助的问题(“为什么这个代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。请注意,对于将来的读者,这是有效的,因为矩形与x轴水平。如果矩形旋转(由4个点而不是x,y,宽度,高度给出)那么多边形中的
将是一个更好的解决方案。在这个问题中,点
Cout
被定义为
(x,y)
,矩形
Rect
被定义为
[x,y,宽度,高度]
,因此它应该是
xr=[Rec(1)(Rec(1)+Rec(3));yr=[Rec(2)(Rec(2)+(4))]
绘图(Cout(:,1),Cout(:,2),'x',Cout(id,1),Cout(id,2),'ro')
这是一个很好的方法,但为了让它成为一个好的答案,你应该更好地描述代码中发生了什么。例如,
roi
,inpolygon
做了什么,也许是一个供进一步阅读的文档链接……在这个问题中,点可以定义为(x,y),因此它应该是
xq=Cout(:,1);yq=Cout(:,2)
你说得对。我应该解释一下我为什么这么做
% 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)