summation of a matrix inside circle

1 visualización (últimos 30 días)
JK
JK el 10 de Nov. de 2021
Editada: DGM el 11 de Nov. de 2021
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 comentario
DGM
DGM el 10 de Nov. de 2021
Is N always odd? Is it always even? Could it be either?

Iniciar sesión para comentar.

Respuesta aceptada

DGM
DGM el 10 de Nov. de 2021
Editada: DGM el 11 de Nov. de 2021
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 comentarios
JK
JK el 11 de Nov. de 2021
any thought on even case?
DGM
DGM el 11 de Nov. de 2021
Editada: DGM el 11 de Nov. de 2021
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.

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by