【问题标题】:Matlab: How to find a point in a bounding boxMatlab:如何在边界框中找到一个点
【发布时间】:2013-10-25 04:50:03
【问题描述】:

我有一个点或位置数组,这些点或位置分散在一个大矩阵中,我在矩阵内有一个小边界框。我需要一种方法来检查数组中的点是否在边界框内。感谢您的建议。

BoundingBox = [BB1,BB2,BB3,BB4];
Array = [x1,y1;x2,y2;x3,y3;x4,y4;x5,y5;x6,y6];

我试过了

ismember([BB1,BB2,BB3,BB4],Array);

ismember(rectangle('Position',[BB1,BB2,BB3,BB4]),Array);

但没有任何效果

【问题讨论】:

  • 我希望得到一个 ismember 的答案,但我不知道如何配置边界框
  • 我不明白。问题说“有一个弹跳框”,配置问题在哪里?
  • ismember(rectangle('Position',[BB1,BB1,BB3,BB4]),Array) 或 ismember([BB1,BB1,BB3,BB4],Array) 只返回 0 的天气Array 中的点是否在边界框内
  • ismember 与您的问题无关,至少据我了解。 [BB1,BB1,BB3,BB4] 是什么?什么是数组?
  • ismember 是一种判断来自一个数组或矩阵的点是否是另一个矩阵数组的成员的方法。我认为它会起作用,但到目前为止没有成功

标签: matlab find bounding-box


【解决方案1】:

试试这个:

% Array         an Nx2 matrix containing the X,Y coordinates of the points with
%               respect to the big matrix
%
% BoundingBox   a vector of length 4 representing the bounding box as follows:
%               [minimumX, minimumY, sizeX, sizeY]


isInBox = @(M,B) (M(:,1)>B(1)).*(M(:,1)<B(1)+B(3)).*(M(:,2)>B(2)).*(M(:,2)<B(2)+B(4));
isInBox(Array,BoundingBox);

如果您将严格不等式更改为 &gt;=&lt;=,您还将接受边界框上的点。

【讨论】:

  • 这是个好主意,但我认为等式是错误的。我认为 B(1)+B(3) 和 B(2)+B(4) 应该分别替换为 B(3) 和 B(4)。
  • 相应地修正了方程式。如果我弄错了,请拒绝我的编辑!
  • @robguinness 谢谢,但原来的等式是正确的,只是记录很差。 OP 声明(在评论中)边界框的形式为(xmin,ymin,width,height)。您的更新假定坐标为 `(xmin,ymin,xmax,ymax)。我已经回滚了等式,但坚持使用您的代码 cmets。
  • 哦,现在说得通了!在批评您的答案之前,我应该通读那些 cmets !无论如何,我希望答案更有用,因为包含了对象的格式。
  • 对于其他人:我对这个答案只有一个赞成票,但在我看来,它比公认的答案要好得多。对于大多数用户来说,Inpolygon 是一个“黑匣子”,对于这个特定问题来说有点矫枉过正。
【解决方案2】:

你应该仔细阅读ismember()的文档:

作为集合数组成员的数组元素

所以,这个检查与集合操作有关。

相反,您应该使用inpolygon() 来检查点是否在多边形内。

【讨论】:

  • 这看起来像我需要的但是你如何输入多边形的坐标?
  • 谢谢,这太完美了!
猜你喜欢
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2014-04-14
  • 2015-12-09
相关资源
最近更新 更多