MATLAB 實現zigzag掃描(z字形掃描)

今天在做多媒體作業的時候需要實現JPEG壓縮,其中一步就是將量化後的塊做zigzag掃描。我在網上找了很久,發現反覆流傳的就一份MATLAB代碼,無奈這份代碼跑起來結果和我預料的不一致,於是進行了修改,下面是修改後的代碼。

function b=zigzag(a)
% 輸入是一個8*8的矩陣,輸出一個1*64的矩陣(行向量)
% 這是參照 University of California 提供的 MPEG 源代碼的基礎上編制的。
% Copyright (c) 1995 The Regents of the University of California.

[n,m]=size(a);
if(n~=8 && m~=8)
error('Input array is NOT 8-by-8');
end

% Set up array for fast conversion from row/column coordinates to
zigzag=[1 2 9 17 10 3 4 11
        18 25 33 26 19 12 5 6
        13 20 27 34 41 49 42 35 
        28 21 14 7 8 15 22 29
        36 43 50 57 58 51 44 37
        30 23 16 24 31 38 45 52
        59 60 53 46 39 32 40 47
        54 61 62 55 48 56 63 64];

aa = reshape(a',1,64); % 將輸入塊變成1x64的向量
zigzagR = reshape(zigzag',1,64);
b = aa(zigzagR); % 對 aa 按照查表方式取元素,得到 zig-zag 掃描結果
end

驗證結果如圖:
在這裏插入圖片描述
然後下圖是手寫推理驗證:
在這裏插入圖片描述
希望能對大家有所幫助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章