2016-06-01 2 views
0

私はMATLABでGUIを作成していると私は、例えば、マウスを使用して、いくつかのデータポイントを移動する必要があります。MATLABでイメージにマークされたポイントの座標を編集するにはどうすればよいですか?

imshow(someImage, [ ]), hold on; 

plot(x, y, '*r') 

私はそれをクリックすることで、xとyのベクトルからポイントを選択して使用して、それを移動したいですハツカネズミ。どのように実装できますか?

+0

しかし、ポイント座標が必要で、複数のポイントを選択する必要があります。 – Gabs

答えて

1

画像処理ツールボックスからimpointを使用すると、すでにポイントをドラッグできる可能性があります。したがって、図を作成し、必要なものをプロットします。次に、impoint(gca)と呼んで、現在の軸にポイントを置くことができます。ポイントを描いた後、マウスでドラッグすることができます。あなたは第二の点のために再びimpointを呼び出すというように...

のポイントの位置を取得するには、作成時にimpoint -arrayに保存したいし、次に取得する点のそれぞれにgetPositionを呼び出すことができます座標。

目的の機能を拡張するためのコードを提供していないので、例として2つのボタンを持つ簡単なプロットを作成しました。新しいポイントを配置するための「ポイントの追加」を押します。最初のクリック後、このポイントを移動することができます。すべてのポイントが追加されたら、「完了」をクリックしてポイントの最終座標を読み取ります。

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 
+0

'impoint'にはImage Processing Toolboxが必要です。 – excaza

+0

@excaza正解、私はそれを私の答えに書いた。 – Matt

+0

他にも問題があります:いくつかのポイントを選択する必要がある場合、それらのポイントの1つを編集する必要がある場合は、そのポイントをクリックしてドラッグして、どこにドラッグしますか?選択を終了する。一言で言えば、ginputを使用していくつかのポイントを選択したいのですが、あるポイントが適切な位置にないことがわかったら、別の場所にドラッグしたいと思います。 – Gabs

関連する問題