viernes, 4 de noviembre de 2011

Funciones para codificación Huffman de las luminancias DC

Function escribirArchivo(pathCompleto,filas,columnas,datosSerializadosY,
datosSerializadosCb,datosSerializadosCr)

%Abrimos la imagen procesada
fid = fopen(pathCompleto,'w+');

%asiganmos variables
PIXELESY = filas;
PIXELESX = columnas;

%creamos una matriz de pixeles x e y
cabecera = [PIXELESY;PIXELESX];
fwrite(fid,cabecera,'uint16');

%Codifica la matriz de Luminancias
escribirHuffmanRLEY(datosSerializadosY,fid);
escribirHuffmanRLEC(datosSerializadosCb,fid);
escribirHuffmanRLEC(datosSerializadosCr,fid);
fclose(fid)


function escribirHuffmanRLEY(datosSerializadosY,fid)
bloques=numel(datosSerializadosY)/64;
for i=1:bloques
    % Codifica y escribe el DC de Luminancia
    palabra16bits=buffer(codificarHuffmanRLEDCY(datosSerializadosY(i*64-63)));
    if numel(palabra16bits) > 0; escribirBytes(palabra16bits,fid); end
end

function palabras16bits = codificarHuffmanRLEDCY(numDC)
negativo=numDC<0;
bitsDC=bitget(uint8(abs(numDC)),8:-1:1);
unos=find(bitsDC);
if numel(unos)>0
    categoria=9-unos(1);
else
    categoria=0;
end
palabras16bits = colocarBits(codeWordDCY(categoria + 1),longDCY(categoria + 1),0);
palabras16bits = [palabras16bits colocarBits(dec2bin(uint8(abs(numDC))),categoria,negativo)];

No hay comentarios:

Publicar un comentario