data pick by given geometry

2 Ansichten (letzte 30 Tage)
Yu Li
Yu Li am 4 Apr. 2019
Kommentiert: Image Analyst am 8 Apr. 2019
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

Antworten (2)

Image Analyst
Image Analyst am 5 Apr. 2019
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 Kommentare
Walter Roberson
Walter Roberson am 8 Apr. 2019
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 am 8 Apr. 2019
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

Melden Sie sich an, um zu kommentieren.


Walter Roberson
Walter Roberson am 5 Apr. 2019

Kategorien

Mehr zu 3-D Scene Control finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by