内部细化算法具有可达到的最高精度。
这种精度限制是由于与数据和变量内部处理相关的数值限制造成的。最大误差约为 1e-3(或 0.1%),但可以达到模型大小(直径)的 1e-7 倍,或 0.000 01%。请注意,这是在所有条件都完美的情况下所能达到的最大精度。
模型大小会影响(绝对)精度,因为坐标是以浮点数值存储的。这也是精度与模型大小相对的原因之一。例如,如果改变模型和场景的比例(例如,将所有模型和场景坐标乘以系数 1 000 000,绝对精度也会随系数 1 000 000 而改变)。相反,与模型直径相关的精度将保持不变。
以下特征会影响精度:
- 模型的形状:
- 有些模型的形状允许姿态有一定的自由度。例如,平面对象可以在场景平面上平移和旋转,而不会对得分造成太大影响。请注意,有时可以通过使用基于边缘支持的表面匹配来避免这种情况。这适用于所有自相似或对称形状: 圆柱体、球体、平面对象等。
- 对象实例的可见部分:
- 即使对象的形状是合适的,例如,在盒子的情况下,也有可能只看到对象的一小部分,例如,盒子一侧的一小部分。在这种情况下,就无法正确确定这一侧的平移和旋转。理想情况下,对象实例的几个正交面应该是可见的,这样在所有方向上的平移(和旋转)都是固定的。
- 位于模型上的场景点数量:
- 如果只有少数场景点代表一个对象实例,则无法达到很高的精度。
- 传感器产生的点噪声:
- 输入点越精确,姿态也就越精确。例如,飞行时间(time-of-flight,ToF)传感器可导致高达 1 厘米的噪声偏差,而激光三角(sheet-of-light)测量装置可能导致 0.1 毫米的噪声;因此,粗略地说,两者有两个数量级的差异。
- 对象在场景坐标中的位置:
- 实例距离场景原点越远,可能的精度就越低。例如,如果一个对象距离场景原点的距离是其直径的 1 000 倍,那么精度最多会下降 1 000 倍。这是因为坐标是以浮点数值存储的,会丢失一些重要位。建议将场景原点最多保持在模型直径的 10-100 倍左右。
- 细化采样距离:
- 模型在细化步骤中的采样距离也会影响最终精度。可以使用算子 create_surface_model 的通用参数 "pose_ref_rel_sampling_distance" 来设置。数值越小,精度越高,尤其是当模型包含高曲率或高频率的部分时。使用带有参数 "sampled_pose_refinement" 的算子 get_surface_model_param ,可以检查细化步骤中使用的模型所受的影响。采样点云应代表对象,包括其精细结构。在细化过程中,将不会使用该点云未表示的部分。