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

📄 norm2lzw.m

📁 lzw压缩(matlab源程序)欢迎大家下载 里面有实例
💻 M
字号:
function [output,table] = norm2lzw(vector)%NORM2LZW   LZW Data Compression (encoder)%   For vectors, NORM2LZW(X) is the compressed vector of X using the LZW algorithm.%   [...,T] = NORM2LZW(X) returns also the table that the algorithm produces.%%   For matrices, X(:) is used as input.%%   Input must be of uint8 type, while the output is a uint16.%   Table is a cell array, each element containig the corresponding code.%%   This is an implementation of the algorithm presented in the article%   http://www.dogma.net/markn/articles/lzw/lzw.htm%%   See also LZW2NORM%   $Author: Giuseppe Ridino' $%   $Revision: 1.0 $  $Date: 10-May-2004 14:16:08 $% How it encodes:%% STRING = get input character% WHILE there are still input characters DO%     CHARACTER = get input character%     IF STRING+CHARACTER is in the string table then%         STRING = STRING+character%     ELSE%         output the code for STRING%         add STRING+CHARACTER to the string table%         STRING = CHARACTER%     END of IF% END of WHILE% output the code for STRING% ensure to handle uint8 input vectorif ~isa(vector,'uint8'),	error('input argument must be a uint8 vector')end% vector as uint16 rowvector = uint16(vector(:)');% initialize table (don't use cellstr because char(10) will be turned to empty!!!)table = cell(1,256);for index = 1:256,	table{index} = uint16(index-1);end% initialize outputoutput = vector;% main loopoutputindex = 1;startindex = 1;for index=2:length(vector),	element = vector(index);	substr = vector(startindex:(index-1));	code = getcodefor([substr element],table);	if isempty(code),		% add it to the table		output(outputindex) = getcodefor(substr,table);		[table,code] = addcode(table,[substr element]);		outputindex = outputindex+1;		startindex = index;	else,		% go on looping	endendsubstr = vector(startindex:index);output(outputindex) = getcodefor(substr,table);% remove not used positionsoutput((outputindex+1):end) = [];% ###############################################function code = getcodefor(substr,table)code = uint16([]);if length(substr)==1,	code = substr;else, % this is to skip the first 256 known positions	for index=257:length(table),		if isequal(substr,table{index}),			code = uint16(index-1);   % start from 0			break		end	endend% ###############################################function [table,code] = addcode(table,substr)code = length(table)+1;   % start from 1table{code} = substr;code = uint16(code-1);    % start from 0

⌨️ 快捷键说明

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