带有Matlab GUI滑块的WindowScrollWheelFcn

时间:2015-07-14 19:57:38

标签: matlab user-interface image-processing mouseevent image-segmentation

我在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);

我一直收到错误:&#34;使用Image_GUI_new错误&gt;轮没有足够的输入参数。&#34;

我在Matlab中没有丰富的GUI经验,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

你非常接近!

默认情况下,回调函数在按照您的定义时分配了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,而是更新创建的cdata句柄的hShow属性:

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

您可能会看到图像显示得更加流畅......

希望有所帮助!