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