大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
转自阿须数码,用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); % 将输入块变成1×64的向量
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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/198606.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...