イメージを2Dガウス関数で曲面近似する方法

16 Ansichten (letzte 30 Tage)
Yuki Fujita
Yuki Fujita am 18 Okt. 2020
Kommentiert: Hiro Yoshino am 21 Okt. 2020
二次元のイメージを2Dガウス関数で近似する方法を知りたいです。
できれば、自分で定義した関数で近似を行いたいです。
以下のように2Dガウス関数を定義したとします。
F=@(a,x_data,y_data)(a(1)+a(2).*exp(-1./(2.*(1-a(7).^2)).*(((x_data-a(3))./a(4)).^2+((y_data-a(5))./a(6)).^2-2.*a(7).*(x_data-a(3)).*(y_data-a(5))./(a(4).*a(6)))))
(この式が合っているかどうかは、今は問題にしていません)
このようにx_data,y_dataを変数、aを係数と置き、25*25の配列zを2Dガウスフィットしたいです。
以下のようにフィッティングを試したところ、
w = lsqcurvefit(F,initial,[x_data,y_data],z)
「入力因数が不足しています」とエラーが出ました。
どのようにしたら解決できますか。

Akzeptierte Antwort

Hiro Yoshino
Hiro Yoshino am 20 Okt. 2020
思い当たる点:
  • F の引数 x_data, y_data --> [x_data, y_data] としては?
  • zはFと同じ次元数に揃えないとダメです
  2 Kommentare
Yuki Fujita
Yuki Fujita am 20 Okt. 2020
ご回答ありがとうございます。
zとFの次元を揃えるため、
x_data → x_data(:,:,1)
y_data → x_data(:,:,2)
として、
F=@(a,x_data)(a(1)+a(2).*exp(-1./(2.*(1-a(7).^2)).*(((x_data(:,:,1)-a(3))./a(4)).^2+((x_data(:,:,2)-a(5))./a(6)).^2-2.*a(7).*(x_data(:,:,1)-a(3)).*(x_data(:,:,2)-a(5))./(a(4).*a(6)))))
w = lsqcurvefit(F,initial,x_data,z)
としたら上手くいきました。
Hiro Yoshino
Hiro Yoshino am 21 Okt. 2020
上手く行ったようで良かったです。
ちなみにR2020bのライブエディターから、半GUIで最適化計算ができるようになりました。ライブタスクというのがあるのでお試しください。
かなり色々簡単になっています。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Curve Fitting Toolbox 入門 finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!