2014-10-06 2 views
0

Каков наилучший способ хранения кода Хаффмана в 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)], хранящемся на диске?

ответ

1

Пара вещей. Во-первых, вы пытаетесь создать большую сумму данных. 20 - очень мало, чтобы увидеть какую-либо разницу (но вы увидите это).

В таком случае проблема заключается в типе данных. Если вы посмотрите на переменную с именем comp, то вывод кодировки Хаффмана, содержащий только 0 и 1, является двоичным. Однако в Matlab вы храните его как double, поэтому используйте 32 бита для описания 1 бит.

попробовать, перед сохранением, это:

comp=logical(comp); 

Это должно сделать трюк;)

+0

thank.How я могу найти сохранить метод сжатия изображения JPEG. – omid

+0

мм Пожалуйста, можете ли вы переформулировать этот вопрос? Я не понимаю, извините. Вы имеете в виду просто сохранить его? то вам не нужно ничего менять в коде, просто конвертируйте переменную comp в логическую, чтобы сохранить память (обратите внимание, что у сохраненных архивов есть заголовок, который может заставить их казаться больше. Если вы хотите увидеть большую разницу, вы должны создать sig 500x500 или около того) –