Exemple #1
0
template <class T1, class T2> void dt3d_binary(T1 *indata, T2 *outdata, long int * label, const long int *sz, unsigned char tag) 
{
	long int len = sz[0]*sz[1]*sz[2];
	long int i;
	
	float *tmpdata = new float [len];
	
	for (i=0; i<len; i++)
	{
		
		tmpdata[i] = (float)indata[i];
		
		if (tag ==0)
			if (tmpdata[i]>0)
				tmpdata[i] = 0;
			else
				tmpdata[i] = INF;
		else
			if (tmpdata[i]>0)
				tmpdata[i] = INF;
			else
				tmpdata[i] = 0;
	}
	
	dt3d(tmpdata, label, sz);
	
	for (i=0; i<len; i++)
		outdata[i] = (T2)tmpdata[i];
	
	if (tmpdata) {delete [] tmpdata; tmpdata =0;}
	
}
void dt3d_binary(float *data, long int * label, const long int *sz, unsigned char tag) 
{
  long int i,j,k;
  float *ptr;
  long int tmp_k, tmp_j;
  long int sz10 = sz[0]*sz[1];
	
  for  (k = 0; k < sz[2]; k++) 
    {
      tmp_k = k*sz10;
      for (j = 0; j < sz[1]; j++)
	{
	  tmp_j = j*sz[0];
			
	  for (i = 0; i < sz[0]; i++)
	    {
	      ptr = data + tmp_k + tmp_j + i;
				
	      if (tag == 0) //calculate the distance transform for zero value pixels
		if ( *ptr > 0 )
		  *ptr = 0;
		else
		  *ptr = FLOAT_INF;
	      else //calculate the distance transform for non-zero value pixels
		if ( *ptr > 0 )
		  *ptr = FLOAT_INF;
		else
		  *ptr = 0;

	    }
	}
    }
	
  dt3d(data, label, sz);
	
}