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

조회 수: 17 (최근 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 CenterFile Exchange에서 Curve Fitting Toolbox 入門에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!