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

17 views (last 30 days)
Yuki Fujita
Yuki Fujita on 18 Oct 2020
Commented: Hiro Yoshino on 21 Oct 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)
「入力因数が不足しています」とエラーが出ました。
どのようにしたら解決できますか。

Accepted Answer

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

Sign in to comment.

More Answers (0)

Categories

Find more on Curve Fitting Toolbox 入門 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!