四叉树编码

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四叉树编码
一、 原理
四叉树编码的基本思想是:首先将把一副图像或栅格地图(2������ ∗ 2������,k>1,不足则 补网)等分成四个一级字块,顺序为左上,右上,左下,右下;然后逐块检查其 中所有格网属性值(或灰度值),若相同,则该字块不再分;若不同,则将该子 块进一步分成四个二级子块;如此递归地分割,直到每个子块的属性或灰度均相 等为止。
float aa[64]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1};
Qutree(8,0,aa); return 0;
}
参考资料:地理信息系统原理与算法(吴立新,史文中编著)
二、 实现
本程序实现将一个(2������ ∗ 2������,k>1,不足则补网)数组(一维数组表示),打印 出每个字块的等级和值。
//实现四叉树编码
#include"stdio.h" void Qutree(int arysize,int level,float curary[] )//arysize 表示矩阵长度,level 表示等级,curary[]表示当前矩阵 {
ary2[i*arysize+j]=curary[i*(arysize*2)+(arysize+j)]; //左下
ary3[i*arysize+j]=curary[(arysize+i)*(arysize*2)+j]; //右下
ary4[i*arysize+j]=curary[(arysize+i)*(arysize*2)+(arysize+j)]; }
else
{ arysize/=2; float *ary1=new float[arysize*arysize]; float *ary2=new float[arysize*arysize]; float *ary3=new float[arysize*arysize]; float *ary4=new float[arysize*arysize]; for(i=0;i<arysize;i++) { for(int j=0;j<arysize;j++) { //左上 ary1[i*arysize+j]=curary[i*(arysize*2)+j]; //右上
}
level++; Qutree(arysize,level,ary1); Qutree(arysize,level,ary2); Qutree(arysize,level,ary3); Qutree(arysize,level,ary4);
}
} int main(Leabharlann Baidu {
//float aa[16]={1,1,2,2,1,1,3,3,4,2,1,2,3,4,3,4}; //Qutree(4,0,aa);
float fi=curary[0]; int i; //遍历当前数组,是否同构 for(i=0;i<=arysize*arysize-1;i++) {
if(fi!=curary[i]) {
break; }
} if(i==arysize*arysize) {
printf("%d,%f",level,fi); printf("\n"); return; }
相关文档
最新文档