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

📄 imui.m

📁 这是采用Matlab编写的车牌识别程序,好不好下了就知
💻 M
📖 第 1 页 / 共 3 页
字号:
			varlist = strvcat(varlist, workspacevars(i).name);
		end
	end
	hsubmenu = get(ud.MenuHandles.Import, 'Children');
	if ~isempty(varlist)
		for i = 1 : size(varlist, 1);

			varinf = evalin('base', ['whos(''',varlist(i, :), ''')']);

			varname = char(varinf.name);
			if ~isempty(varname)
				uimenu( ud.MenuHandles.Import, ...
					'Label',		[varname, ' -- ',...
								mat2str(varinf.size), ', ', char(varinf.class)], ...
					'Tag',			varname, ...
					'Callback',		'imui(  ''::::mnucb_Import_ChildCbFCN''  )');
			end
		end
	else
		uimenu( ud.MenuHandles.Import, ...
			'Label',		'Workspace contains no numberic variable', ...
			'Enable',		'off');
	end
	if ~isempty(hsubmenu)
		delete(hsubmenu)
	end
case '::::mnucb_Import_ChildCbFCN'
	imvar = get(gcbo, 'Tag');
	evalin('base', [  'imui(', imvar, ');'	 ] );
case '::::mnucb_Export'
	prompt = {sprintf('Enter varaible name :\n')};
	default = {strtok(ud.ImageTitle, '. ')};
	dlgtitle = 'Export to workspace';
	answer = inputdlg(prompt, dlgtitle, 1, default);
	if ~isempty(answer)
		varName = answer{1};
		if isvarname(varName)
			assignin('base', varName, get(ud.ImageHandle, '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, 'IMUI', ...
				struct('Interpreter', 'tex', 'WindowStyle', 'modal') );
		end
	end
case '::::mnucb_imshow'
	figure
	imshow(get(ud.ImageHandle, 'UserData'));
case '::::mnucb_imageview'
	imageview(get(ud.ImageHandle, 'UserData'));
case '::::mnucb_Prefences'
	imuiPref
case '::::mnucb_Rename'
	prompt = sprintf( 'Enter new name :\n');
	newname = inputdlg(prompt, 'Rename image', 1, {ud.ImageTitle});
	if ~isempty(newname)
		ud.ImageTitle = char(newname);
		UpdateGUIState(ud)
	end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% EDIT menu callbacks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::mnucb_Fade'
	CX = imuifade(ud);
	if ~isempty(CX)
		imui('::::UpdateImage', CX)
	end
case '::::mnucb_History_ChildCbFCN'
	set(allchild(ud.MenuHandles.History), 'Checked', 'off')
	set(gcbo, 'Checked', 'on')
	ud.HistoryIndex = get(gcbo, 'UserData');
	mnuHistoryData = ud.HistoryData(ud.HistoryIndex);

	LOADDATA = load(mnuHistoryData.FileName);
	set(ud.ImageHandle, 'UserData', LOADDATA.CX)
	DisplayFunction(ud.ImageHandle)
	ud.ImageType = ImageType(LOADDATA.CX);
	ud.ImageClass = class(LOADDATA.CX);
	UpdateGUIState(ud)
case '::::mnucb_Resize'
	CX = get(ud.ImageHandle, 'UserData');
	CX = imuiresize(CX);
	if CX ~= -1
		imui('::::UpdateImage', CX)
	end
case '::::mnucb_Crop'
	DisableAllMenus(ud)
	set(ud.FigureHandle, 'Name', ...
			'IMUI - Crop : click and drag.')
	rect = getrect(ud.FigureHandle);
	CX = get(ud.ImageHandle, 'UserData');
	imui('::::UpdateImage', imcrop(CX, rect));
	EnableAllMenus(ud)

case '::::mnucb_FlipVertical'
	CX = get(ud.ImageHandle, 'UserData');
	if strcmp(ud.ImageType, 'RGB')
		imui('::::UpdateImage', ...
			cat(3, ...
			flipud(CX(:,:,1)), flipud(CX(:,:,2)), flipud(CX(:,:,3)) ) )
	else
		imui('::::UpdateImage', flipud(CX))
	end
case '::::mnucb_FlipHorizontal'
	CX = get(ud.ImageHandle, 'UserData');
	if strcmp(ud.ImageType, 'RGB')
		imui('::::UpdateImage', ...
			cat(3, ...
			fliplr(CX(:,:,1)), fliplr(CX(:,:,2)), fliplr(CX(:,:,3)) ) )
	else
		imui('::::UpdateImage', fliplr(CX))
	end
case '::::mnucb_Rotate_180'
	CX = get(ud.ImageHandle, 'UserData');
	if strcmp(ud.ImageType, 'RGB')
		imui('::::UpdateImage', ...
			cat(3, ...
			rot90(CX(:,:,1), 2), rot90(CX(:,:,2), 2), rot90(CX(:,:,3), 2) ) )
	else
		imui('::::UpdateImage', rot90(CX, 2))
	end
case '::::mnucb_Rotate_90L'
	CX = get(ud.ImageHandle, 'UserData');
	if strcmp(ud.ImageType, 'RGB')
		imui('::::UpdateImage', ...
			cat(3, ...
			rot90(CX(:,:,1)), rot90(CX(:,:,2)), rot90(CX(:,:,3)) ) )
	else
		imui('::::UpdateImage', rot90(CX))
	end
case '::::mnucb_Rotate_90R'
	CX = get(ud.ImageHandle, 'UserData');
	if strcmp(ud.ImageType, 'RGB')
		imui('::::UpdateImage', ...
			cat(3, ...
			rot90(CX(:,:,1), 3), rot90(CX(:,:,2), 3), rot90(CX(:,:,3), 3) ) )
	else
		imui('::::UpdateImage', rot90(CX, 3))
	end
case '::::mnucb_Rotate_N'
	prompt = {sprintf('Enter rotate angle(clockwise, in degree) :\n')};
	default = {'0'};
	dlgtitle = 'Rotate image';
	answer = inputdlg(prompt, dlgtitle, 1, default);
	if ~isempty(answer)
		if all(size(str2num(answer{1}))== [1 1])
			h = waitfig('Rotating');
			CX = get(ud.ImageHandle, 'UserData');
			imui('::::UpdateImage', ...
				imrotate(CX, -str2num(answer{1}), ud.DefaultOversampleMethod) )
			delete(h)
		else
			prompt = sprintf(['\\bf', answer{1} , '\\rm is not a angle. \n']);
			h = errordlg(prompt, 'IMUI', ...
				struct('Interpreter', 'tex', 'WindowStyle', 'modal') );
		end
	end
case '::::mnucb_Split_RGB'
	CX = get(ud.ImageHandle, 'UserData');
	imui(CX(:, :, 1), [ud.ImageTitle, ': R Channel'])
	imui(CX(:, :, 2), [ud.ImageTitle, ': G Channel'])
	imui(CX(:, :, 3), [ud.ImageTitle, ': B Channel'])
case '::::mnucb_Split_HSV'
	h = waitfig('Converting to H-S-V image');
	CX = rgb2hsv(get(ud.ImageHandle, 'UserData'));
	delete(h);
	imui(CX(:, :, 1), [ud.ImageTitle, ': H Channel'])
	imui(CX(:, :, 2), [ud.ImageTitle, ': S Channel'])
	imui(CX(:, :, 3), [ud.ImageTitle, ': V Channel'])
case '::::mnucb_Split_YCbCr'
	h = waitfig('Converting to Y-Cb-Cr image');
	CX = rgb2ycbcr(get(ud.ImageHandle, 'UserData'));
	delete(h);
	imui(CX(:, :, 1), [ud.ImageTitle, ': Y Channel'])
	imui(CX(:, :, 2), [ud.ImageTitle, ': Cb Channel'])
	imui(CX(:, :, 3), [ud.ImageTitle, ': Cr Channel'])
case '::::mnucb_Merge'
	imuimerge( getImuiFigureHandles )
case '::::mnucb_ToBinary'
	h = waitfig('Converting to Binary image');
	CX = get(ud.ImageHandle, 'UserData');
	imui('::::UpdateImage', im2bw(CX, 0.5))
	delete(h)
case '::::mnucb_ToGray'
	h = waitfig('Converting to Grayscale image');
	switch ud.ImageType
	case 'RGB'
		CX = get(ud.ImageHandle, 'UserData');
		imui('::::UpdateImage', rgb2gray(CX))
	case 'Binary'
		CX = get(ud.ImageHandle, 'UserData');
		imui('::::UpdateImage', ind2gray(CX, [1e-6 1e-6 1e-6; 1 1 1]) )
	end
	delete(h)
case '::::mnucb_ToRGB'
	h = waitfig('Converting to RGB Color image');
	switch ud.ImageType
	case 'Gray'
		CX = get(ud.ImageHandle, 'UserData');
		imui('::::UpdateImage', cat(3, CX, CX, CX) )
	case 'Binary'
		CX = get(ud.ImageHandle, 'UserData');
		CX = ind2gray(CX, [1e-6 1e-6 1e-6; 1 1 1]);
		imui('::::UpdateImage', cat(3, CX, CX, CX) )
	end
	delete(h)
case '::::mnucb_ToUINT8'
	h = waitfig('Converting to UINT8');
	imui('::::UpdateImage',  ...
			im2uint8(get(ud.ImageHandle, 'UserData')) )
	delete(h)
case '::::mnucb_ToUINT16'
	h = waitfig('Converting to UINT16');
	imui('::::UpdateImage',  ...
			im2uint16(get(ud.ImageHandle, 'UserData')) )
	delete(h)
case '::::mnucb_ToDOUBLE'
	h = waitfig('Converting to DOUBLE');
	imui('::::UpdateImage',  ...
			im2double(get(ud.ImageHandle, 'UserData')) )
	delete(h)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% ANALYZE menu callbacks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::mnucb_FFT2' % Fourier Transform
	h = waitfig('Computing FFT');
	CX = get(ud.ImageHandle, 'UserData');
	CX = log(abs( fftshift(fft2(CX)) ));
	CX = CX./max(max(CX));
	figure
	imshow(CX)
	colormap(jet)
	colorbar
	delete(h)
case '::::mnucb_DCT'
	h = waitfig('Computing DCT');
	CX = get(ud.ImageHandle, 'UserData');
    figure
    imshow(log(abs(dct2(CX))),[])
    colormap(jet)
    colorbar
	delete(h)
case '::::mnucb_impixel' % ColorPicker
	DisableAllMenus(ud)
	set(ud.FigureHandle, 'Name', ...
			'IMUI - Color picker : click on point(s) and press ENTER.')
	[c, r, P] = impixel;
	if ~isempty(P)
		liststr{1} = '    X     Y        Red  Green   Blue';
		liststr{2} = '--------------------------------------';
		switch ud.ImageClass
		case 'uint8'
			P = double(P);
		case 'uint16'
			P = double(P) ./ 255;
		case 'double'
			P = P * 255;
		end
		P = round(P);
		for i = 1 : length(r)
			liststr{i + 2} = [blanks(0), ...
			sprintf('[%4d, ', c(i)), blanks(0), ...
			sprintf('%4d]', r(i)), blanks(6) ...
			sprintf('[%3d,   %3d,   %3d]', P(i, :)) ...
			];
		end
		hfig = dialog( ...
			'Position',			[0 0 300 250], ...
			'Name',				'Color picker', ...
			'HandleVisibility', 'on', ...
			'WindowStyle',		'modal', ...
			'Visible',			'off');
		hcolor = uicontrol( ...
			'Style',			'text', ...
			'Units',			'pixel', ...
			'Position',			[25 10 250 16], ...
			'String',			'Sample color' ...
			);
		hlst = uicontrol( ...
			'Style',			'listbox', ...
			'Units',			'pixel', ...
			'Position',			[0 35 300 215], ...
			'BackgroundColor',	'w', ...
			'FontName',			'Courier New', ...
			'FontSize',			9, ...
			'String',			liststr, ...
			'UserData',			P ./ 255, ...
			'Callback',			'imui(''::::cb_ColorPicker'')' ...
			);
		movegui(hfig, 'center')
		set(hfig, ...
			'Visible', 			'on', ...
			'UserData',			hcolor)
	end
	EnableAllMenus(ud)
case '::::cb_ColorPicker'
	id = get(gcbo, 'Value');
	if id > 2
		clr = get(gcbo, 'UserData');
		set(get(gcf, 'UserData'), ...
			'BackgroundColor', 		clr(id - 2, :), ...
			'ForegroundColor',		1 - clr(id - 2, :))
	else
		set(get(gcf, 'UserData'), ...
			'BackgroundColor', 		get(0, 'DefaultUIControlBackgroundColor'), ...
			'ForegroundColor',		'k')
	end

case '::::mnucb_improfile'
	DisableAllMenus(ud)
	set(ud.FigureHandle, 'Name', ...
			'IMUI - Profile : drag lines and press ENTER')
	try
		improfile(ud.DefaultOversampleMethod)
	end
	EnableAllMenus(ud)
case '::::mnucb_Contour'
	CX = get(ud.ImageHandle, 'UserData');
	h = waitfig('Drawing contours, this make take a little while.');
	if isrgb(CX)
		CX = rgb2gray(CX);
	end
	h2 = figure('Visible', 'off');
	imcontour(CX);
	set(h2, 'Visible', 'on')
	delete(h);
case '::::mnucb_Histogram'
	imuihist(get(ud.ImageHandle, 'UserData'))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% ADJUST menu callbacks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case '::::mnucb_Invert'
	h = waitfig('Inverting');
	imui('::::UpdateImage', ...
		imcomplement(get(ud.ImageHandle, 'UserData')));
	delete(h)
case '::::mnucb_Equalize'
	h = waitfig('Equalizing');
	imui('::::UpdateImage', ...
		histeq(get(ud.ImageHandle, 'UserData')));
	delete(h)
case '::::mnucb_AutoLevels'
	h = waitfig('Applying Auto Levels');
	CX = get(ud.ImageHandle, 'UserData');
	imui('::::UpdateImage', ...
		imadjust( CX, stretchlim(CX) ) );
	delete(h)
case '::::mnucb_Threshold'
	CX = get(ud.ImageHandle, 'UserData');
	CX = imuifilter(CX, @imuithreshold);
	if CX ~= -1
		imui('::::UpdateImage',  CX)
	end
case '::::mnucb_BC'
	CX = get(ud.ImageHandle, 'UserData');
	CX = imuibc(CX);
	if CX ~= -1
		imui('::::UpdateImage',  CX)
	end
case '::::mnucb_Levels'
	CX = get(ud.ImageHandle, 'UserData');
	CX = imuilevels(CX);
	if CX ~= -1
		imui('::::UpdateImage',  CX)
	end
case '::::mnucb_Curves'
	CX = get(ud.ImageHandle, 'UserData');
	CX = imuicurves(CX);
	if CX ~= -1
		imui('::::UpdateImage',  CX)
	end
case '::::mnucb_HS'
	CX = get(ud.ImageHandle, 'UserData');
	CX = imuihs(CX);
	if CX ~= -1
		imui('::::UpdateImage',  CX)
	end
case '::::mnucb_ColorBalance'
	CX = get(ud.ImageHandle, 'UserData');
	CX = imuicbalance(CX);
	if CX ~= -1

⌨️ 快捷键说明

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