📄 zigzag.m
字号:
function b=zigzag(a)
% 这是参照 University of California 提供的 MPEG 源代码的基础上编制的。
%用分块方法(8x8的块)对图象做zigzag变换,
%效率极高,程序简洁,属信息隐藏中常用的方法之一。
%作者:辽宁大学 信息学院 范铁生
%email:fts0@163.com
[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
% zig zag order. 下标从零开始,因为是从MPEG的C代码拷贝过来的
zigzag = [ 0, 1, 8, 16, 9, 2, 3, 10, ...
17, 24, 32, 25, 18, 11, 4, 5, ...
12, 19, 26, 33, 40, 48, 41, 34, ...
27, 20, 13, 6, 7, 14, 21, 28, ...
35, 42, 49, 56, 57, 50, 43, 36, ...
29, 22, 15, 23, 30, 37, 44, 51, ...
58, 59, 52, 45, 38, 31, 39, 46, ...
53, 60, 61, 54, 47, 55, 62, 63];
zigzag = zigzag + 1; % 下标加1,符合MATLAB的下标习惯
aa = reshape(a,1,64); % 将输入块变成1x64的向量
b = aa(zigzag); % 对 aa 按照查表方式取元素,得到 zig-zag 扫描结果
%实验结果:a=[ 0, 1, 5, 6, 14, 15, 27, 28; ...
% 2, 4, 7, 13, 16, 26,29, 42; ...
% 3, 8, 12, 17, 25, 30, 41, 43; ...
% 9, 11, 18, 24, 31, 40, 44, 53; ...
% 10, 19, 23, 32, 39, 45, 52, 54; ...
% 20, 22, 33, 38, 46, 51, 55, 60; ...
% 21, 34, 37, 47, 50, 56, 59, 61; ...
% 35, 36, 48, 49, 57, 58, 62, 63];
% b=zigzag(a)
%%b =
%Columns 1 through 15
% 0 2 1 5 4 3 9 8 7 6 14 13 12 11 10
%Columns 16 through 30
% 20 19 18 17 16 15 27 26 25 24 23 22 21 35 34
% Columns 31 through 45
%33 32 31 30 29 28 42 41 40 39 38 37 36 48 47
%Columns 46 through 60
% 46 45 44 43 53 52 51 50 49 57 56 55 54 60 59
%Columns 61 through 64
%58 62 61 63
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -