5

この質問は「C++ の数値レシピ」本に関連しているため、多次元最適化と同様にそれについて少し知っている人に予約されます。

多次元ルートを検索する必要があるプログラムを書いています。それを解決するために、多次元ニュートン ルート検索法、つまり「newt」手順を使用しています。

詳細に興味のある方のために、いくつかの特徴点 (2 つのカメラで見られる特徴点) に基づいて、オブジェクトの立体視ビューに変形可能な 3D モデルを適合させようとしています。

このために、次のように newt プロシージャを使用しています。

  • 11 個の入力パラメーター:私の変形可能モデルは、11 個のパラメーター (5 つの幾何学的パラメーターと 3D オブジェクトの位置に対する 6 つの自由度で構成) でモデル化できます。
  • ルートを見つける必要がある14 の出力パラメーター: カメラによって識別された特徴点に基づいて、「入力パラメーター」のセットが与えられると、カメラで見た特徴点とその特徴点の間の距離のセットを計算できます。理論上の位置。これらのポイントが 7 つあるため、14 個のパラメーターが得られます (両方のカメラで距離を計算するため、距離 7 かける 2)。

私の問題は、入力パラメーター (11) よりも多くの出力パラメーター (14) があることです。「newt」を呼び出すたびに、アルゴリズムは常に収束しますが、最初の 11 個の出力パラメーターをほぼ完全に最小化するソリューションが見つかりますが、残りの 3 つのパラメーターに多くのエラーがあります。

ただし、エラーを出力パラメーター間で均一に分割したいと考えています。

私はすでに以下に説明するアプローチを試しました:

  1. 14 個の出力パラメーターを 11 個のパラメーターに結合してみてください (たとえば、両方の距離を使用する代わりに、いくつかの距離の平均をとります)。しかし、私はこのアプローチに 100% 満足しているわけではありません
  2. 次の原則に従って、いくつかのソリューションを組み合わせます。
    • mnewt を呼び出し、見つかったルートを記憶する
    • 14 個の出力パラメータの順序を変更します
    • mnewt を再度呼び出して、見つかったルートを記憶する
    • 解を計算すると、見つかった 2 つの根の平均になります

ルート検索アルゴリズムが、最初のパラメーターを優先するのではなく、出力パラメーター間で均一に分割されるエラーを優先する、より一般的なアプローチを知っている人はいますか?

4

1 に答える 1

2

がm 次元のベクトルであり、これを n 次元のベクトルにマッピングするF(x)ことによって、最小化を試みます。あなたの最適化問題は、(あなたの場合は 11 < 14) の場合、過小決定されます。f(x)=0xfm < n

このようなシステムの一般的な解決方法は、 のベクトルノルムを最小化することですx。これを行うには、 とラグランジュ乗数x^T A x + c f(x)^T f(x)の両方に関して系を最小化します。さらに情報がなければ、 A を nxn単位行列と見なすことができます。これにより、最小のノルムを持ちながら解決するが見つかります。x cxf(x)=0

ニュートン法でこれを行う方法の詳細については、たとえば、この論文を参照してください。

于 2012-04-24T11:02:29.030 に答える