Set value for elements within a polygon

5 views (last 30 days)
Anh Mai
Anh Mai on 7 Aug 2021
Commented: Anh Mai on 9 Aug 2021
Hi all,
I am new to Matlab and trying to solve a problem with polygon.
I want to create a random 2-D matrix, let's say 100 by 100 as a domain.
domain=ones(100);
Then by enter the x & y coordinates of the polygon, I would like to draw that polygon and set all the elements inside the polygon to a different value.
xv=[40;50;60;50;40];
yv=[60;50;60;70;60];
plot(xv,yv) %plot the polygon
in=inpolygoon(xq,yq,xv,xv);
domain(in)=2;
I am stuck right here, I dont know how to define xq and yq to complete the inpolygon syntax. Please help :(.
Thank you all.

Accepted Answer

Matt J
Matt J on 7 Aug 2021
Edited: Matt J on 7 Aug 2021
If you have the Image Processing Toolbox,
domain=ones(100);
xv=[40;50;60;50;40];
yv=[60;50;60;70;60];
in = roipoly(domain,xv,yv);
domain( in )=2;
imshow(domain); caxis([0,2])
  3 Comments
Anh Mai
Anh Mai on 9 Aug 2021
Yup, that's true. That's why I said it might look amateur :)). Thanks again for the solution.

Sign in to comment.

More Answers (1)

Sean de Wolski
Sean de Wolski on 7 Aug 2021
Something along this line will work too. Note, you may need to deal with x/y v. row/col indexing (swap meshgrid for ndgrid).
domain = ones(100);
[xx,yy] = meshgrid(1:100);
xv=[40;50;60;50;40];
yv=[60;50;60;70;60];
% plot(xv,yv) %plot the polygon
xvec = xx(:);
yvec = yy(:);
in=inpolygon(xx(:),yy(:),xv,yv);
domain(sub2ind([100 100],xvec(in),yvec(in)))=2;
imshow(domain); caxis([0,2])
  1 Comment
Matt J
Matt J on 8 Aug 2021
No need for sub2ind that I can see:
domain( inpolygon(xx(:),yy(:),xv,yv) )=2;

Sign in to comment.

Tags

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by