小编Jan*_*naJ的帖子

使用2d/3dsplines从嘈杂的数据点集中查找曲率?(C++)

我试图沿其轮廓提取脉冲的曲率(见下图).脉冲在长度和高度的网格上计算:使用有限差分在C++中实现的150 x 100个单元格.

具有不同曲率的脉冲轮廓

我提取了所有具有相同值(轮廓/水平集)的点,并将它们标记为下图中的红色实线.其他颜色可以忽略不计.

红线=具有相同值的点的数据集

然后我试图通过以下方法从这已经很嘈杂(由于网格离散化)轮廓线找到曲率:

(移动平均线已经应用)

1)通过切线的曲率
两点P和N的曲率逼近

点P处的线的曲率由下式定义:

2点的切线=一点处的曲率

因此,曲率是P和N之间的角度增量的角度δ的石灰.由于我的点之间有一定的距离,我无法对石灰进行足够的近似,因此曲率计算不正确.我用圆圈测试它,它自然具有恒定的曲率.但我无法重现这一点(只有1位有效数字是正确的).

2)由arclength参数化的线的二阶导数

我计算了关于arclength的线的一阶导数,用移动平均线平滑,然后再次得到导数(二阶导数).但在这里我也只有1个有效数字正确.不幸的是,采用导数将已经固有的噪声倍增到更高的水平.

3)用圆圈局部近似线

由于圆半径的倒数是曲率,我使用以下方法:

用圆圈近似曲率

到目前为止这是最好的(2位正确的有效数字),但我需要进一步改进.所以我的新想法如下:

我不想使用离散点处的值来确定曲率,而是想用三维样条曲面近似脉冲轮廓.然后我从中提取某个值的水平集,以获得平滑的点线,我可以从中找到一个很好的曲率.

到目前为止,我找不到可以生成这样的Bezier样条曲面的C++库.你能指点我吗?

您是否认为这种方法值得一试,或者我的曲率会失去太多精确度?

你知道其他任何方法吗?

非常友好的问候,Jan

编辑:似乎我不能以新用户的身份发布图片,所以我从我的问题中删除了所有这些图片,即使我觉得它们很重要,可以解释我的问题.有什么办法我还能给他们看吗?

edit2:好的,完成了:)

c++ algorithm bezier surface spline

22
推荐指数
1
解决办法
7383
查看次数

标签 统计

algorithm ×1

bezier ×1

c++ ×1

spline ×1

surface ×1