我有一个无组织的点云,我想比较理想的CAD几何和对象的轮廓测量。例如,我有一个理想对象的CAD数据,我有一个像这样的点云;
如何比较这两个数据?我从CAD文件中知道,CAD数据属于直线或半径(弧),但是如何导出圆弧的半径误差或直线的长度误差?
我尝试用knnsearch组织数据,但结果并不令人满意。所以,我试图从一点开始绘制一条线(让我们说点1),我想要去下一个最近的点(让我们说点2)。如果Point 2的最近邻居是Point 1,那么转到Point 2的第二个最近点。该算法对我来说似乎不错,但结果也不令人满意。连接线与另一条边缘相同。
我还认为,我可能应该将CAD数据转换为点云,我必须将每个测量点与CAD点云上的最近点进行比较。我知道哪些点属于线,哪些点属于弧,我可以计算线或弧的平均误差。但我认为,线或弧的终点将是麻烦。我认为这些点的比较结果会有很大的错误。
另一方面,CAD几何和测量不会凸出并且总是完全覆盖。可以测量一些非凸几何形状。例如,您可以看到倒V形的测量值,缺少一些点。这是最糟糕的情况;
如果在测量不够时几何估计存在一些误差,我可以接受。
CPU负载对我来说也是重要的标准。有10.000个点,我想用i7处理器在20毫秒内完成滤波和几何匹配。
这个目标有没有强有力的解决方案?
答案 0 :(得分:0)
好的,我正在回答我的问题。 Matlab具有computational geometry.
的内置函数 该模块的Boundary function部分解决了我的问题。我可以将它用于非凸几何。对于凸几何,我通过简单的点对点来计算几何的中心点。然后,我通过atan2函数对所有点进行排序。
但我无法弄清楚如何找到几何形状。一种方法是使用CAD数据并迭代CAD数据中描述的几何图形,以最小化点云之间的最小平方误差。另一种方法是直接从点创建弧和线。我不会哪种方式更快更强大。