2つの配列間における数値演算アルゴリズムについて

5 views (last 30 days)
RK
RK on 26 Oct 2022
Commented: RK on 28 Oct 2022
下記の2つの2次元配列における、畳み込み積分処理において、数値の重なり合う領域の平均値を算出する手法を考えており、有効な処理手法があれば教えていただきたいです。 N=64; x = -1:1/(N/2-1):1; [X,Y] = meshgrid(x,x); [theta,p] = cart2pol(X,Y); idx = p<=1; %入力1 fil=double(idx); fil(fil==0)=NaN; %入力2 F=-1*p.^2; F=idx.*F; F(F==0)=NaN;
  2 Comments
Atsushi Ueno
Atsushi Ueno on 26 Oct 2022
質問したい事が伝わってこないです。
既に円形のマスクパターン fil (=p<=1) と、F (=-p.^2)が作成され、不要箇所はNaNにしていますね。
単にfilやFの平均値を計算すれば良いのでは?
x = -1:1/(64/2-1):1;
[X,Y] = meshgrid(x,x);
[theta,p] = cart2pol(X,Y);
idx = p<=1;
%入力1
fil=double(idx);
fil(fil==0)=NaN;
mean(fil,'all','omitnan')
ans = 1
%入力2
F=-1*p.^2;
F=idx.*F;
F(F==0)=NaN;
mean(F,'all','omitnan')
ans = -0.4972
RK
RK on 26 Oct 2022
分かりづらく申し訳ございません。 マスクパターンを平行移動しながら重なりあう領域の平均値を演算したいと思っております。

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 26 Oct 2022
conv2関数の出力は2次元方向に畳み込んだ結果を全部出力しているので、63*63同士の行列を1次元方向にのみ畳み込みするという事は、下記の結果の中央をスライスした結果になりますね。それを円形のマスクの画素数で割れば平均値のグラフになるでしょう。
x = -1:1/(64/2-1):1;
[X,Y] = meshgrid(x,x);
[theta,p] = cart2pol(X,Y);
idx = p<=1;
%入力1
fil=double(idx);
%fil(fil==0)=NaN;
%入力2
F=-1*p.^2;
F=idx.*F;
%F(F==0)=NaN;
cnv = conv2(F,fil,'full');
surf(cnv)
plot(cnv(floor(size(cnv,1)/2),:)./sum(fil,'all'));
  1 Comment
RK
RK on 28 Oct 2022
ご回答頂きありがとうございます。 参考になりました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!