If I start with a matrix of zeros, how can I easily create a circle of ones in that matrix?

40 vues (au cours des 30 derniers jours)
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!

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 27 Juin 2017
Modifié(e) : Andrei Bobrov le 27 Juin 2017
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)

Plus de réponses (1)

Shane L
Shane L le 27 Juin 2017
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"

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by