?? imuifilter.m
字號:
function varargout = imuifilter(varargin)
%IMUIFILTER
% Member of IMUI
% Kotaimen.C, 2002/05 - 2002/07, All Rights Reserved
if ~isstr(varargin{1})
Action = '::::BuildGUI';
ud.hdlFCN = varargin{2};
P = feval(ud.hdlFCN);
CX = varargin{1};
if P.ParameterNumber == 0
varargout{1} = feval(ud.hdlFCN, CX);
return
end
CPREV = thumb(CX);
else
ud = get(gcf, 'UserData');
Action = varargin{1};
end
switch Action
case '::::BuildGUI'
h_integer = 8 + 18 + 4 + 16;
h_single = 8 + 18 + 4 + 16;
h_check = 8 + 20;
h_popup = 8 + 20;
h_strel = 8 + 20;
n_integer = 0;
n_single = 0;
n_check = 0;
n_popup = 0;
n_strel = 0;
for i = 1 : P.ParameterNumber
switch lower(P.Parameters{i}.Style)
case 'integer'
n_integer = n_integer + 1;
case 'single'
n_single = n_single + 1;
case 'check'
n_check = n_check + 1;
case 'popup'
n_popup = n_popup + 1;
case 'strel'
n_strel = n_strel + 1;
end
end
h_controls = ...
n_integer * h_integer + ...
n_single * h_single + ...
n_check * h_check + ...
n_popup * h_popup + ...
n_strel * h_strel + ...
8 + P.ParameterNumber * 8 ;
if h_controls > 364
h_fig = h_controls;
else
h_fig = 308;
end
ud.fig = dialog( ...
'Name', P.FilterName, ...
'Position', [0, 0, 408, h_fig], ...
'HandleVisibility', 'on', ...
'Visible', 'off', ...
'WindowStyle', 'modal');
h_base = h_fig - 8;
ud.hdlParameters{i} = ones(P.ParameterNumber, 1);
for i = 1 : P.ParameterNumber
switch lower(P.Parameters{i}.Style)
case 'integer'
uicontrol( ...
'Style', 'text', ...
'HorizontalAlignment', 'left', ...
'Units', 'pixel', ...
'Position', [8, h_base - h_integer + 20 , 128, 18 ], ...
'String', [P.Parameters{i}.Name, ' :'], ...
'Tag', '');
hdlText = uicontrol( ...
'Style', 'text', ...
'HorizontalAlignment', 'right', ...
'Units', 'pixel', ...
'Position', [200, h_base - h_integer + 20 , 64, 18 ], ...
'FontName', 'Courier New', ...
'FontSize', 9, ...
'String', num2str( round(P.Parameters{i}.DefaultValue) ), ...
'Tag', '');
ud.hdlParameters{i} = uicontrol( ...
'Style', 'slider', ...
'Units', 'pixel', ...
'Position', [8, h_base - h_integer , 256, 16 ], ...
'Max', P.Parameters{i}.Max, ...
'Min', P.Parameters{i}.Min, ...
'SliderStep', [P.Parameters{i}.SmallStep / (P.Parameters{i}.Max - P.Parameters{i}.Min), ...
P.Parameters{i}.LargeStep / (P.Parameters{i}.Max - P.Parameters{i}.Min)], ...
'Value', P.Parameters{i}.DefaultValue, ...
'Tag', '::::Parameter', ...
'Callback', 'imuifilter(''::::cb_Parameter'')', ...
'UserData', struct( ...
'Style', 'integer', ...
'hdlText', hdlText, ...
'DefaultValue', P.Parameters{i}.DefaultValue ...
) );
h_base = h_base - h_integer - 8;
case 'single'
uicontrol( ...
'Style', 'text', ...
'HorizontalAlignment', 'left', ...
'Units', 'pixel', ...
'Position', [8, h_base - h_integer + 20 , 128, 18 ], ...
'String', [P.Parameters{i}.Name, ' :'], ...
'Tag', '');
hdlText = uicontrol( ...
'Style', 'text', ...
'HorizontalAlignment', 'right', ...
'Units', 'pixel', ...
'Position', [200, h_base - h_integer + 20 , 64, 18 ], ...
'FontName', 'Courier New', ...
'FontSize', 9, ...
'String', sprintf( '%.2f', P.Parameters{i}.DefaultValue ), ...
'Tag', '');
ud.hdlParameters{i} = uicontrol( ...
'Style', 'slider', ...
'Units', 'pixel', ...
'Position', [8, h_base - h_integer , 256, 16 ], ...
'Max', P.Parameters{i}.Max, ...
'Min', P.Parameters{i}.Min, ...
'SliderStep', [P.Parameters{i}.SmallStep / (P.Parameters{i}.Max - P.Parameters{i}.Min), ...
P.Parameters{i}.LargeStep / (P.Parameters{i}.Max - P.Parameters{i}.Min)], ...
'Value', P.Parameters{i}.DefaultValue, ...
'Tag', '::::Parameter', ...
'Callback', 'imuifilter(''::::cb_Parameter'')', ...
'UserData', struct( ...
'Style', 'single', ...
'hdlText', hdlText, ...
'DefaultValue', P.Parameters{i}.DefaultValue ...
) );
h_base = h_base - h_single - 8;
case 'check'
ud.hdlParameters{i} = uicontrol( ...
'Style', 'check', ...
'Units', 'pixel', ...
'Position', [96, h_base - h_check , 160, 20 ], ...
'String', P.Parameters{i}.Name, ...
'Value', P.Parameters{i}.DefaultValue, ...
'Tag', '::::Parameter', ...
'Callback', 'imuifilter(''::::cb_Parameter'')', ...
'UserData', struct( ...
'Style', 'check', ...
'DefaultValue', P.Parameters{i}.DefaultValue ...
) );
h_base = h_base - h_check - 8;
case 'popup'
uicontrol( ...
'Style', 'text', ...
'HorizontalAlignment', 'left', ...
'Units', 'pixel', ...
'Position', [8, h_base - h_popup , 88, 18 ], ...
'String', [P.Parameters{i}.Name, ' :'], ...
'Tag', '');
ud.hdlParameters{i} = uicontrol( ...
'Style', 'popupmenu', ...
'Units', 'pixel', ...
'BackgroundColor', 'w', ...
'Position', [96, h_base - h_popup , 160, 20 ], ...
'String', P.Parameters{i}.Items, ...
'Value', P.Parameters{i}.DefaultValue, ...
'Tag', '::::Parameter', ...
'Callback', 'imuifilter(''::::cb_Parameter'')', ...
'UserData', struct( ...
'Style', 'popup', ...
'DefaultValue', P.Parameters{i}.DefaultValue ...
) );
h_base = h_base - h_popup - 8;
case 'strel'
uicontrol( ...
'Style', 'text', ...
'HorizontalAlignment', 'left', ...
'Units', 'pixel', ...
'Position', [8, h_base - h_popup , 128, 18 ], ...
'String', [P.Parameters{i}.Name, ' :'], ...
'Tag', '');
ud.hdlParameters{i} = uicontrol( ...
'Style', 'pushbutton', ...
'Units', 'pixel', ...
'Position', [129, h_base - h_popup , 128, 20 ], ...
'String', sprintf('%d*%d SE...',size(getnhood(P.Parameters{i}.DefaultValue)) ), ...
'Tag', '::::Parameter', ...
'Callback', 'imuifilter(''::::cb_Parameter'')', ...
'UserData', struct( ...
'Style', 'strel', ...
'DefaultValue', P.Parameters{i}.DefaultValue, ...
'SE', P.Parameters{i}.DefaultValue ...
) );
h_base = h_base - h_strel - 8;
end
end
%%%%Default UI Controls
ud.axePreview = axes( ...
'Units', 'pixel', ...
'Position', [272, h_fig - 136, 128, 128]);
ud.imgPreview = imshow(CPREV, 'notruesize');
set(ud.axePreview, ...
'Visible', 'off', ...
'DrawMode', 'fast')
set(ud.imgPreview, ...
'UserData', CPREV, ...
'CDataMapping', 'scaled', ...
'EraseMode', 'xor')
ud.chkPreview = uicontrol( ...
'Style', 'check', ...
'Units', 'pixel', ...
'Position', [304, h_fig - 136 - 28 , 64, 20 ], ...
'Value', 0, ...
'String', 'Preview', ...
'Callback', 'imuifilter(''::::cb_chkPreview'')');
ud.btnApply = uicontrol( ...
'Style', 'pushbutton', ...
'Units', 'pixel', ...
'Position', [299, h_fig - 164 - 48, 75, 24 ], ...
'FontWeight', 'bold', ...
'String', 'Apply', ...
'Callback', 'imuifilter(''::::cb_btnApply'')');
ud.btnCancel = uicontrol( ...
'Style', 'pushbutton', ...
'Units', 'pixel', ...
'Position', [299, h_fig - 212 - 36, 75, 24 ], ...
'FontWeight', 'bold', ...
'String', 'Cancel', ...
'Callback', 'imuifilter(''::::cb_btnCancel'')');
ud.btnReset = uicontrol( ...
'Style', 'pushbutton', ...
'Units', 'pixel', ...
'Position', [299, h_fig - 248 - 48, 75, 24 ], ...
'String', 'Reset', ...
'Callback', 'imuifilter(''::::cb_btnReset'')');
movegui(ud.fig, 'center')
set(ud.fig, ...
'Visible', 'on', ...
'UserData', ud, ...
'HandleVisibility', 'callback', ...
'Colormap', gray, ...
'CloseRequestFcn', 'imuifilter(''::::cb_btnCancel'')')
waitfor(ud.fig, 'Visible', 'off')
if strcmp(get(ud.btnApply, 'UserData'), 'apply')
FCNPARA = {};
for i = 1 : length(ud.hdlParameters)
pud = get(ud.hdlParameters{i}, 'UserData');
switch lower(pud.Style)
case 'integer'
FCNPARA{i} = round(get(ud.hdlParameters{i}, 'Value'));
case 'single'
FCNPARA{i} = get(ud.hdlParameters{i}, 'Value');
case 'check'
FCNPARA{i} = get(ud.hdlParameters{i}, 'Value');
case 'popup'
FCNPARA{i} = get(ud.hdlParameters{i}, 'Value');
case 'strel'
FCNPARA{i} = pud.SE;
end
end
h = waitfig(['Applying "', P.FilterName, '"']);
varargout{1} = feval(ud.hdlFCN, CX, FCNPARA);
delete(h)
else
varargout{1} = -1;
end
delete(ud.fig)
case '::::cb_Parameter'
pud = get(gcbo, 'UserData');
switch lower(pud.Style)
case 'integer'
set(pud.hdlText, ...
'String', num2str(round(get(gcbo, 'Value'))) )
case 'single'
set(pud.hdlText, ...
'String', sprintf('%.2f', get(gcbo, 'Value')) )
case 'check'
case 'popup'
case 'strel'
NewSE = imuistrel;
if isa(NewSE, 'strel')
pud.SE = NewSE;
set(gcbo, 'String', ...
sprintf('%d*%d SE...',size(getnhood(NewSE)) ) );
end
end
set(gcbo,'UserData', pud)
if get(ud.chkPreview, 'Value')
UpdatePreview(ud)
end
case '::::cb_btnReset'
for i = 1 : length(ud.hdlParameters)
pud = get(ud.hdlParameters{i}, 'UserData');
switch lower(pud.Style)
case 'integer'
set(ud.hdlParameters{i}, 'Value', pud.DefaultValue)
set(pud.hdlText, ...
'String', num2str(round(get(ud.hdlParameters{i}, 'Value'))) )
case 'single'
set(ud.hdlParameters{i}, 'Value', pud.DefaultValue)
set(pud.hdlText, ...
'String', sprintf('%.2f', get(ud.hdlParameters{i}, 'Value')) )
case 'check'
set(ud.hdlParameters{i}, 'Value', pud.DefaultValue)
case 'popup'
set(ud.hdlParameters{i}, 'Value', pud.DefaultValue)
case 'strel'
pud.SE = pud.DefaultValue;
set(ud.hdlParameters{i}, 'String', ...
sprintf('%d*%d SE...',size(getnhood(pud.DefaultValue)) ) );
end
set(ud.hdlParameters{i},'UserData', pud)
end
set(ud.chkPreview, 'Value', 0)
set(ud.imgPreview, 'CData', get(ud.imgPreview, 'UserData') )
case '::::cb_chkPreview'
if get(ud.chkPreview, 'Value')
UpdatePreview(ud)
else
set(ud.imgPreview, 'CData', get(ud.imgPreview, 'UserData') )
end
case '::::cb_btnApply'
set(ud.btnApply, 'UserData', 'apply')
set(ud.fig, 'Visible', 'off')
case '::::cb_btnCancel'
set(ud.btnApply, 'UserData', 'cancel')
set(ud.fig, 'Visible', 'off')
end
%========================================================================
function UpdatePreview(ud)
FCNPARA = {};
for i = 1 : length(ud.hdlParameters)
pud = get(ud.hdlParameters{i}, 'UserData');
switch lower(pud.Style)
case 'integer'
FCNPARA{i} = round(get(ud.hdlParameters{i}, 'Value'));
case 'single'
FCNPARA{i} = get(ud.hdlParameters{i}, 'Value');
case 'check'
FCNPARA{i} = get(ud.hdlParameters{i}, 'Value');
case 'popup'
FCNPARA{i} = get(ud.hdlParameters{i}, 'Value');
case 'strel'
FCNPARA{i} = pud.SE;
end
end
set(ud.btnApply, 'Enable', 'off', 'String', 'Busy')
CX = get(ud.imgPreview, 'UserData');
CX = feval(ud.hdlFCN, CX, FCNPARA);
if isbw(CX)
CX = grayxform(CX, [0, ones(1, 255)]);
end
set(ud.imgPreview, 'CData', CX)
set(ud.btnApply, 'Enable', 'on', 'String', 'Apply')
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -