0

3D 画像がありVます。vこの 3D 画像の各ピクセルについて、関数を最小化する必要があります

(Y1 - F1(x1, x2))^2 + (Y2 - F2(x1, x2))^2

Y1Y2は 2 つの観察結果です。F1F2は非線形関数であり、導出可能ですが、複雑な形式です。x1x22 つの未知数です。

またはmatlabを使用して、この問題をピクセルごとに解決する方法を知っています。しかし、それはとても遅かった。画像全体でこの問題を解決する方法を誰か教えてもらえますか? 前もって感謝します。lsqnonlinlsqcurvefit

4

2 に答える 2

2

まず、fminsearchを試してみるとよいと思います。この種の問題のために設計されています。

fminsearch では役に立たないが、それらがどのように動作するかについてある程度知っている場合は、手動の定量的アプローチを試すことができます (多くのポイントで計算して、うまく動作するかどうかを確認するだけです)。

関数がベクトル化された入力を処理できる場合、次のように実行できます。

vec1 = 0:0.1:10; %Assume you expect it somewhere between 0 and 10
vec2 = 0:0.1:10;
[x1, x2] = ndgrid(vec1, vec2); 
result = (Y1 - F1(x1, x2))^2 + (Y2 - F2(x1, x2))^2

これがうまくいかない場合は、これを行うことができます:

horzcount = 0;
for x1 = vec1
   horzcount = horzcount +1;
   vertcount = 0;
   for x2 = vec2
      vertcount = vertcount + 1;
      result(horzcount, vertcount) = (Y1 - F1(x1, x2))^2 + (Y2 - F2(x1, x2))^2;
   end
end

その後、結果 (surf領域またはplot行または列で使用) を見て、最適を含む領域を見つけて満足するかどうかを判断します。次に、十分な精度が得られるまで、vec1 と vec2 を適宜調整して、その領域を拡大します。

于 2013-09-18T12:59:42.810 に答える
1

@DennisJaheruddinの回答をフォローアップすると、シンプレックスを使用した目的関数の最小化よりもグリッド検索の方が計算コストが低く、関数を評価するF1,F2方が目的を計算するための算術を実行するよりもはるかにコストがかかる場合、小さな画像でも発生するポイントがあります関数 (F1, F2事前計算用)

最初に解の範囲と解の値に必要な精度を把握し、@DennisJaheruddin が提案するように、範囲にまたがるベクトルとして計算し、事前に計算vec1し て、vec2F1(x1, x2)F2(x1, x2)

次に、各ポイントを見つけます

Imin = min((Y1 - F1).^2 + (Y2 - F2).^2)

ベクトル化できるようです。ソリューションIminは元のグリッドにインデックスを付けるため、各ピクセルで X1min と X2min を把握できます。

于 2013-09-18T14:40:43.337 に答える