使用matlab的霍夫曼代码生成器

时间:2017-02-22 15:31:47

标签: matlab recursion huffman-code

我制作了一个霍夫曼代码生成器(没有matlab自动命令),但是我在阅读结果时遇到了问题。

基本上我构建了一个接收(vec)gray_levels和(vec)histogram的函数, 并从中生成每个灰度值的概率向量。 然后我建造了一个霍夫曼树(这似乎是正确的根是1的概率)。

我的任务是创建一个矩阵(rows = hist rows,col =最长代码字的数量+ 1),似乎我得到了双倍的值。

我得到的最长码字是20位长(它应该是9-10),我认为它不是一个可能的值。

有没有人知道代码有什么问题?

我在树上使用简单的递归函数来提取最长的代码字, 和另一个递归函数,为树中的每个节点生成代码。

非常感谢! 问的代码:

    function [ codeMat ] = Huffman( gray_levels,hist )

    [entropy,probs]=Entropy(gray_levels,hist); 
    leaves=leaf.empty(decideSize(probs),0);
    j=1;
    for i=1:size(probs,1)
    if(probs(i)~=1) 
    leaves(j).prob=probs(i);
    leaves(j).index=i;
    j=j+1;
    end
    end
    temp=leaves;
    while size(temp,2)>1
    temp=sortAscendByProb(temp);
    node=leaf;
    node.prob=temp(1).prob+temp(2).prob;
    temp(1).code='0';
    temp(2).code='1';
       node.left=temp(1);
       node.right=temp(2);
       temp=temp(3:size(temp,2));
       temp=[node temp];
        end

     root=temp(1);
    codec='';

    longestCodeLen=FindLongestWord(root);
    codeMat=zeros(numel(hist),longestCodeLen+1);
    for i=1:size(codeMat,1)
     codeMat(i,:)=2;
     end

     codeMat=loop(root,codec,codeMat);
     end

0 个答案:

没有答案