我有以下代码;从父脚本调用此函数,并生成允许用户选择阈值参数的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
,然后等待运行嵌套函数,直到它们被调用,但我不会这样做。我知道如何解决这个问题。
非常感谢任何帮助。