⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zigzag.m

📁 % 这是参照 University of California 提供的 MPEG 源代码的基础上编制的。 %用分块方法(8x8的块)对图象做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 + -