필터 지우기
필터 지우기

making a rectangle with one mouse click

조회 수: 2 (최근 30일)
N
N 2014년 4월 8일
댓글: Image Analyst 2014년 4월 9일
I work in matlab with a code that was already made by somebody else. In this code you can choose to form a rectangle area with the code ginput, so in my image I click one two spots to form a rectangle and then the code goes further:
if PickRegion==1
fprintf('Pick two corners to indicate the region for tracking \n')
figure(1);
[xreg yreg] = ginput(2); %2 points
if (length(xreg) < 2)
return%break
end
rect=[min(xreg) min(yreg) abs(xreg(2)-xreg(1)) abs(yreg(2)-yreg(1))] %rect:[left low xsize ysize]
end
Now I would like to form the same size rectangle everytime but be able to choose where to place it, so that in different images the size of the rectangle is always the same. So that with one mouse click I can choose for example the upper right corner and then a fixed size rectangle is formed. How should I go about making this code, can anybody help?
Thanks in advance !

채택된 답변

Image Analyst
Image Analyst 2014년 4월 8일
I suggest you use rbbox() for creating the first box. Then use ginput(1) to specify the upper left corners of the subsequent boxes.
  댓글 수: 3
Joseph Cheng
Joseph Cheng 2014년 4월 8일
from the comments in the code you can see what is happening.
[xreg yreg] = ginput(2); %2 points
if (length(xreg) < 2)
return%break
end
rect=[min(xreg) min(yreg) abs(xreg(2)-xreg(1)) abs(yreg(2)-yreg(1))]
so you know this slice of code does 2 points and defines a rectangle. so how would you change it to make it 1?
[xreg yreg] = ginput(1); %1 point
if (length(xreg) < 1) %check to see if point is selected.
return%break
end
now you'll have to redefine the rectangle as you are only specifying 1 corner. The rectangle is defined in rect by
rect = [x, y, width, height];
where x = x axis pixel location for lower left corner
y = y axis pixel location for lower left corner
width = width of rectangle
height = height of rectangle.
since you are specifying the box dimensions those would be static or defined elsewhere. then depending on which corner you want the click to define you'll have to calculate what the coordinate would be for the lower left corner's x and y.
Image Analyst
Image Analyst 2014년 4월 9일
For rbbox, look at thiis function where the user clicks and drags out a box and then it calculates the x1,x2,y1,and y2 coordinates and finally crops the image (which you don't have to do if you don't want to):
function [croppedImage, xCoords, yCoords] = CropImage(rgbImage)
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
drawnow;
croppedImage = rgbImage(y1:y2,x1:x2,:);

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Visual Exploration에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by