我有现有的坐标(例如来自 ginput()),它标记图像中感兴趣区域(ROI)周围多边形的顶点。
我想显示这个多边形,并且能够调整顶点(例如,点击并拖动或点击并点击)到"微调"投资回报率。首先,我要保持顶点数不变。
这在MATLAB中是否可行?
我想实现这一点,因为我分析了数百张具有相似(但不完全相同)ROI的图像 - 能够在数百张图像上调整几个顶点,而不是为每张图像绘制新的ROI给我节省了很多时间。
谢谢。
P.S。我是MATLAB的新手。
答案 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