MATLAB中的后期更新功能输出 - R2015b

时间:2017-09-20 17:41:49

标签: matlab function slider global-variables

我有以下代码;从父脚本调用此函数,并生成允许用户选择阈值参数的GUI。

不幸的是,输出参数threshold迟到了。例如,第一次运行该函数时,无论我如何使用滑块,它都会将threshold报告为空,即使我已将thresh_final设置为0.9。下次我运行该功能时,它会立即将threshold更新为0.9,然后才能调整thresh_final。也就是说,当我在 t 时运行该函数时,它会在{strong> t-1 threshold的值输出为thresh_final的选定值>

function threshold = threshold_choose(frames,prob_mat)

global thresh_final

f1  = figure('Visible','on','pos',[100,50,800,800]);
ax1 = axes('Units','Pixels');
    work_im = prob_mat(:,:,2);
    normali = max(max(work_im));
    work_im = work_im ./ normali;
    user_choose = work_im > 0.8 ; 
    demoImage = mat2gray(user_choose);
    imshow(demoImage)

sld = uicontrol('Style', 'slider',...
    'Min',0,'Max',1,'Value',0.8,...
    'Position', [200 50 300 20],...
    'Callback', @thresh_change);

function thresh = thresh_change(source,~)
    thresh = source.Value;
        figure(f1)
        user_choose = work_im > thresh ; 
        demoImage = mat2gray(user_choose);
        imshow(demoImage)
        thresh_final = thresh;

        closeing = uicontrol('Style','pushbutton',...
        'String','Close GUI',...
        'Position',[700,20,80,80],...
        'Callback', @closeAll);

    end
    function closeAll(~,~)
        close all
    end
end
threshold = thresh_final;   
end

目前,为了解决这个问题,我可以简单地调用该函数,调整参数,然后关闭GUI,然后再次调用该函数,但是立即关闭GUI,而不调整参数,但这是不太实际。

我认为这是因为当我调用该函数时,它会运行整个脚本,包括最后一行threshold = thresh_final,然后等待运行嵌套函数,直到它们被调用,但我不会这样做。我知道如何解决这个问题。

非常感谢任何帮助。

0 个答案:

没有答案