matlab zigzag算法,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
(hunnish)
總結
以上是生活随笔為你收集整理的matlab zigzag算法,ZIGZAG扫描的MATLAB实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样用计算机记账,仓管员怎么用电脑记账?
- 下一篇: java文件学生_文件存储学生信息(Ja