【问题标题】:How to store the Huffman codes with low volume in matlab?如何在matlab中存储少量的霍夫曼代码?
【发布时间】:2014-10-06 08:40:31
【问题描述】:

在 MATLAB 中存储霍夫曼代码的最佳方法是什么? 例如:

      letters = [1:6]; % Distinct symbols the data source can produce
      p = [.5 .125 .125 .125 .0625 .0625]; % Probability distribution

      [dict,avglen] = huffmandict(letters,p); % Get Huffman code.
      sig  = randsrc(1,20,[letters; p]) % Create data using p.
      comp = huffmanenco(sig,dict)  % Encode the data.

->    save('file.mat','comp','dict');
->    clear all;
->    load('file.mat');

      deco = huffmandeco(comp,dict) % Decode the encoded signal.

但保存功能不会以低容量存储数据。 我使用了 dlmwrite 功能,但存储量很大。 在其他技术中,例如 JPEG 图像中的 Huffman 代码,如何进行存储? 如您所知,霍夫曼代码用于 JPEG 图像压缩。 [imwrite(mat,'mat.jpeg')]中的霍夫曼编码如何存储在磁盘上?

【问题讨论】:

    标签: matlab image-processing huffman-code


    【解决方案1】:

    有几件事。首先,您应该尝试创建更大的数据量。 20 是一个非常小的数字,可以看出任何差异(但您会看到)。

    然后,问题是数据类型。如果您查看名为 comp 的变量,霍夫曼编码的输出,它只包含 0 和 1,是二进制的。但是,在 matlab 中,您将其存储为双精度,因此使用 32 位来描述 1 位。

    在保存之前尝试一下:

    comp=logical(comp);
    

    它应该可以解决问题;)

    【讨论】:

    • mm 请问,你能重新表述这个问题吗?我不明白,对不起。你的意思是直接保存?那么你不应该在代码中更改任何内容,只需将 comp 变量转换为逻辑就足以节省内存(请注意,保存的档案有一些标题可能会使它们看起来更大。如果你想看到一个很大的不同,你应该创建一个sig 500x500 左右)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多