Untitled

 avatar
unknown
plain_text
2 years ago
1.5 kB
4
Indexable

encoder:

numRows=100;
numCols=100;
current_lastNZ=zeros(numRows,numCols);
lastNZ_bitstream=char(zeros(1,6e4));
outputBitStream=string(1,numRows*numCols);
for i=1:size(zigzagOrd,3)
    for j=1:size(zigzagOrd,4)
        current_block=zigzagOrd(:,:,i,j);
        current_lastNZ_tmp=find(current_block,1,'last');
         current_lastNZ(i,j)=1;
        if !(isempty(current_lastNZ_tmp))
            current_lastNZ(i,j)=current_lastNZ_tmp;
        end
        idx=sub2ind([100 100],[i],[j]);
        bitsOfLastNZ=dec2bin(current_lastNZ(i,j)-1,6);
        lastNZ_bitstream(1+6*(idx-1):6*idx)=bitsOfLastNZ;
        current_output_bitStream=golomb_enc(current_block(1:current_lastNZ(i,j)));
        outputBitStream(idx)=current_output_bitStream;
    end
end
outputBitStream=[outputBitStream bitsOfLastNZ];


Decoder:

lastNZ_string_bitstream=outputBitStream(end);
lastNZ_bitstream=convertStringsToChars(lastNZ_string_bitstream);
outputBitStream=outputBitStream(1:end-1);
zigzagOrd=zeros(1,64,100,100);
for i=1:numRows*numCols
    idxBegin=1;
    current_block=zeros(1,64);
    [row, col]= in2sub([100 100],i);
    output_bitStream=lastNZ_bitstream(1+6*(i-1):6*i);
    current_lastNZ=bin2dec(output_bitStream);
    for symb=1:current_lastNZ+1
        current_output_bitStream=char(outputBitStream(i));
        [current_symbol, idxBegin]=golomb_dec(current_output_bitStream,idxBegin);
        current_block(symbol)=current_symbol;
    end
    zigzagOrd(:,:,row,col)=current_block;
end


Editor is loading...