summation of a matrix inside circle

3 ビュー (過去 30 日間)
JK
JK 2021 年 11 月 10 日
編集済み: DGM 2021 年 11 月 11 日
Hello,
I have 2D NxN matrix array and I want to get summation of data inside circle from center.
The size of circle is varied from smallest i.e. one pixel at the center to largest i.e. N/2
I want to plot summation w.r.t. circle.
Thanks,
  1 件のコメント
DGM
DGM 2021 年 11 月 10 日
Is N always odd? Is it always even? Could it be either?

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

採用された回答

DGM
DGM 2021 年 11 月 10 日
編集済み: DGM 2021 年 11 月 11 日
This should work regardless of whether N is odd or even.
s = 100;
A = ones(s); % test array
% build distance map
rmax = s/2 - 0.5;
x = linspace(-rmax,rmax,s);
D = sqrt(x.^2 + x.'.^2);
r = 0:ceil(D(1,floor(s/2)));
circint = zeros(1,numel(r));
for rind = 1:numel(r)
circint(rind) = sum(A(D<=r(rind)));
end
plot(r,circint)
  2 件のコメント
JK
JK 2021 年 11 月 11 日
any thought on even case?
DGM
DGM 2021 年 11 月 11 日
編集済み: DGM 2021 年 11 月 11 日
I modified it. Bear in mind that there is no center pixel in an array with even geometry. The center four pixels are 1/sqrt(2) away from the center. Consequently, the first element of the output is zero.
Similarly, the pixels straddling the midpoints of the edges of a 10x10 array are not at a radius of 5px. They're at a radius of 4.5227px. As the radius vector in this example is integer-valued, you can either choose to stop short at 4px or go a bit too far (5px). I chose to go to 5px. If you want to stop short in the even case, you can remove the ceil() from the definition of r.

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by