summation of a matrix inside circle
2 views (last 30 days)
Show older comments
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 Comment
Accepted Answer
DGM
on 10 Nov 2021
Edited: DGM
on 11 Nov 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 Comments
DGM
on 11 Nov 2021
Edited: DGM
on 11 Nov 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.
More Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!