If I start with a matrix of zeros, how can I easily create a circle of ones in that matrix?
24 次查看(过去 30 天)
显示 更早的评论
I have a matrix of zeros, but would like a circle of ones in that matrix. Preferably I would like the circle to fill half the area of the matrix, but this is not a necessity.
Thanks in advance!
采纳的回答
Andrei Bobrov
2017-6-27
编辑:Andrei Bobrov
2017-6-27
Use function bwdist from Image Processing Toolbox:
N = 1001;
R = 400;
M = zeros(N);
ii = ceil(N/2);
M(ii,ii) = 1;
out = bwdist(M) <= R;
imagesc(out)
or without Image Processing Toolbox:
N = 1001;
R = floor(sqrt(N.^2/pi/2)); %"... circle to fill half the area of the matrix..."
ii = abs(floor((1:N) - N/2));
out = hypot(ii',ii) <= R; % MATLAB R2016b and later
out = bsxfun(@hypot,ii',ii) <= R; % MATLAB R2016a and earlier
imagesc(out)
更多回答(1 个)
Shane L
2017-6-27
One way to do it (not necessarily the most efficient, but easy to understand):
Z = zeros(99); % create square matrix of zeroes
origin = [round((size(Z,2)-1)/2+1) round((size(Z,1)-1)/2+1)]; % "center" of the matrix
radius = round(sqrt(numel(Z)/(2*pi))); % radius for a circle that fills half the area of the matrix
[xx,yy] = meshgrid((1:size(Z,2))-origin(1),(1:size(Z,1))-origin(2)); % create x and y grid
Z(sqrt(xx.^2 + yy.^2) <= radius) = 1; % set points inside the radius equal to one
imshow(Z); % show the "image"
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!