Matlab GUI 中带滑块的 WindowScrollWheelFcn

WindowScrollWheelFcn with slider in Matlab GUI

我正在 Matlab 中制作一个 GUI,它可以滚动并显示约 600 张医学图像。我有一个显示图像的轴,还有一个滚动条,当按下结束箭头时,它会一次显示一个图像。

我正在尝试了解如何合并 WindowScrollWheelFcn 以便我可以使用鼠标滚动来更快地浏览图像。

这是我的代码:

function ct_slider_Callback(hObject, eventdata, handles)

set(gcf, 'WindowScrollWheelFcn', @wheel);
set(gcf, 'CurrentAxes', handles.ct_image_axes);
handles.currentSlice = round(get(handles.ct_slider, 'Value'));
imshow(handles.imageArray(:,:,handles.currentSlice));
text = sprintf('Slice number: %d', handles.currentSlice);
set(handles.ct_slice_number, 'String', text);
guidata(hObject, handles);

function wheel(hObject, callbackdata, handles)
    if callbackdata.VerticalScrollCount > 0
        handles.currentSlice = handles.currentSlice + 1;
    elseif callbackdata.VerticalScrollCount < 0
        handles.currentSlice = handles.currentSlice - 1;
    end
guidata(hObject,handles);

我一直收到错误消息:"Error using Image_GUI_new>wheel Not enough input arguments."

我对 Matlab 中的 GUI 没有丰富的经验,所以任何帮助将不胜感激。

你非常接近!

默认情况下,回调函数在定义时会分配 2 个输入参数:

set(gcf, 'WindowScrollWheelFcn', @wheel);

等同于

set(gcf, 'WindowScrollWheelFcn', @(DummyA,DummyB) wheel);

如果您需要添加一个输入参数,例如 handles 结构,您可以将所有输入变量(即 2 个必需变量加上您喜欢的任何变量)包装在一个元胞数组中,如下所示:

set(gcf, 'WindowScrollWheelFcn', {@wheel,handles});

因此函数 wheel 接受 2 个强制输入 + handles 结构。现在应该可以了。

如果可以的话,重复使用 imshow 在性能方面不是很好,如果要在 ct_slider_Callback 中连续显示许多图像,您可能想使用这个技巧:

1) 当显示第一张图片(这里是数字1)时,分配一个句柄作为输出给imshow.

hShow = imshow(handles.imageArray(:,:,1));

2) 然后在执行回调时,不再调用 imshow,而是更新创建的 hShow 句柄的 cdata 属性:

set(hShow,'cdata',handles.imageArray(:,:, handles.currentSlice)));

您可能会发现图像显示更流畅...

希望对您有所帮助!