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

📄 lzw2norm.m

📁 lzw压缩(matlab源程序)欢迎大家下载 里面有实例
💻 M
字号:
function [output,table] = lzw2norm(vector)%LZW2NORM   LZW Data Compression (decoder)%   For vectors, LZW2NORM(X) is the uncompressed vector of X using the LZW algorithm.%   [...,T] = LZW2NORM(X) returns also the table that the algorithm produces.%%   For matrices, X(:) is used as input.%%   Input must be of uint16 type, while the output is a uint8.%   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 NORM2LZW%   $Author: Giuseppe Ridino' $%   $Revision: 1.0 $  $Date: 10-May-2004 14:16:08 $% How it decodes:%% Read OLD_CODE% output OLD_CODE% CHARACTER = OLD_CODE% WHILE there are still input characters DO%     Read NEW_CODE%     IF NEW_CODE is not in the translation table THEN%         STRING = get translation of OLD_CODE%         STRING = STRING+CHARACTER%     ELSE%         STRING = get translation of NEW_CODE%     END of IF%     output STRING%     CHARACTER = first character in STRING%     add translation of OLD_CODE + CHARACTER to the translation table%     OLD_CODE = NEW_CODE% END of WHILE% ensure to handle uint8 input vectorif ~isa(vector,'uint16'),	error('input argument must be a uint16 vector')end% vector as a rowvector = 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 = uint8([]);code = vector(1);output(end+1) = code;character = code;for index=2:length(vector),	element = vector(index);	if (double(element)+1)>length(table),		% add it to the table		string = table{double(code)+1};		string = [string character];	else,		string = table{double(element)+1};	end	output = [output string];	character = string(1);	[table,code] = addcode(table,[table{double(code)+1} character]);	code = element;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 + -