如何在MATLAB中编辑图像上标记的点的坐标?

时间:2016-06-01 00:47:52

标签: matlab matlab-figure matlab-guide

我在Matlab中创建GUI,我需要使用鼠标移动一些数据点,例如:

imshow(someImage, [ ]), hold on;

plot(x, y, '*r')

我想通过点击它从x和y矢量中选择一个点并使用鼠标移动它。我该如何实施呢?

1 个答案:

答案 0 :(得分:1)

您可以使用图像处理工具箱中的impoint,因为它已经为您提供了拖动点的可能性。因此,创建一个图形并绘制任何你想要的图形。然后,调用impoint(gca),这样就可以在当前轴上放置一个点。绘制点后,您可以用鼠标拖动它。您可以再次致电impoint获取第二个点,依此类推......

要获得点的位置,您希望在创建时将它们存储在impoint - 数组中,然后使用每个点调用getPosition以获取坐标。

由于您未提供任何代码以使用所需功能进行扩展,因此我创建了一个带有两个按钮的简单绘图作为示例。按"添加点"它允许你放置一个新点。第一次单击后,您可以移动此点。添加完所有点后,点击"完成"阅读点的最终坐标。

figure;                 % create new figure

plot([0,1],[0,0],'r');  % plot something nice (your image)
ylim([-1,1]);           % set limit of y-axis

h = impoint.empty;      % define empty object array of type impoint
btnAdd = uicontrol('String','Add point',...
                   'Position',[90 60 70 30],...
                   'Callback', 'h(end+1)=impoint(gca);h(end).Deletable=0;wait(h(end))');
btnDone = uicontrol('String','Done',...
                    'Position',[165 60 40 30],...
                    'Callback', 'uiresume(gcbf)');

uiwait(gcf);            % wait until 'Done' is pressed
delete(btnAdd);         % revove the button
delete(btnDone);        % revove the button

% get coordinates of points
pos = zeros(numel(h),2);            % preallocate
for k = 1:numel(h)
    pos(k,:) = getPosition(h(k));   % read coordinates of points
end

% evaluate points
positivePoints = sum(pos(:,2)>0)    % count all points above 0