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

📄 imuieq.m

📁 这是采用Matlab编写的车牌识别程序,好不好下了就知
💻 M
📖 第 1 页 / 共 2 页
字号:
		CY = -1;
	end
	delete(ud.fig)
%=====================================================================
case '::::MouseDown'
	MouseEvent(ud, 'down')
	ud.MouseState = 'down';
	set(ud.fig, 'UserData', ud)
%=====================================================================
case '::::MouseRelease'
	MouseEvent(ud, 'release')
	ud.MouseState = 'release';
	set(ud.fig, 'UserData', ud)
%=====================================================================
case '::::MouseMotion'
	MouseEvent(ud, 'motion')
%=====================================================================
case '::::cb_PreviewImage'
	if get(ud.chkpreviewimg, 'Value')
		UpdatePreview(ud)
	else
		CX = get(ud.img, 'UserData');
		set(ud.img, 'CData', CX)
	end
%=====================================================================
case '::::cb_Preview2DFR'
	if get(ud.chkpreview2dfr, 'Value')
		UpdatePreview(ud)
	end
%=====================================================================
case '::::cb_Normalized'
	UpdatePreview(ud)
%=====================================================================
case '::::cb_KSize'
	temp = get(ud.linecp, 'YData');
	UpdateLine(ud, 1, temp(1))

%=====================================================================
case '::::cb_Method'
	if get(ud.popmethod, 'Value') == 3
		set(ud.popwindow1, 'Enable', 'on')
		set(ud.txt3, 'Enable', 'on')
		imuieq('::::cb_Window1')
		return
	else
		set(ud.popwindow1, 'Enable', 'off')
		set(ud.txt3, 'Enable', 'off')
		set(ud.txt4, 'Enable',	'off')
		set(ud.edtpara, 'Enable',	'off')
	end
	drawnow
	UpdatePreview(ud)
%=====================================================================
case '::::cb_Window1'
	set(ud.txt4, 'Enable',	'on')
	set(ud.edtpara, 'Enable',	'on')
	switch get(ud.popwindow1, 'Value')
	case 6
		set(ud.txt4, 'String',	'R : ')
	case 7
		set(ud.txt4, 'String',	'ALPHA : ')
	case 13
		set(ud.txt4, 'String',	'R : ')
	otherwise
		set(ud.txt4, 'Enable',	'off')
		set(ud.edtpara, 'Enable',	'off')
	end
	UpdatePreview(ud)
	%=====================================================================
case '::::cb_Para'
	UpdatePreview(ud)
	%=====================================================================
case '::::cb_Reset'
	set(ud.linecp, 'YData', zeros(16, 1))
	set(ud.chkpreview2dfr, 'Value', 1)
	set(ud.chkpreviewimg, 'Value', 0)
	set(ud.chksnaptogrid, 'Value', 0)
	set(ud.chknormalized, 'Value', 0)
	set(ud.popksize, 'Value', 6)
	set(ud.popmethod, 'Value', 1)

	CX = get(ud.img, 'UserData');
	set(ud.img, 'CData', CX)
	imuieq('::::cb_Method')
	temp = get(ud.linecp, 'YData');
	UpdateLine(ud, 1, temp(1))

%=====================================================================
case '::::cb_Export'
	prompt = {sprintf('Enter varaible name :\n')};
	default = {'h'};
	dlgtitle = 'Export Convoluation Kernel to Workspace';
	answer = inputdlg(prompt, dlgtitle, 1, default);
	if ~isempty(answer)
		varName = answer{1};
		if isvarname(varName)
			assignin('base', varName, get(ud.fr, 'UserData'));
		else
			prompt = sprintf(['\\bf', varName , '\\rm is not a valid varaible name. \n\n', ...
			'A valid variable name is a character string of letters, digits and', ...
    		'underscores, with length <= 31 and the first character a letter.']);
			h = errordlg(prompt, 'Curves', ...
				struct('Interpreter', 'tex', 'WindowStyle', 'modal') );
		end
	end
%=====================================================================
case '::::cb_Apply'
	set(ud.btnapply, 'Userdata', 'apply')
	set(ud.fig, 'Visible', 'off')
%=====================================================================
case '::::cb_Cancel'
	set(ud.btnapply, 'Userdata', 'cancel')
	set(ud.fig, 'Visible', 'off')
