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

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

然后我试图通过以下方法从这已经很嘈杂(由于网格离散化)轮廓线找到曲率:
(移动平均线已经应用)
1)通过切线的曲率

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

因此,曲率是P和N之间的角度增量的角度δ的石灰.由于我的点之间有一定的距离,我无法对石灰进行足够的近似,因此曲率计算不正确.我用圆圈测试它,它自然具有恒定的曲率.但我无法重现这一点(只有1位有效数字是正确的).
2)由arclength参数化的线的二阶导数
我计算了关于arclength的线的一阶导数,用移动平均线平滑,然后再次得到导数(二阶导数).但在这里我也只有1个有效数字正确.不幸的是,采用导数将已经固有的噪声倍增到更高的水平.
3)用圆圈局部近似线
由于圆半径的倒数是曲率,我使用以下方法:

到目前为止这是最好的(2位正确的有效数字),但我需要进一步改进.所以我的新想法如下:
我不想使用离散点处的值来确定曲率,而是想用三维样条曲面近似脉冲轮廓.然后我从中提取某个值的水平集,以获得平滑的点线,我可以从中找到一个很好的曲率.
到目前为止,我找不到可以生成这样的Bezier样条曲面的C++库.你能指点我吗?
您是否认为这种方法值得一试,或者我的曲率会失去太多精确度?
你知道其他任何方法吗?
非常友好的问候,Jan
编辑:似乎我不能以新用户的身份发布图片,所以我从我的问题中删除了所有这些图片,即使我觉得它们很重要,可以解释我的问题.有什么办法我还能给他们看吗?
edit2:好的,完成了:)