有没有办法在MATLAB中以图形方式调整现有坐标(例如,单击并拖动)?

时间:2014-05-08 15:43:54

标签: matlab cursor interactive

我有现有的坐标(例如来自 ginput()),它标记图像中感兴趣区域(ROI)周围多边形的顶点。

我想显示这个多边形,并且能够调整顶点(例如,点击并拖动或点击并点击)到"微调"投资回报率。首先,我要保持顶点数不变。

这在MATLAB中是否可行?

我想实现这一点,因为我分析了数百张具有相似(但不完全相同)ROI的图像 - 能够在数百张图像上调整几个顶点,而不是为每张图像绘制新的ROI给我节省了很多时间。

谢谢。

P.S。我是MATLAB的新手。

1 个答案:

答案 0 :(得分:1)

我看到了您对impoly()的评论,但如果您对使用ginput()的更“亲身实践”的方法感兴趣,那么这里有一些代码可以解决这个问题!它假设您有一些初始顶点。然后单击某处,它会找到最近的顶点并将其“移动”到您单击的位置。

function [] = test()

% Just setting some initial test vertices
v = [0,0; 0,1; 1,1; 1,0];

% Draw the inital polygon
ha = draw_edges(v,[]);

% Get the affected vertex and shift it
[x,y] = ginput(1);
distArr = sqrt((v(:,1)-x).^2+(v(:,2)-y).^2);
[~,idx] = min(distArr);
v(idx,:) = [x,y];

% Re-draw the polygon with the shifted vertex
draw_edges(v,ha);

end


function [ha] = draw_edges(v, ha)

if ~isempty(ha)
    delete(ha) 
end

if ~isempty(v)
    v(end+1,:) = v(1,:);
    ha = zeros(size(v,1)-1,1);
    for i = 1:size(v,1)-1
        v1 = v(i,:);
        v2 = v(i+1,:);
        ha(i) = line([v1(1) v2(1)], [v1(2) v2(2)]);
    end
end

end