22

プロファイルに沿ってパルスの曲率を抽出しようとしています (下の図を参照)。パルスは、C++ で実装された有限差分を使用して、長さと高さのグリッド (150 x 100 セル) で計算されます。

曲率が変化するパルス プロファイル

同じ値 (輪郭/レベル セット) を持つすべてのポイントを抽出し、それらを下の図の赤い連続線としてマークしました。他の色は無視できます。

赤い線 = 同じ値を持つポイントのデータセット

次に、次の方法で、この既にノイズの多い (グリッドの離散化による) 等高線から曲率を見つけようとしました。

(移動平均適用済み)

1) 接線による曲率
2 点 P と N からの曲率近似

点 P での線の曲率は、次のように定義されます。

2 点の接線 = 1 点での曲率

したがって、曲率は、P と N の間の弧長にわたる角度デルタのライムです。ポイント間に一定の距離があるため、ライムを十分に近似できなかったため、曲率が正しく計算されませんでした。自然に一定の曲率を持つ円でテストしました。しかし、これを再現することはできませんでした (有効数字は 1 桁だけでした)。

2) 円弧長でパラメータ化された直線の 2 次導関数

円弧の長さに関する線の一次導関数を計算し、移動平均で平滑化してから、再び導関数を取得しました (2 次導関数)。しかし、ここでも有効数字が 1 桁しか正しくありませんでした。残念なことに、微分を取ると、すでに固有のノイズがより大きなレベルに乗算されます。

3) 線を局所的に円で近似する

円の半径の逆数が曲率であるため、次のアプローチを使用しました。

曲率を円で近似する

これはこれまでのところうまくいきました (有効数字が 2 桁) が、さらに改良する必要があります。したがって、私の新しいアイデアは次のとおりです。

離散点の値を使用して曲率を決定する代わりに、パルス プロファイルを 3 次元スプライン サーフェスで近似したいと考えています。次に、そこから特定の値のレベル セットを抽出して滑らかな点の線を取得し、そこから適切な曲率を見つけることができます。

これまでのところ、このようなベジェ スプライン サーフェスを生成できる C++ ライブラリは見つかりませんでした。何か教えていただけないでしょうか?

また、このアプローチは試してみる価値があると思いますか?それとも、曲率の精度が大幅に低下しますか?

他のアプローチを知っていますか?

ジャン、よろしくお願いします。

編集: 新しいユーザーとして写真を投稿することはできないようです。問題を説明するために重要であるにもかかわらず、質問からすべて削除しました。まだそれらを表示する方法はありますか?

edit2: OK、完了:)

4

1 に答える 1

1

さまざまな種類の補間をサポートするALGLIBがあります。

  • 多項式補間
  • 有理補間
  • スプライン補間
  • 最小二乗フィッティング(線形/非線形)
  • バイリニアおよびバイキュービックスプライン補間
  • 高速RBF補間/フィッティング

それがあなたのすべての要件を満たしているかどうかはわかりません。私は個人的にこのライブラリをまだ使用していませんが、3次スプライン補間があなたが探しているものである可能性があると思います(2倍微分可能)。

ノイズの多い入力ポイントへの過剰適合を防ぐために、ある種の平滑化メカニズムを適用する必要があります。たとえば、移動ウィンドウの平均/ガウス/FIRフィルターなどが適用できるかどうかを試すことができます。(キュービック)平滑化スプラインもご覧ください。

于 2012-11-05T11:59:25.890 に答える