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

📄 imui.m

📁 这是采用Matlab编写的车牌识别程序,好不好下了就知
💻 M
📖 第 1 页 / 共 3 页
字号:
function imui(varargin)
% IMUI - Image Processing Toolbox Utilities for MATLAB 6.1
% Under development
% Kotaimen.C, 2002/5 - 200?/?, All rights reserved.
% Connect to kotaimen_c@citiz.net.
%   imui
%   imui('ImageFileName')
%   imui ImageFileName
%   imui(ImageData)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Pre-Initialize
if isempty(getImuiFigureHandles)
	V = str2num((version('-release')));
	if V < 12.1
		error('IMUI requires MATLAB 6.1 (release 12.1) or higher.')
	end
	try
		iptgetpref;
	catch
		error('IMUI requires Image Processing Toolbox.')
	end
	D = get(0, 'ScreenDepth');
	if D < 16
		error('IMUI requires a 16-bit Monitor.')
	end
end
if nargin == 0
	PreAction = 'NewImage';
else
	if isstr(varargin{1})
		if length(varargin{1}) >= 4
			if varargin{1}(1 : 4) == '::::'
				PreAction = 'Callback';
			else
				PreAction = 'ImageFile';
			end
		else
			PreAction = 'ImageFile';
		end
	else
		PreAction = 'ImageData';
	end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Initialize
switch PreAction
case 'NewImage'
	CX = im2uint8(ones(300, 400));
	imgTitle = ['image', num2str(length(getImuiFigureHandles) + 1)];
	Action = '::::BuildGUI';
case 'ImageFile'
	try
		imgFileInfo = imfinfo(varargin{1});
	catch
		errstr = sprintf(['Unable to open "',varargin{1}, ...
			'", file may not exist or unknown file type.\n', ...
			'Type "help imread" for more information.']);
		error(errstr)
		return
	end
 	h = waitfig(sprintf('Opening %s', varargin{1}));
	if strcmpi(imgFileInfo.ColorType, 'indexed')
		[CX, CMAP] = imread(varargin{1});
		CX = im2uint8( ind2rgb(CX, CMAP) );
	else
		CX = imread(varargin{1});
	end
	imgType = imagetype(CX);
	imgTitle = varargin{1};
	Action = '::::BuildGUI';
 	delete(h)
case 'ImageData'
	CX = varargin{1};
	imgType = imagetype(CX);
	if nargin > 1
		imgTitle = varargin{2};
	else
		imgTitle = inputname(1);
		if isempty(imgTitle)
			imgTitle = ['image', num2str(length(getImuiFigureHandles) + 1)];;
		end
	end
	Action = '::::BuildGUI';
case 'Callback'
	Action = varargin{1};
	ud = get(gcbf, 'UserData');
