www.pudn.com > DistanceTransform(VC).rar > DistanceTransform.cpp


int  Distance(int x, int y, int Dx, int Dy)                 	//  距离变换 
{ 
	int  i, j, k, ii, jj, g, t, max; 
	short **list;                         	//  短整数数组的指针数组 
	BYTE  *lists; 
	int  Mask1[3][3]={{4,3,4},{3,0,0},{0,0,0}};        	//  前向处理模板 
	int  Mask2[3][3]={{0,0,0},{0,0,3},{4,3,4}};        	//  后向处理模板 
	 
	list=(short **) malloc(Dy*sizeof(short*));        	//  申请二维输入数组 
	for(i=0; i0; j--, k-=2) { 
			lists[k]=lists[j];    lists[k+1]=0;	//  每个像素得数据由一字节扩展为两字节 
		} 
	} 
	 
	for (i =1; i0; i--) {                             	//  后向扫描处理 
		for (j=Dx-2; j>0; j--) { 
			if (list[i][j]==0)  continue;	//  当前点等于0,不处理 
			g=3000; 	//  处理结果单元初始化 
			for (ii=2; ii>=0; ii--) {	//  自下而上 
				for (jj=2; jj>=0; jj--) {	//  自右至左 
					if (Mask2[ii][jj]==0)  break;	// 当前因子等于0,退出  
					t=list[i-1+ii][j-1+jj]+Mask2[ii][jj];        	//  计算距离 
					if (tg) list[i][j]= g;	//  取处理值与原结果中的较小者(为串行算法) 
		} 
	} 
	 
	max=0;	//  工作单元初始化后 
	for (i=0; imax)  max=list[i][j];              	//  寻找最大距离值 
		} 
	} 
	 
	for(i=0; i