how to draw a free hand box on an image to select that region of interest?

hi,
I used this for free hand drawing in an irregular shape. But I need to draw a box to select a region.
% Get the input free hand image
figure, imshow(grayImage, []);
axis on;
title('Contour Region Required', 'FontSize', fontSize);
set(gcf, 'Position', get(0,'Screensize')); % Maximize figure.
message = sprintf('Left click and hold to begin drawing.\nRelease Mouse Button when Completed');
uiwait(msgbox(message));
hFH = imfreehand();
% Create a binary image ("mask") from the ROI object.
binaryImage = hFH.createMask();
xy = hFH.getPosition;
% Label the binary image and compute the centroid and center of mass.
labeledImage = bwlabel(binaryImage);
% Will keep only the part of the image that's inside the mask, zero outside mask.
blackMaskedImage = grayImage;
blackMaskedImage(~binaryImage) = 0;
Can you please suggest me free hand drawing a box.
Thanks...

 채택된 답변

Sean de Wolski
Sean de Wolski 2014년 12월 22일

0 개 추천

To force it to a rectangle, use imrect which has the same api as imfreehand.

댓글 수: 3

Is there any way that after drawing the box, Can i rotate it ( I mean can I perform any orientation to the box)?
Not easily. You would have to build a second impoly and then manually transform its vertices.

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

추가 답변 (2개)

Chad Greene
Chad Greene 2014년 12월 22일

1 개 추천

If you have the Image Processing Toolbox, http://www.mathworks.com/help/images/ref/imfreehand.html

댓글 수: 2

imfreehand() is for an irregular shape (and he's already using that), not for a perfect box with straight sides.

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

If you don't have the Image Processing Toolbox, you can use rbbox():
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
% Find the coordinates of the box.
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
plot(xCoords, yCoords, 'b-'); % redraw in dataspace units

댓글 수: 2

Then how to get the coordinates of the two points that I use to make a rectange using imrect()?
Did you overlook how I get x1,x2,y1,y2?
And you don't use imrect anymore - this is used in place of it. One advantage is that you just drag out a box and you're done. It doesn't let you adjust the size (of course you could put it in a loop where you redraw it) but you don't have the extra step of having to double-click inside the box (which is confusing to users - they won't know to do that unless you give them instructions in advance).

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

카테고리

도움말 센터File Exchange에서 Display Image에 대해 자세히 알아보기

태그

질문:

2014년 12월 22일

댓글:

2015년 1월 27일

Community Treasure Hunt

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

Start Hunting!

Translated by