otherwise
	error('Invalid PreAction')
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Callback
switch Action
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Build GUI
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::BuildGUI'
	hdlFig = figure( ...
		'Name',			'imui', ...
		'Units',		'pixel', ...
		'Menubar',		'none', ...
		'NumberTitle',	'off', ...
		'Resize',		'on', ...
		'Visible',		'off', ...
		'Interruptible','off', ...
		'Busyaction', 	'queue', ...
		'Tag',			'::::imuiFigure');
	hdlTxt = uicontrol(hdlFig, ...
		'Style',		'text', ...
		'Units',		'normalized', ...
		'Position',		[0.1 0.1/3 0.8, 0.1/3], ...
		'FontName',		'Courier New', ...
		'FontSize',		9, ...
		'FontWeight',	'bold', ...
		'String',		'');
	hdlAxe = axes( ...
		'Units',		'normalized', ...
		'Position',		[0 0 1 1]);

	hdlImg = imshow(im2uint8(CX), 'notruesize');

	hdlMenu = buildmenu( hdlFig );

	set(hdlAxe, ...
		'Visible', 		'off', ...
		'DrawMode',		'fast', ...
		'Box',			'on', ...
		'Layer',		'top', ...
		'XAxisLocation','top', ...
		'GridLineStyle',':', ...
		'TickLength',	[0.001 0.025], ...
		'XGrid',		'on', ...
		'YGrid',		'on', ...
		'FontSize',		8)
	set(hdlImg, ...
		'UserData',		CX, ...
		'CDataMapping',	'scaled')

	ifZoom = 0;
	ifGrid = 0;
	clrGrid = [0 0 0.5];
	umtoggle(hdlMenu.GridClr10);
	clrFigure = [.8 .8 .8];
	umtoggle(hdlMenu.FigureClr2);
	styGrid = ':';
	umtoggle(hdlMenu.GridStyle3);
	ud = struct( ...
		'FigureHandle',		hdlFig, ...
		'TextHandle',		hdlTxt, ...
		'AxesHandle',		hdlAxe, ...
		'ImageHandle',		hdlImg, ...
		'MenuHandles',		hdlMenu, ...
		'ImageType',		imagetype(CX), ...
		'ImageClass',		class(CX), ...
		'ImageTitle',		imgTitle, ...
		'ImageSize',		[size(CX, 2), size(CX, 1)], ...
		'ZoomState',		ifZoom, ...
		'GridState',		ifGrid, ...
		'GridColor',		clrGrid, ...
		'FigureColor',		clrFigure, ...
		'GridLineStyle',	styGrid, ...
		'DefaultOversampleMethod',	'bicubic', ...
		'HistoryData',		struct([]), ...
		'HistoryIndex',		0, ...
		'LastHistoryIndex', 0, ...
		'HistoryCount',		0 ...
	);
	truesize( hdlFig )
	movegui(hdlFig, [24, -24] .* (length(getImuiFigureHandles) + 1) )

	set(hdlFig, ...
		'UserData',			ud, ...
		'Visible',			'on', ...
		'HandleVisibility',	'callback', ...
		'Colormap',			gray(256), ...
		'KeyPressFcn',		' imui(  ''::::KeyPress''  ) ', ...
		'CloseRequestFcn',	' imui(  ''::::CloseRequest''  ) ', ...
		'ResizeFcn',		' imui(  ''::::Resize''  ) ', ...
		'WindowButtonMotionFcn', 	'imui( ''::::ButtonMotion'') ', ...
		'WindowButtonDownFcn', 		'imui( ''::::ButtonDown'') ', ...
		'WindowButtonUpFcn', 		'imui( ''::::ButtonUp'') ')

	AppendToHistory(ud, 'New/Create/Open')
	UpdateGUIState(ud)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% UpdateImage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::UpdateImage'
	NewCX = varargin{2};
	mnuud = get(gcbo, 'UserData');
	NewImgType = imagetype(NewCX);
	NewImgClass = class(NewCX);
	NewImgSize = [size(NewCX, 2), size(NewCX, 1)];
	LastActionName = mnuud.ActionName;

	if all(NewImgSize == ud.ImageSize)% & strcmp(NewImgType, ud.ImageType)
		if strcmp(NewImgClass, 'double')
			NewCX(NewCX > 1) = 1;
			NewCX(NewCX < 0) = 0;
			NewImgType = imagetype(NewCX);
		end

		set(ud.ImageHandle, 'UserData', NewCX)
		DisplayFunction(ud.ImageHandle)

		ud.ImageClass = NewImgClass;
		ud.ImageType = NewImgType;
		ud.ImageSize = NewImgSize;
		AppendToHistory(ud, mnuud.ActionName)

		UpdateGUIState(ud)
	else
		imui(NewCX, [ud.ImageTitle, ' - ' ,mnuud.ActionName])
	end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% RESIZEFCN
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::Resize'
	UpdateImageDisplayRatio(ud)
case '::::ButtonDown'
	UpdateImageDisplayRatio(ud)
case '::::ButtonUp'
	UpdateImageDisplayRatio(ud)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% KEYPRESSFCN
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::KeyPress'
	keychar = get(ud.FigureHandle, 'CurrentCharacter');
	switch keychar
	case ' '
		imui('::::mnucb_HideMenu')
	case {'Z', 'z'}
		imui('::::mnucb_Zoom')
	case {'G', 'g', ';'}
		imui('::::mnucb_Grid')
	case {'+', '='}
		imui('::::mnucb_ZoomIn');
	case {'-', '_'}
		imui('::::mnucb_ZoomOut');
	case '/'
		imui('::::mnucb_ZoomTrue');
	case '*'
		imui('::::mnucb_ZoomFit');
	case '.'
		imui('::::mnucb_ZoomFig');
	end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% CLOSEREQUESTFCN
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::CloseRequest'
	ud = get(gcf, 'UserData');
	for i = 1 : ud.HistoryCount
		delete([ud.HistoryData(i).FileName, '.mat'])
	end
	delete(gcf)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% WINDOWBUTTONMOTIONFCN
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::ButtonMotion'

	if ud.GridState
		temp = get(ud.AxesHandle, 'CurrentPoint');
		cpX = round( temp(1, 1) );
		cpY = round( temp(1, 2) );

		if all([cpX <= ud.ImageSize(1), cpX >=1 ...
				cpY <= ud.ImageSize(2), cpY >=1])
			CX = get(ud.ImageHandle, 'UserData');
			switch ud.ImageClass
			case 'uint8'
				CX = double(CX(cpY, cpX, :));
			case 'uint16'
				CX = round( double(CX(cpY, cpX, :)) / 255 );
			otherwise
				CX = round(CX(cpY, cpX, :) * 255);
			end

			if strcmp(ud.ImageType, 'RGB')
				textstr = sprintf( 'X : %4d, Y : %4d;  RGB(%3d, %3d, %3d)', ...
					cpX, cpY, CX);
			else
				textstr = sprintf( 'X : %4d, Y : %4d;  Black(%3d) ', ...
					cpX, cpY, CX);
			end
		else
			textstr = 'Out of image';
		end
		set(ud.TextHandle, 'String', textstr)
	end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% File menu callbacks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::mnucb_File'
	if length(pwd) < 60
		set(ud.MenuHandles.CurDir, 'Label', pwd)
	else
		set(ud.MenuHandles.CurDir, 'Label', 'Current DIR')
	end
case '::::mnucb_New'
	prompt = {sprintf('Enter image name :\n'), ...
			sprintf('Enter X size (in pixels) :\n'), ...
			sprintf('Enter Y size (in pixels) :\n')};
	default = {['image', num2str(length(getImuiFigureHandles) + 1)], ...
			num2str(ud.ImageSize(1)), num2str(ud.ImageSize(2))};
	dlgtitle = 'New image';
	answer = inputdlg(prompt, dlgtitle, 1, default);
	if ~isempty(answer)
		imgTitle = answer{1};
		Xsize = round(str2num(answer{2}));
		Ysize = round(str2num(answer{3}));
		if Xsize >= 0 & Ysize >=0
			imui(im2uint8(ones(Ysize, Xsize)), imgTitle)
		end
	end
case '::::mnucb_Duplicate'
	imui(get(ud.ImageHandle, 'UserData'), [ud.ImageTitle, ' - copy'])
case '::::mnucb_Open'
	[filename, pathname] = uigetfile( {...
		'*.jpg;*.tif;*.gif;*.bmp;*.png', 'All image files(*.jpg,*.tif,*.gif,*.bmp,*.png)';
		'*.jpg;*.jpeg', 'JPEG files(*.jpg)';
		'*.gif', 'GIF files(*.gif)';
		'*.tif;*.tiff', 'TIFF files(*.tif)';
		'*.bmp', 'BMP files(*.bmp)';
		'*.png', 'PNG files(*.png)';
		'*.*', 'All Files (*.*)'}, 'Open an image');
	if ischar(filename)
		imui([pathname, filename])
	end
case '::::mnucb_Save'
	[filename, pathname] = uiputfile( ...
		ud.ImageTitle, 'Save as...');

	if ischar(filename)
		try
			imwrite(get(ud.ImageHandle, 'UserData'), ...
				[pathname, filename])
		catch
			errordlg(sprintf('Error while saving file: %s.\n%s', ...
			[pathname, filename], lasterr), 'IMUI', 'modal');
		end
	end
case '::::mnucb_CurDir'
	fileext = {'jpg', 'tif', 'gif', 'bmp', 'png'};
	filelist = '';
	%Build file list
	for i = 1 : length(fileext)
		FS = dir(['*.', char(fileext{i})]);
		if ~isempty(FS)
			for j = 1 : length(FS)
				filelist = strvcat(filelist, FS(j).name);
			end
		end
	end
	filelist = sortrows(filelist);

	hsubmenu = allchild(ud.MenuHandles.CurDir);
	if ~isempty(filelist)
		for i = 1 : size(filelist, 1);
			mnulabel = deblank( filelist(i, :) );
			uimenu( ud.MenuHandles.CurDir, ...
				'Label',		mnulabel, ...
				'Tag',			mnulabel, ...
				'Callback',		'imui(  ''::::mnucb_CurDir_ChildCbFCN''  )');
		end
	else
		uimenu( ud.MenuHandles.CurDir, ...
			'Label',		'There is no image file in current directory', ...
			'Enable',		'off');
	end
	if ~isempty(hsubmenu)
		delete(hsubmenu)
	end
case '::::mnucb_CurDir_ChildCbFCN'
	imui(get(gcbo, 'Tag'))
case '::::mnucb_Import'
	workspacevars = evalin('base', 'whos');
	varlist = '';
	for i = 1 : length(workspacevars)
		varclass = workspacevars(i).class;
		if any( strcmpi(varclass, {'double'; 'uint8'; 'uint16'}) )

⌨️ 快捷键说明

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