ZIGZAG扫描和行程编码算法和原理
zigzag扫描如上图,行程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。行程编码因此而得名),使符号长度少于原始数据的长度。 例如:5555557777733322221llllll行程编码为:(5,6)(7,5)(3,3)(2,4)(l,7)。可见,行程编码的位数远远少于原始字符串的位数。
请问怎么用matlab实现一个zigzag数组
你好!我设置了一个zigzag函数,为你解答。函数程序:function a=zigzag(n,nstart,option)a=zeros(n,n);if(option==1) for i=1:n*n for j=1:n for k=1:n if(j+k<=n+1) if(mod(j+k,2)==0) s=j+k-2; a(j,k)=(1+s)*s/2+j; else s=j+k-2; a(j,k)=(1+s)*s/2+k; end else if(mod(j+k-n-1,2)==0) m=j+k-n-1; s=((n-1)+(n-m))*m/2; a(j,k)=(1+n)*n/2+s-(n-j); else m=j+k-n-1; s=((n-1)+(n-m))*m/2; a(j,k)=(1+n)*n/2+s-(n-k); end end end end endelse for i=1:n*n for j=1:n for k=1:n if(j+k<=n+1) if(mod(j+k,2)==0) s=j+k-2; a(j,k)=(1+s)*s/2+k; else s=j+k-2; a(j,k)=(1+s)*s/2+j; end else if(mod(j+k-n-1,2)~=0) m=j+k-n-1; s=((n-1)+(n-m))*m/2; a(j,k)=(1+n)*n/2+s-(n-j); else m=j+k-n-1; s=((n-1)+(n-m))*m/2; a(j,k)=(1+n)*n/2+s-(n-k); end end end end endenda=a+nstart-1;end我的一个例子,主函数程序:clc;clear alln=8;%n乘nnstart=0;%左上角从0开始option=0;%option=0从行开始,option=1从列开始a=zigzag(n,nstart,option);disp(a)结果: 0 1 5 6 14 15 27 28 2 4 7 13 16 26 29 36 3 8 12 17 25 30 37 48 9 11 18 24 31 38 47 49 10 19 23 32 39 46 50 57 20 22 33 40 45 51 56 58 21 34 41 44 52 55 59 62 35 42 43 53 54 60 61 63>>希望帮到你!