end
%=====================================================================
function MouseEvent(ud, event)
Sensitivity = 0.02;
temp = get(ud.axeseq, 'CurrentPoint');
LIM_X = get(ud.axeseq, 'XLim');
LIM_Y = get(ud.axeseq, 'YLim');
CurrentPointX = temp(1, 1);
CurrentPointY = temp(1, 2);
if all([CurrentPointX >= LIM_X(1), CurrentPointX <= LIM_X(2), ...
		CurrentPointY >= LIM_Y(1), CurrentPointY <= LIM_Y(2)])

	ThisPoint = [];
	for i = linspace(0, 1, 16)
		if abs(CurrentPointX - i) < Sensitivity
 			ThisPoint = i * 15 + 1;
 			break
 		end
	end

	switch event
	case 'down'
		if isempty(ThisPoint)
			setptr(ud.fig, 'arrow')
		else
			setptr(ud.fig, 'closedhand')
			UpdateLine(ud, ThisPoint, CurrentPointY)
		end
	case 'release'
		ud.HotPoint = [];
		if isempty(ThisPoint)
			setptr(ud.fig, 'arrow')
		else
			setptr(ud.fig, 'hand')
		end
	case 'motion'
		if strcmp(ud.MouseState, 'down')
			if isempty(ThisPoint)
				setptr(ud.fig, 'arrow')
			else
				setptr(ud.fig, 'closedhand')
			end
 			if ~isempty(ThisPoint)
				 UpdateLine(ud, ThisPoint, CurrentPointY)
			end
		else
			if isempty(ThisPoint)
				setptr(ud.fig, 'arrow')
			else
				setptr(ud.fig, 'hand')
			end
		end
	end
else
	setptr(ud.fig, 'arrow')
end

%=====================================================================
function UpdateLine(ud, ThisPoint, CurrentPointY)

temp = get(ud.linecp, 'YData');
if get(ud.chksnaptogrid, 'Value')
	CurrentPointY = round(CurrentPointY * 5) / 5;
end
temp(ThisPoint) = CurrentPointY;
set(ud.linecp, 'YData', temp);

temp1 = get(ud.popksize, 'Value');
temp2 = get(ud.popksize, 'String');
ksize = str2num(temp2{temp1}) - 1;

b = remez(ksize, get(ud.linecp, 'XData'), get(ud.linecp, 'YData'));

set(ud.linecp, 'UserData', b)
[h, w] = freqz(b,1,256);
set(ud.linefr, 'XData', linspace(0,1,256), 'YData', abs(h))
if get(ud.chkpreview2dfr, 'Value') | get(ud.chkpreviewimg, 'Value')
	UpdatePreview(ud)
end

%=====================================================================
function UpdatePreview(ud)
set(ud.txtinfo , 'String', 'Busy')
drawnow
if get(ud.popmethod, 'Value') == 1
	b = get(ud.linecp, 'UserData');
	try
		convkernel = ftrans2(b);
	catch
		set(ud.txtinfo , 'String', '')
		return
	end
else
	temp1 = get(ud.popksize, 'Value');
	temp2 = get(ud.popksize, 'String');
	ksize = str2num(temp2{temp1}) - 1;

	temp1 = get(ud.linecp, 'XData');
	temp2 = get(ud.linecp, 'YData');

	interpdata = interp1(temp1, temp2, linspace(0, 1, 512));

	[f1, f2] = freqspace(ksize);
	Hd = zeros(ksize);
	i = 0;
	for x = f1
		i = i + 1;
		j = 0;
		for y = f2
			j = j + 1;
			temp = sqrt(x ^ 2 + y ^ 2);
			if temp > 1
				temp = 1;
			end
			id = round( temp * 511 + 0.5);
			Hd(i, j) = interpdata(id);
		end
	end
	switch get(ud.popmethod, 'Value')
	case 2
		convkernel = fsamp2(Hd);
	case 3
		para = str2num(get(ud.edtpara, 'String'));
		switch get(ud.popwindow1, 'Value')
		case 1
			win = window(@bartlett, ksize);
		case 2
			win = window(@barthannwin, ksize);
		case 3
			win = window(@blackman, ksize);
		case 4
			win = window(@blackmanharris, ksize);
		case 5
			win = window(@bohmanwin, ksize);
		case 6
			win = window(@chebwin, ksize, para);
		case 7
			win = window(@gausswin, ksize, para);
		case 8
			win = window(@hamming, ksize);
		case 9
			win = window(@hann, ksize);
		case 10
			win = window(@kaiser, ksize);
		case 11
			win = window(@nuttallwin, ksize);
		case 12
			win = window(@rectwin, ksize);
		case 13
			win = window(@tukeywin, ksize, para);
		case 14
			win = window(@triang, ksize);
		end
		convkernel = fwind1(Hd, win);
	case 4
        win = fspecial('gaussian', ksize, 2);
        win = win ./ max(win(:));
		convkernel = fwind2(Hd, win);
	end
end
if get(ud.chknormalized, 'Value')
	temp = abs(sum(sum(convkernel)));
	if temp ~= 0
		convkernel = convkernel ./ temp;
	end
end
set(ud.fr, 'UserData', convkernel)

if get(ud.chkpreview2dfr, 'Value')
	[H, fx, fy] = freqz2(convkernel, [48 48]);
	set(ud.hsurf , ...
		'ZData', 	H, ...
		'CData',	H)
end
if get(ud.chkpreviewimg, 'Value')

	CX = get(ud.img, 'UserData');

	CX = imfilter(CX, convkernel, 'replicate');
	if strcmp(class(CX), 'double')
		CX(CX > 1) = 1;
		CX(CX < 0) = 0;
	end
	set(ud.img, 'CData', CX)
end

set(ud.txtinfo , 'String', '')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -