【发布时间】:2012-10-05 05:05:55
【问题描述】:
我有一个关于使用什么方法来平滑 3D (xyz) 网格的一般性问题。
我的程序有通过立体视觉方法获得的大型 3D 点矩阵。结果的形状总是有点像半球形,但由于我想消除立体视觉错误,它有一些粗糙。
问题是,怎么做?现在我已经开发了一半的舒缓方法,但我认为可能有更好的方法。
我的实际想法是使用 Hermite 方法。这个想法是:
取所有 XY 并在两个方向上平滑 ->XYnew 和 XnewY
将 Hermite 线转换为 Bezier 线,并找到 XYnew 和 XnewY 之间的交叉点,具有新点。 (重复所有点,通常为 2000)
使用具有 XYZnew 的 Hermite XYZ 平滑。
现在我已经在 C++ 中实现了 Hermite 表面平滑和 Hermite 线平滑,但中间部分并不像想象的那么容易。
无论如何,我的问题是,这是一种正确的方法还是有另一种可能更好的方法?
当然思路是消除立体视觉方法产生的误差,这不是计算机图形问题,更多的是数据处理问题
附录:
起初我认为使用 Z 平滑就足够了,但显然不是,还有很多 XY 误差。在下面的图像中,您可以看到 Z 拟合工作,但它仍然非常粗糙,如在 2 图像中可以看到的那样。 (颜色是变形的,应该是相当连续的)
【问题讨论】:
-
贝塞尔曲线是二维的,用它来平滑 3 维表面至少是无效的。此外,您的数据看起来并没有那么嘈杂,您是否尝试使用加权线性最小二乘法简单地应用移动平均或局部回归进行平滑?
-
我知道它没有很多噪音,但它不够好。颜色(根据正方形的变形计算)必须柔和,所有那些小的蓝色和红色随机孤点肯定是立体视觉错误。我没有尝试进行局部回归,但我认为在某些情况下单独处理线实际上可能会产生更多错误。我仍然需要阅读更多关于方法的信息,但@Franco 的选项似乎是一个不错的选择。
标签: math computer-vision bezier smoothing