zigzag扫描matlab,ZIGZAG扫描的MATLAB实现 | 学步园

转自阿须数码,用MATLAB实现MPEG中的 ZIG-ZAG 扫描。觉得有点研究价值,实现的方法也很巧妙。

下面给一个参照MPEG提供的方法:

===

function b=zigzag(a)

% 这是参照 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

% 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=magic(8)

a =

64     2     3    61    60     6     7    57

9    55    54    12    13    51    50    16

17    47    46    20    21    43    42    24

40    26    27    37    36    30    31    33

32    34    35    29    28    38    39    25

41    23    22    44    45    19    18    48

49    15    14    52    53    11    10    56

8    58    59     5     4    62    63     1

?b=zigzag(a)

b =

Columns 1 through 12

64     9     2     3    55    17    40    47    54    61    60    12

Columns 13 through 24

46    26    32    41    34    27    20    13     6     7    51    21

Columns 25 through 36

37    35    23    49     8    15    22    29    36    43    50    57

Columns 37 through 48

16    42    30    28    44    14    58    59    52    45    38    31

Columns 49 through 60

24    33    39    19    53     5     4    11    18    25    48    10

Columns 61 through 64

62    63    56     1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值