creating an image using a matrix

lets say we have a 50x50 matrix. All of its values are zero. I wanted to create a way to add ones only to those places of the matrix that would create a sircle if i used imshow(). So i thought if yi,yj are the coordinates for each cell i maybe could use a function like (i-yi)^2+(j-yj)^2=r^2 to find each cell that i need. Does anyone has any ideas on that or maybe a better way?

 채택된 답변

Sven
Sven 2011년 12월 8일

2 개 추천

Raldi, try this:
% Define the image size and where you want the circle
rows = 50;
cols = 50;
radius = 20;
center = [25 25]; % In [X,Y] coordinates
% Make the circle
[xMat,yMat] = meshgrid(1:cols,1:rows);
distFromCenter = sqrt((xMat-center(1)).^2 + (yMat-center(2)).^2);
circleMat = distFromCenter<=radius;
figure, imshow(circleMat)
UPDATE to match your comments:
% To get just the border
B = circleMat & ~bwmorph(circleMat,'erode',1);
figure, imshow(B)

댓글 수: 4

Raldi
Raldi 2011년 12월 8일
Thanks guys....but i was thinking more...of choosing only the circle...and not the area outside. So i need to create only the outline. Thanks thow...ill see if i can modify the code.
Sean de Wolski
Sean de Wolski 2011년 12월 8일
That shoudl be simple. Create the circle, and then create another circle with radius a pixel or two shorted
C(bigcirc&littlecirc) = false;
Raldi
Raldi 2011년 12월 8일
ok did it thanks Sven
Sven
Sven 2011년 12월 8일
Cool, hit "accept" if it's answered then :)

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Sean de Wolski
Sean de Wolski 2011년 12월 8일

1 개 추천

Or:
r = 11; %radius
cx = 25; %xcenter
cy = 25;
sz = 50; %mat size
C = bsxfun(@(x,y)hypot(x-cx,y-cy)<=r,(1:sz)',1:sz);
imshow(C)

댓글 수: 1

Raldi
Raldi 2011년 12월 8일
Thanks Sean, with a few modifications i did what i wanted.

댓글을 달려면 로그인하십시오.

Andrei Bobrov
Andrei Bobrov 2011년 12월 8일

1 개 추천

A = single(zeros(50));
A(ceil(m/2),ceil(n/2)) = 1
d = bwdist(A);
r = 20;
A(abs(d-r)<.5)=1;
imagesc(A)
Alex Taylor
Alex Taylor 2011년 12월 8일

1 개 추천

The createMask method of the ROI tools was designed for the case in which you want to generate a binary image that is one where a specific ROI tool lies over an image or axes.
For example:
imshow(zeros(50));
h = imellipse(gca,[5 5 40 40]);
mask = h.createMask();
imshow(mask)
You can interactively or programmatically (as done above) any of the ROI tools, and then call the createMask method. In the case above, imellipse expects the bounding rectangle of an ellipse as the position argument. Don't know if that helps, but I thought it might be relevant to this problem.

제품

태그

질문:

2011년 12월 8일

Community Treasure Hunt

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

Start Hunting!

Translated by