プロファイルに沿ってパルスの曲率を抽出しようとしています (下の図を参照)。パルスは、C++ で実装された有限差分を使用して、長さと高さのグリッド (150 x 100 セル) で計算されます。
同じ値 (輪郭/レベル セット) を持つすべてのポイントを抽出し、それらを下の図の赤い連続線としてマークしました。他の色は無視できます。
次に、次の方法で、この既にノイズの多い (グリッドの離散化による) 等高線から曲率を見つけようとしました。
(移動平均適用済み)
1) 接線による曲率
点 P での線の曲率は、次のように定義されます。
したがって、曲率は、P と N の間の弧長にわたる角度デルタのライムです。ポイント間に一定の距離があるため、ライムを十分に近似できなかったため、曲率が正しく計算されませんでした。自然に一定の曲率を持つ円でテストしました。しかし、これを再現することはできませんでした (有効数字は 1 桁だけでした)。
2) 円弧長でパラメータ化された直線の 2 次導関数
円弧の長さに関する線の一次導関数を計算し、移動平均で平滑化してから、再び導関数を取得しました (2 次導関数)。しかし、ここでも有効数字が 1 桁しか正しくありませんでした。残念なことに、微分を取ると、すでに固有のノイズがより大きなレベルに乗算されます。
3) 線を局所的に円で近似する
円の半径の逆数が曲率であるため、次のアプローチを使用しました。
これはこれまでのところうまくいきました (有効数字が 2 桁) が、さらに改良する必要があります。したがって、私の新しいアイデアは次のとおりです。
離散点の値を使用して曲率を決定する代わりに、パルス プロファイルを 3 次元スプライン サーフェスで近似したいと考えています。次に、そこから特定の値のレベル セットを抽出して滑らかな点の線を取得し、そこから適切な曲率を見つけることができます。
これまでのところ、このようなベジェ スプライン サーフェスを生成できる C++ ライブラリは見つかりませんでした。何か教えていただけないでしょうか?
また、このアプローチは試してみる価値があると思いますか?それとも、曲率の精度が大幅に低下しますか?
他のアプローチを知っていますか?
ジャン、よろしくお願いします。
編集: 新しいユーザーとして写真を投稿することはできないようです。問題を説明するために重要であるにもかかわらず、質問からすべて削除しました。まだそれらを表示する方法はありますか?
edit2: OK、完了:)