⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imuifilter.m

📁 这是采用Matlab编写的车牌识别程序,好不好下了就知
💻 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 + -