huffdecode.m
上传用户:hwtw888
上传日期:2016-03-15
资源大小:177k
文件大小:1k
源码类别:

压缩解压

开发平台:

Matlab

  1. function vector = huffdecode(zipped, info, image)
  2. % 函数对输入矩阵vector进行Huffman解码,返回解压后的图像数据
  3. if ~isa(zipped, 'uint8')
  4.     error('input argument must be be a uint8 vector');
  5. end
  6. %产生0,1序列,每位占一个字节
  7. len = length(zipped);
  8. string = repmat(uint8(0), 1, len.*8);
  9. bitindex = 1:8;
  10. for index = 1:len
  11.     string(bitindex + 8.*(index-1)) = uint8(bitget(zipped(index), bitindex));
  12. end
  13. string = logical(string(:)');
  14. len = length(string);
  15. string ((len-info.pad+1):end)=[];
  16. len = length(string);
  17. %开始解码
  18. weights = 2.^(0:51);
  19. vector = repmat(uint8(0), 1, info.length);
  20. vectorindex = 1;
  21. codeindex = 1;
  22. code = 0;
  23. for index = 1:len
  24.     code = bitset(code, codeindex, string(index));
  25.     codeindex = codeindex+1;
  26.     byte = decode(bitset(code, codeindex), info);
  27.     if byte > 0
  28.         vector(vectorindex) = byte-1;
  29.         codeindex = 1;
  30.         code = 0;
  31.         vectorindex = vectorindex + 1;
  32.     end
  33. end
  34. vector = reshape(vector, info.rows, info.cols);
  35. %函数decode返回码字对应的符号
  36. function byte = decode(code, info)
  37. byte = info.huffcodes(code);