data pick by given geometry

조회 수: 2 (최근 30일)
Yu Li
Yu Li 2019년 4월 4일
댓글: Image Analyst 2019년 4월 8일
I have a set of scatter data, I want to do someting like below:
  1. use a given coordinate in the x-y system as input
  2. use this coordinate as center, draw a circle in this figure with given radius
  3. find the points inside this circle
is there anyway to do this in Matlab?
I attached a set of test data, below is the test code to reproduce a similiar figure like before:
load test
f=figure(1);
f.Units='pixels';
scatter(test(:,1),test(:,2));
f.Position(4)=f.Position(4)*0.5;
Thanks!
Yu

답변 (2개)

Image Analyst
Image Analyst 2019년 4월 5일
Get the indexes with distances less than R then extract the corresponding x and y coordinates.
x = test(:,1);
y = test(:,2);
plot(x, y, 'b.', 'MarkerSize', 18)
uiwait(msgbox('Locate circle center'));
[xCenter, yCenter] = ginput(1)
distances = sqrt((x-xCenter).^2 + (y-yCenter).^2);
indexes = distances <= R;
xInside = x(indexes);
yInside = y(indexes);
  댓글 수: 4
Walter Roberson
Walter Roberson 2019년 4월 8일
I am confused about which coordinate system the circle needs to be in ? Does the circle need to be in X Y (data) coordinates? Does the circle need to be in screen coordinates?
Image Analyst
Image Analyst 2019년 4월 8일
If you have the Image Processing Toolbox, you can use drawfreehand() to lassoo points. The function works on graphs also (in addition to images of course).
% Draw data
x = rand(100,1);
y = rand(length(x), 1);
scatter(x, y);
grid on;
% Let user lassoo some points interactively.
uiwait(msgbox('Draw a region'));
hFH = drawfreehand() % Required Image Processing Toolbox
% Get x and y points of what user drew.
xfh = hFH.Position(:, 1)
yfh = hFH.Position(:, 2)
% Find points inside the shape.
itsInside = false(length(x), 1);
for k = 1 : length(x)
itsInside(k) = inpolygon(x(k), y(k), xfh, yfh);
end
% Extract the points that are inside to new variables. (Optional)
xInside = x(itsInside);
yInside = y(itsInside);
% Plot a red asterisk over the points
% that are inside the region they drew.
hold on;
plot(xInside, yInside, 'r*');
0000 Screenshot.png

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


Walter Roberson
Walter Roberson 2019년 4월 5일

카테고리

Help CenterFile Exchange에서 Graphics Object Programming에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by