不能在matlab中使用滑块应用图像高斯模糊滤镜

时间:2014-12-03 15:52:51

标签: matlab user-interface image-processing slider gaussian

我正在使用matlab进行图像处理任务,我在对话框中创建了一个滑块,用于在轴上显示的图像上应用和更新高斯模糊滤镜 但它不能应用它,它表明错误 ==>中的错误MatlabTestProject>名称为392 轴(handles.axes4);

???评估uicontrol回调时出错

这是我的代码

function mygui()
   out = dialog('WindowStyle', 'normal', 'Name', 'My Dialog','Resize','off');
  hSlider = uicontrol('Style','slider','Min',3,'Max',15,'Value',3,'Callback',@gaussian_blur);

%hListener = addlistener(hSlider,'Value','PostSet',@(s,e)disp('hi'));

function gaussian_blur(s,e,handles)
global imag;
slider_value = get(s,'Value');
slider_value=round(slider_value);
%display(slider_value);
%disp('hello')
%create filter
%sliderValueTxt=num2str(slider_value);
%set(handles.kSizeValueText ,'String',sliderValueTxt);  
 h = fspecial('gaussian', slider_value,0.5);
imag=imfilter(imag,h,'conv');
   axes(handles.axes4);
  imshow(imag)


 % --------------------------------------------------------------------
 function gaussianBlur_Callback(hObject, eventdata, handles)
 % hObject    handle to gaussianBlur (see GCBO)
 % eventdata  reserved - to be defined in a future version of MATLAB
 % handles    structure with handles and user data (see GUIDATA)

gaussian_dialog_Gui();

1 个答案:

答案 0 :(得分:2)

你真的很亲密!在定义滑块的侦听器对象回调时,您需要做的就是将handles作为函数gaussian_blur的参数。

即更换此行:(虽然看起来像测试线)

hListener = addlistener(hSlider,'Value','PostSet',@(s,e) disp('hi'));

有这样的事情:

hListener = addlistener(hslider,'Value','PostSet',@(s,e) gaussian_blur(handles));

为了确保它有效,我使用轴和滑块以编程方式创建了一个测试GUI,它运行良好!实际上我改变了一点过滤器以查看对我的测试图像的影响,但它在你的情况下应该也能正常工作:

function GaussianSlider()
clear
clc
close all

handles.Image = imread('peppers.png');

handles.fig = figure('Position',[500 500 600 600],'Units','pixels');

handles.axes1 = axes('Units','pixels','Position',[50 100 400 400]);
handles.slider = uicontrol('Style','slider','Position',[50 50 400 20],'Min',3,'Max',15,'Value',3);%// I commented this for the purpose of demonstration. 'Callback',@gaussian_blur(handles));

%// That's the important part: add 'handles' as input argument to
%// gaussian_blur.
handles.Listener = addlistener(handles.slider,'Value','PostSet',@(s,e) gaussian_blur(handles));

imshow(handles.Image,'Parent',handles.axes1);
guidata(handles.fig);

    function gaussian_blur(handles)

        slider_value = round(get(handles.slider,'Value'));

        %// I modified a bit the filter to see the effect
        h = fspecial('gaussian',slider_value,slider_value);

        handles.Image=imfilter(handles.Image,h,'conv');
        axes(handles.axes1);
        imshow(handles.Image)

    end

end

如果我们查看2个屏幕截图(即2个不同的滑块位置):

enter image description here

移动滑块后:

enter image description here

那就是它!希望有所帮助!如果有什么不清楚请告诉我。

哦,如果您不知道:滑块的实际回调仅在您松开按钮或按任意箭头时执行。只要您按住滑块并移动它,它就只会执行将要执行的侦听器回调。