Asked by 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

*No products are associated with this question.*

Answer by Matt J
on 31 Oct 2012

Edited by Matt J
on 31 Oct 2012

Accepted answer

If H is the handle returned by IMRECT, then you can use its createMask method to get a logical index mask of the region,

Indices=H.createMask;

Itzik Ben Shabat
on 31 Oct 2012

Answer by 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,:);

Show 2 older comments

Matt J
on 1 Nov 2012

*So I don't really understand what you were wondering about - I guess it never applies to me.*

I just meant that, for example, when you use get(gca,'CurrentPoint') to obtain coordinates of the box, the output will depend on whether the axes is in matrix mode (axis ij) or xy mode (axis xy). Since the task of the OP is to obtain the pixel coordinates inside the box, you have to make sure the former is true. Conversely, imrect.createMask seems to take care of that for you innately.

Image Analyst
on 1 Nov 2012

Opportunities for recent engineering grads.

## 0 Comments