summation of a matrix inside circle
10 次查看(过去 30 天)
显示 更早的评论
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,
采纳的回答
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 个评论
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 Exchange 中查找有关 Surface and Mesh Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!