If I start with a matrix of zeros, how can I easily create a circle of ones in that matrix?
24 ビュー (過去 30 日間)
古いコメントを表示
Daniel Gray
2017 年 6 月 27 日
コメント済み: Nicolas Schneider Montaña
2020 年 9 月 1 日
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!