How to get matrix indices from roipoly

13 次查看(过去 30 天)
I have a matrix that I want to extract an ROI from. I am using roipoly to clip the region. The syntax below gives the coordinates of the polygon in the intrinsic coordinate system, I believe. How can I get the matrix indices for each vertex of the polygon?
tst = rand(100);
[xrefout,yrefout,BW,xi2,yi2] = roipoly(tst);
I select some square.
xi2 and yi2 are real valued. To get the pixel value, does one just round xi2 and yi2 to the nearest integer?

采纳的回答

Matt J
Matt J 2021-9-10
You must interchange the coordinates (i,j)=(yi2,xi2)
  5 个评论
Matt J
Matt J 2021-9-10
编辑:Matt J 2021-9-10
You can threshold the result if you need to, e.g.,
min(max(round(z),1),3)
The rounding is just an approximation step which we are considering here only because you seem to need a result that can be used to index into a matrix. There is no single sacred way to do it. You can choose whatever integer approximation works best for you.

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2021-9-10
Try using the mask roipoly() returns:
tst = imread('moon.tif'); % Get some matrix.
imshow(tst); % Display it.
% Ask user to use roipoly.
message = sprintf('Left click vertices.\nRight click last point.\nThen double click inside when you are all done.');
uiwait(helpdlg(message));
mask = roipoly(tst);
% Extract values inside the polygon they drew.
valuesInsideMask = tst(mask)
  4 个评论
Paul Safier
Paul Safier 2021-9-11
The clipped matrix is used as well, sure, but the vertex info is needed elsewhere and printed. It's the vertex info (in indicial format) that I was questioning.
Image Analyst
Image Analyst 2021-9-11
There is also a drawpolygon() function that you might like.

请先登录,再进行评论。

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by