# Converting a rectangle position on an image to image matrix index

13 views (last 30 days)
Itzik Ben Shabat on 31 Oct 2012
Hi, I have drawn an greyscale image from a matrix using imshow. I used Imrect to draw a rectangle on a region of the image. from Imrect i get the xmin, ymin hight and width of the rectangle. but what i really need is to know which pixels it contains e.g the image matrix indexes. how do i do this conversion? thanks

Matt J on 31 Oct 2012
Edited: Matt J on 31 Oct 2012
If H is the handle returned by IMRECT, then you can use its createMask method to get a logical index mask of the region,
##### 2 CommentsShowHide 1 older comment
Matt J on 31 Oct 2012
Edited: Matt J on 31 Oct 2012
Yes. You use the FIND function
I hope you realize, however, that this conversion is not necessary for indexing the image. You could just use logical indexing:

### More Answers (1)

Image Analyst on 31 Oct 2012
Here's a snippet from my code:
hBox = imrect;
roiPosition = wait(hBox);
roiPosition
% Erase all previous lines.
ClearLinesFromAxes(handles);
xCoords = [roiPosition(1), roiPosition(1)+roiPosition(3), roiPosition(1)+roiPosition(3), roiPosition(1), roiPosition(1)];
yCoords = [roiPosition(2), roiPosition(2), roiPosition(2)+roiPosition(4), roiPosition(2)+roiPosition(4), roiPosition(2)];
% Plot the mask as an outline over the image.
hold on;
plot(xCoords, yCoords, 'linewidth', 2);
Alternatively, if you want, you can use rbbox instead of imrect. Here's a snippet showing how to do that:
k = waitforbuttonpress;
point1 = get(gca,'CurrentPoint'); % button down detected
finalRect = rbbox; % return figure units
point2 = get(gca,'CurrentPoint'); % button up detected
point1 = point1(1,1:2); % extract x and y
point2 = point2(1,1:2);
p1 = min(point1,point2); % calculate locations
offset = abs(point1-point2); % and dimensions
xCoords = [p1(1) p1(1)+offset(1) p1(1)+offset(1) p1(1) p1(1)];
yCoords = [p1(2) p1(2) p1(2)+offset(2) p1(2)+offset(2) p1(2)];
x1 = round(xCoords(1));
x2 = round(xCoords(2));
y1 = round(yCoords(5));
y2 = round(yCoords(3));
hold on
axis manual
plot(xCoords, yCoords); % redraw in dataspace units
croppedImage = imgOriginal(y1:y2,x1:x2,:);
Image Analyst on 1 Nov 2012
Well since I always have loaded an image in first, before calling plot() to plot the box, I guess it's always in pixel mode for me.

### Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by