📄 distancetransform_c.c
字号:
#define MAX_INT 255 // Max int set for use in the mask
DistanceTransform_C(const unsigned char indata[], unsigned char outdata[],int width, int height )
{
/* initialize local variables */
int weight[3]; // weights for different maps
int i, j,minP;
weight[0] = 3;
weight[1] = 4;
weight[2] = MAX_INT;
//initialize dest
for(i=0; i<height; i++){
for( j=0; j<width; j++){
(outdata[((i)*width)+(j)]) = (indata[((i)*width)+(j)]);
}
} // end for loop
//Forward Scan
for(i=2; i<height ; i++){
for( j=2; j<width-2 ;j++){
minP = outdata[((i-1)*width)+(j-1)] + weight[1];
minP = _min2(minP, outdata[((i-1)*width)+(j)] + weight[0]);
minP = _min2(minP, outdata[((i-1)*width)+(j+1)] + weight[1]);
minP = _min2(minP, outdata[((i)*width)+(j-1)] + weight[0]);
minP = _min2(minP, outdata[((i)*width)+(j)]);
minP = _min2(minP, outdata[((i-1)*width)+(j-2)] + weight[2]);
minP = _min2(minP, outdata[((i-1)*width)+(j+2)] + weight[2]);
minP = _min2(minP, outdata[((i-2)*width)+(j-1)] + weight[2]);
minP = _min2(minP, outdata[((i-2)*width)+(j+1)] + weight[2]);
outdata[((i)*width)+(j)] = (unsigned char)minP;
}
} // end for loop forward scan
//Backward Scan
for(i=(height-3); i>-1 ; i--){
for( j=(width-3); j>1 ;j--){
minP = outdata[((i+1)*width)+(j-1)] + weight[1];
minP = _min2(minP, outdata[((i+1)*width)+(j)] + weight[0]);
minP = _min2(minP, outdata[((i+1)*width)+(j+1)] + weight[1]);
minP = _min2(minP, outdata[((i)*width)+(j+1)] + weight[0]);
minP = _min2(minP, outdata[((i)*width)+(j)]);
minP = _min2(minP, outdata[((i+1)*width)+(j-2)] + weight[2]);
minP = _min2(minP, outdata[((i+1)*width)+(j+2)] + weight[2]);
minP = _min2(minP, outdata[((i+2)*width)+(j-1)] + weight[2]);
minP = _min2(minP, outdata[((i+2)*width)+(j+1)] + weight[2]);
outdata[(i*width)+(j)] = (unsigned char)minP;
}
} // end for loop backward scan
//Clamp at 255 since output is 8 bit
for(i=0; i<height; i++){
for(j=0; j<width ;j++){
outdata[(i)*width+j] = _min2(outdata[(i)*width+j], 255);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -