C++ 边界框方向

C++ 边界框方向,c++,computer-vision,point-cloud-library,robotics,C++,Computer Vision,Point Cloud Library,Robotics,在分割和过滤过程中,我使用了一个边界框,在RANSAC和条件离群点移除之后,获得了对象周围的一对4点。在计算了边界框的8个角点之后,我使用了其中的2个来定位机器人。例如,下面是我打算使用的具有角点的提取对象的视觉效果 问题是如果物体像上面一样直线,机器人几乎在中间移动,但是如果物体倾斜,则机器人会向左右移动,这取决于它倾斜的方向,例如: 经过分析后,似乎边界框点并不精确,而是在对象上具有偏移。在这种情况下,什么会有帮助 -在角点上添加手动偏移 -调整分割阈值 -可以使用这些点的曲面法线或角度信息

在分割和过滤过程中,我使用了一个边界框,在RANSAC和条件离群点移除之后,获得了对象周围的一对4点。在计算了边界框的8个角点之后,我使用了其中的2个来定位机器人。例如,下面是我打算使用的具有角点的提取对象的视觉效果

问题是如果物体像上面一样直线,机器人几乎在中间移动,但是如果物体倾斜,则机器人会向左右移动,这取决于它倾斜的方向,例如:

经过分析后,似乎边界框点并不精确,而是在对象上具有偏移。在这种情况下,什么会有帮助

-在角点上添加手动偏移

-调整分割阈值

-可以使用这些点的曲面法线或角度信息


任何其他可能性

我假设当你倾斜物体时,物体角上离你更近的点比另一点提供更精确的信息。如果可以获取角度信息,找到曲面法线,然后计算初始得到的两点之间的向量或线与法线向量之间的角度。试着根据你得到的结果改变点,在你的偏移区域,法线和我们的向量彼此为90


例如,你知道法向量,你有两个点x1,y1,x2,y2。在这两点之间绘制一个向量,计算该向量与法线之间的角度。如果角度是85度。操纵x2,y2以获得90度。这就像你拿着一个向量,从它的起点开始,玩它的方向。因为我们假设我们的出发点是精确的。

我完全同意你的看法。如果我理解正确,1在两个角点之间寻找向量2在这两个角点上估计法线3如果角度在两个向量之间的夹角小于90°或大于90°4我们如何操纵x2,y2以获得90度?它变成了一架飞机。法向量和我们创建的向量。在此平面上,矢量只能顺时针或逆时针旋转。试着朝一个方向旋转,先把它旋转得这么小。如果方向正确,请计算角度,然后继续。但如果误差增大,则改变方向。例如,如果在xy平面上有一个向量。首先测试角度是否符合您的要求,如果不符合,则可以。但增加的数量很少。通过多个步骤进入要点。例如,把你的敏感代码放在+-0.05上。你能不能同时提到PCL或OpenCV教程中的任何示例代码。这与编程语言无关。假设你有一个函数,可以找到两个向量之间的角度。找到包含法向量和我们创建的向量的平面。假设我们有findAngleV1,V2,返回69度。然后改变x2,y2,然后再改变findAngleV1,V2,假设它变为70,继续以相同的方向旋转向量。它的基本while循环和if语句。如果前一个findAngle>当前findAngle继续增加或减少。当风角>89且风角<91时。但是你应该在同一个平面上旋转。这就是我现在能说的。