PCL:过滤点云给定 2 线方程
Posted
技术标签:
【中文标题】PCL:过滤点云给定 2 线方程【英文标题】:PCL: Filtering Point Cloud given 2 line equations 【发布时间】:2021-05-11 08:19:55 【问题描述】:给定 y = mx + c 形式的两条线方程,必须过滤掉不在两条线之间的所有点。
目前我正在使用直通过滤器,它可以大致过滤掉这些点。相反,这可以使用两个线方程更精确地完成吗?
【问题讨论】:
【参考方案1】:假设您有一条线由y = mx + c1
定义,另一条线由y = mx + c2
定义。如您所见,我假设两行的m
系数相同,否则短语p>
所有不在在两行之间的点都必须被过滤掉
会毫无意义。
现在,对行进行排序,使c2 <= c1
,即
if (c1 < c2) std:;swap(c1, c2);
现在您确定c1
行等于或高于c2
行。
采取任何一点(xx
,yy
)。将xx
代入第一行的方程,
y = m * xx + c1
。如果结果小于yy
,则 (xx
, yy
) 位于c1
行上方。您应该将其从云端移除。
对 c2 行执行相同操作:y = m * xx + c2
。如果结果大于 yy,则点 (xx
, yy
) 位于 c2
行下方,应从集合中删除。
换句话说,你应该只保留那些满足的点 (x, y)
m * x + c1 >= y and m * x + c2 <= y; // assuming c1 >= c2
例子:
假设您有 y = x + 3
和 y = x + 1
。假设你有一个点 (2,4)。你应该保留它还是过滤掉它?
我们有c1
= 3,c2
= 1。让我们在第一行插入 2。 y = 1*2 + c1 = 5. 5 >= 4. 第一次测试通过。
现在是第二行。 y = 1*2 + 1 = 3. 3
【讨论】:
以上是关于PCL:过滤点云给定 2 线方程的主要内容,如果未能解决你的问题,请参考以下文章