-1

MATLABButtonDownFcnのFigure でを使用しようとしています。imagescツールバーに作成したカスタム ボタンをクリックして、この機能を有効にしたいと考えています。

ButtonDownFcnは、 を使用して選択されたピクセルの位置を返すメソッドを呼び出します。ButtonDownFcnこれにより、そのピクセルが時間の経過とともにどのように変化するかをグラフ化できます。

注:
- 私は matlab で GUIDE を使用しています -
3Dimagescマトリックスをプロットしています。GUIDE で作成したボタンを使用して、時間の経過と共に画像がどのように変化するかを確認できるコードを既に実装しています。

現時点で私が苦労しているのButtonDownFcnは、imagesc. これを行う方法について(インターネットでの調査を通じて)何度も読みましたが、うまくいかないようです。

どんな助けでも大歓迎です。

これが私のコードです:

    % --------------------------------------------------------------------
function ui_throughTime_ClickedCallback(hObject, eventdata, handles)
% hObject    handle to ui_throughTime (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
valS = get(handles.txt_zaxis,'string');
display(valS);
val = str2num(valS);
d = handles.data;
m = imagesc(d(:,:,val),'parent',handles.axis, 'HitTest', 'off','buttondownfcn',{@getPlace, handles});
set(handles.axis,'buttondownfcn',{@getPlace, handles,m});

function getPlace(hObject,handles,event_obj,place)
% data = randn(120,160); 
% ax = axes;
% imagesc(data,);
if (gcf == place)
    pause(1); 
    cursor = get(handles.axis,'CurrentPoint'); % get point
    % Get X and Y from point last clicked on the axes 
    x = (cursor(1,1));
    y = (cursor(1,2));
    disp(['x = ' num2str(x) ' y = ' num2str(y)]); 
end
4

1 に答える 1

1

簡単な例を次に示します。

%% Init
fig_h = figure('CloseRequestFcn', 'run = 0; delete(fig_h);');
rgb = imread('peppers.png');
run = 1; t = 0;

%% Loop
while run
    t = t + 0.05;
    imagesc(rgb*sin(t), 'ButtonDownFcn', 'disp(''Clicked'')');
    pause(0.01);
end

画像の上'ButtonDownFcn'が使用されているため、'HitTest'画像のプロパティは である必要があります'On'

以下は'ButtonDownFcn'、軸の が使用されている場合で、画像が軸の前にあるため、'HitTest'画像のプロパティを指定し'Off'ないと、軸を選択できません。

%% Loop
ax = axes;
while run
    t = t + 0.05;
    imagesc(rgb*sin(t), 'Parent', ax, 'HitTest', 'Off');
    set(ax, 'ButtonDownFcn', 'disp(''Clicked'')')
    pause(0.01);
end

図を使用することも可能ですが'ButtonDownFcn'、画像'HitTest''Off'. ただし、この場合、画像の外側(または関心のある領域)のクリックされたポイントは、プログラムでフィルタリングする必要があります。

それが役に立てば幸い。

于 2013-07-05T20:53:33.940 に答える