z型编码
z型编码在图像处理中是十分重要的,进而突出学习其思想的重要性。该篇旨在讨论其思想,实现其效果,在算法的效率上没有过多的考虑。
其思想过程如下所示:
z字形编排程序:
0 1 2 3 4
8 9 10 12 13 z编排
17 18 19 20 21 -----------> 0->1->8->17->9->2->3->10->18->25->33->26->19->12->4->13
25 26 27 28 29 ->20->27->34->35->28->21->29->36->37
33 34 35 36 37
对于目标矩阵 matrix[i][j]:
1、 j为偶数,且i = 0 或者 i = 7,则水平相右移一格
2、 数组i为奇数,且j = 0或者 j = 7,则向下移一格
3、 i + j为偶数时,则右上移一格,反之,则左下移一格
源代码:
#include <iostream>
#include <cstdio>
#include <iomanip>using namespace std;
const int SIZE = 8;int main(void){int matrix[SIZE][SIZE] = {0};int result[SIZE][SIZE] = {0};int i,j;int *p;p = &matrix[0][0];for(i = 0;i < SIZE*SIZE;i ++)*p++ = i;cout<<"init array:"<<endl;for(i = 0;i < SIZE;i ++){cout<<" ";for(j = 0;j < SIZE;j ++){cout<<setw(4)<<*(*(matrix + i) + j);}cout<<endl;}i = j = 0;for(int x = 0;x < SIZE;x ++)for(int y = 0;y < SIZE;y ++){*(*(result + x) + y) = *(*(matrix + i) + j);if(j%2 == 0 && (i == 0||i == 7))// matrix[i][j]数组j为偶数,且i = 0 或者 i = 7,则水平相右移一格 {j ++;continue;}if(i%2 != 0 && (j == 0||j == 7))//matrix[i][j]数组i为奇数,且j = 0或者 j = 7,则向下移一格 {i ++;continue;}else if((i + j) % 2 == 0)//matrix[i][j]数组i + j为偶数时,则右上移一格,反之,则左下移一格 {i --;j ++;continue;}else{i ++;j --;continue;}}cout<<endl<<"after zigzag arragement:"<<endl;for(i = 0;i < SIZE;i ++){cout<<" ";for(j = 0;j < SIZE;j ++)cout<<setw(4)<<*(*(result + i) + j);cout<<endl;}return 0;
}
更多推荐
z型编码
发布评论