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

15 visualizaciones (últimos 30 días)
Yuki Fujita
Yuki Fujita el 18 de Oct. de 2020
Comentada: Hiro Yoshino el 21 de Oct. de 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)
「入力因数が不足しています」とエラーが出ました。
どのようにしたら解決できますか。

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Curve Fitting Toolbox 入門 en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!