필터 지우기
필터 지우기

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

조회 수: 9 (최근 30일)
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일
To force it to a rectangle, use imrect which has the same api as imfreehand.
  댓글 수: 3
Manoj Kumar
Manoj Kumar 2015년 1월 27일
Is there any way that after drawing the box, Can i rotate it ( I mean can I perform any orientation to the box)?
Sean de Wolski
Sean de Wolski 2015년 1월 27일
Not easily. You would have to build a second impoly and then manually transform its vertices.

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

추가 답변 (2개)

Chad Greene
Chad Greene 2014년 12월 22일
If you have the Image Processing Toolbox, http://www.mathworks.com/help/images/ref/imfreehand.html
  댓글 수: 2
Image Analyst
Image Analyst 2014년 12월 22일
imfreehand() is for an irregular shape (and he's already using that), not for a perfect box with straight sides.

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


Image Analyst
Image Analyst 2014년 12월 22일
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
Manoj Kumar
Manoj Kumar 2014년 12월 24일
Then how to get the coordinates of the two points that I use to make a rectange using imrect()?
Image Analyst
Image Analyst 2014년 12월 24일
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).

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

카테고리

Help CenterFile Exchange에서 Board games에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by