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

15 ビュー (過去 30 日間)
Yuki Fujita
Yuki Fujita 2020 年 10 月 18 日
コメント済み: Hiro Yoshino 2020 年 10 月 21 日
二次元のイメージを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)
「入力因数が不足しています」とエラーが出ました。
どのようにしたら解決できますか。

採用された回答

Hiro Yoshino
Hiro Yoshino 2020 年 10 月 20 日
思い当たる点:
  • F の引数 x_data, y_data --> [x_data, y_data] としては?
  • zはFと同じ次元数に揃えないとダメです
  2 件のコメント
Yuki Fujita
Yuki Fujita 2020 年 10 月 20 日
ご回答ありがとうございます。
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 2020 年 10 月 21 日
上手く行ったようで良かったです。
ちなみにR2020bのライブエディターから、半GUIで最適化計算ができるようになりました。ライブタスクというのがあるのでお試しください。
かなり色々簡単になっています。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCurve Fitting Toolbox 入門 についてさらに検索

Community Treasure Hunt

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

Start Hunting!