⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 distancetransform_c.c

📁 基于VPM642的距离变换程序
💻 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 + -