Matlab图形用户界面 - 在图像上绘制点和线

3
我正在尝试用Matlab编写一个GUI,让用户输入点和它们之间的连接。用户还需要输入一张地图图片(png格式)和坐标轴的比例尺(例如,x轴范围为0到比例尺)。 最后(在用户输入所有内容后),我希望向用户显示带有所有节点和连接的图像。
我有5个Matlab文件 - screen1.m、screen2.m、screen3.m、screen4.m、globalParams.m。
在globalParams中,我有全局参数,因此我可以从屏幕GUI使用它们。在screen1中,用户输入节点数(例如5),并输入地图。当他按下“下一步”按钮时,回调函数调用“screen2();”。在screen2.m中,用户输入(x,y)坐标,当他按下“下一步”按钮时,回调函数调用“screen3();”。在screen3中,用户更新所有节点之间的连接。完成后,他按下“完成”按钮,回调函数调用“screen4”。在screen4中,我在GUI上添加了坐标轴,并在其中执行“imshow”。
但是,我真正想做的事情是将坐标轴更改为从0到比例尺(而不是从0到1),我还想放置图像(我用imshow实现了这一目标),最后也是最重要的一点是,我想在图像上放置节点和它们之间的线(如果用户添加了从节点i到节点j的连接,则图像中将有一条线连接它们。也许可以使用不同颜色来区分线和节点)。在screen4中,我们有:xNodes和yNodes-节点“x”和“y”轴的2个数组。(xNodes(1),yNodes(1)是节点1的位置)。此外,我们还有比例尺和图片的完整路径名fullPathName。我们还有一个hopsMatrix,它是一个二维数组-如果hopsMatrix(i,j)=1,则表示i到j之间有连接。
一些代码:
在screen1中,上传图像、节点数和比例尺:
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global fullPathName;
[fileName pathName] = uigetfile({'*.png'},'File Selector');
fullPathName = strcat(pathName, fileName);
imshow(fullPathName);

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global numOfNodes;
global scale;
scale = str2num(get(handles.edit1, 'string'));
numOfNodes = str2num(get(handles.edit2, 'string'));

在screen4中,我有所有的输入,我想把节点放在地图上(我不知道该怎么做,所以现在这是代码):

% --- Executes just before screen4 is made visible.
function screen4_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to screen4 (see VARARGIN)

global fullPathName;
global xNodes;
global yNodes;
global scale;
global hopsMatrix;
img = imread(fullPathName);
imshow(fullPathName);
1个回答

0

这是某人给我的解决方案.. 我会分享出来

% --- Executes just before screen4 is made visible.
function screen4_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to screen4 (see VARARGIN)

global fullPathName;
imshow(fullPathName);
global xNodes;
global yNodes;
global scale;
global hopsMatrix;

x_original=get(handles.axes1,'xlim');
y_original=get(handles.axes1,'ylim');
min_lim=min(x_original(2),y_original(2));
max_lim=max(x_original(1),y_original(1));
xlim([max_lim,min_lim])
ylim([max_lim,min_lim])
dist=min_lim-max_lim;
set(handles.axes1)
hold on
plot((xNodes(:,1))*dist/scale+x_original(1),min_lim+y_original(1)-(yNodes(:,1))*dist/scale,'rx','markersize',8,'linewidth',2)
[row,col] = find(hopsMatrix);
for i=1:length(row)
    plot((xNodes([row(i),1;col(i),1]))*dist/scale+x_original(1),min_lim+y_original(1)-(yNodes([row(i),1;col(i),1]))*dist/scale,'k','linewidth',2)

end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接