Exemplo n.º 1
0
void pnlRand(int numElem, int* vec, int left, int right)
{
    int myid = PAR_OMP_NUM_CURR_THREAD;
   
    //set distribution type
    g_RNG[myid].m_cxRandState.disttype = CX_RAND_UNI;
    //set range
    cxRandSetRange( &g_RNG[myid].m_cxRandState, left, right, -1 );
    
    //create matrix wrapper for 1 floating point value
    float *array = new float[numElem];
    CxMat mat = cxMat( 1, numElem, CX_32FC1, array );
    
    //generate value
    cxRand( &g_RNG[myid].m_cxRandState, &mat );
   
    double ip;
    double x1;

    int i = 0;
    for( i = 0; i < numElem; ++i )
    {
	ip = modf(array[i], &x1);
	vec[i] =  (int)(x1 >= 0 ? ( ip > 0.5 ? ++x1 : x1 ) : ( ip > -0.5 ? --x1 : x1 )); 

    }
    delete []array;
    
}
Exemplo n.º 2
0
PNL_END
#endif

PNL_BEGIN

void pnlRandNormal(floatVector* vls, floatVector &mean, floatVector &sigma )
{
    int myid = PAR_OMP_NUM_CURR_THREAD;
    
    int nEl = mean.size();
    vls->resize(nEl);
    if( nEl > 1 )
    {
        floatVector normVls(nEl);
        //vsRngGaussian( VSL_METHOD_SGAUSSIAN_BOXMULLER2, g_RNG[myid].m_vslStream, nEl, &normVls.front(), 0, 1 );
        pnlRandNormal(nEl,&normVls.front(), 0, 1);
        
        CxMat matNormVls  = cxMat( nEl, 1, CX_32FC1, &normVls.front() ); 
        
        CxMat matMean = cxMat( nEl, 1, CX_32FC1, &mean.front() );
        CxMat matCov  = cxMat( nEl, nEl, CX_32FC1, &sigma.front() );
        
        floatVector evecData( nEl*nEl );
        CxMat evecMat = cxMat( nEl, nEl, CX_32FC1, &evecData.front() );
        
        floatVector evalData( nEl*nEl );
        CxMat evalMat = cxMat( nEl, nEl,  CX_32FC1, &evalData.front() );
        
        
        cxSVD( &matCov, &evalMat, &evecMat,  NULL, CX_SVD_MODIFY_A   ); 
        
        int i;
        for( i = 0; i < nEl; i++)
        {
            evalData[i*(nEl+1)] = float( sqrt( evalData[i*(nEl+1)] ) );
        }
        
        
        CxMat *prodMat1 = cxCreateMat( nEl, nEl, CX_32FC1 );
        cxMatMul( &evecMat, &evalMat, prodMat1 );
        
        
        CxMat matResultVls  = cxMat( nEl, 1, CX_32FC1, &(vls->front()) ); 
        
        cxMatMulAdd( prodMat1, &matNormVls, &matMean, &matResultVls );
        cxReleaseMat( &prodMat1 );
        
    }
    else
    {
        
        //vsRngGaussian( VSL_METHOD_SGAUSSIAN_BOXMULLER2, g_RNG[myid].m_vslStream, 1,
        //    &(vls->front()), mean.front(), sigma.front() );
        vls->front() = pnlRandNormal( mean.front(), sigma.front() );
    }
}
Exemplo n.º 3
0
void pnlRandNormal( int numElem, double* vec, double mean, double sigma )
{
    int myid = PAR_OMP_NUM_CURR_THREAD;
    
    //set distribution type
    g_RNG[myid].m_cxRandState.disttype = CX_RAND_NORMAL;
    //set range
    cxRandSetRange( &g_RNG[myid].m_cxRandState, sqrt(sigma), mean, -1 );

    //create matrix wrapper for 1 floating point value
    CxMat mat = cxMat( 1, numElem, CX_64FC1, vec );

    //generate value
    cxRand( &g_RNG[myid].m_cxRandState, &mat );
}   
Exemplo n.º 4
0
void pnlRand(int numElem, double* vec, double left, double right)
{
    int myid = PAR_OMP_NUM_CURR_THREAD;
    
    //set distribution type
    g_RNG[myid].m_cxRandState.disttype = CX_RAND_UNI;
    //set range
    cxRandSetRange( &g_RNG[myid].m_cxRandState, left, right, -1 );

    //create matrix wrapper for 1 floating point value
    CxMat mat = cxMat( 1, numElem, CX_64FC1, vec );

    //generate value
    cxRand( &g_RNG[myid].m_cxRandState, &mat );
}
Exemplo n.º 5
0
double pnlRandNormal( double mean, double sigma )
{
    int myid = PAR_OMP_NUM_CURR_THREAD;
    
    //set distribution type
    g_RNG[myid].m_cxRandState.disttype = CX_RAND_NORMAL;
    //set range
    cxRandSetRange( &g_RNG[myid].m_cxRandState, sqrt(sigma), mean, -1 );

    //create matrix wrapper for 1 floating point value
    double val = 0;
    CxMat mat = cxMat( 1, 1, CX_32FC1, &val );

    //generate value
    cxRand( &g_RNG[myid].m_cxRandState, &mat );

    return val;           
}
Exemplo n.º 6
0
double pnlRand(double left, double right)
{
    int myid = PAR_OMP_NUM_CURR_THREAD;
    
    //set distribution type
    g_RNG[myid].m_cxRandState.disttype = CX_RAND_UNI;
    //set range
    cxRandSetRange( &g_RNG[myid].m_cxRandState, left, right, -1 );

    //create matrix wrapper for 1 floating point value
    double val = 0;
    CxMat mat = cxMat( 1, 1, CX_64FC1, &val );

    //generate value
    cxRand( &g_RNG[myid].m_cxRandState, &mat );

    return val;            
} 
Exemplo n.º 7
0
//generate uniform integer distribution in the range [left,right]
int pnlRand(int left, int right)
{
    int myid = PAR_OMP_NUM_CURR_THREAD;
    
    PNL_CHECK_LEFT_BORDER( right, left );
    g_RNG[myid].m_cxRandState.disttype = CX_RAND_UNI;
    //set range
    cxRandSetRange( &g_RNG[myid].m_cxRandState, left, right, -1 );

    //create matrix wrapper for 1 floating point value
    float val = 0;
    CxMat mat = cxMat( 1, 1, CX_32FC1, &val );

    //generate value
    cxRand( &g_RNG[myid].m_cxRandState, &mat );
    double x1;
   
    double ip = modf(val, &x1);
    return (int)(x1 >= 0 ? ( ip > 0.5 ? ++x1 : x1 ) : ( ip > -0.5 ? --x1 : x1 )); 
    
}
void
PatchSample::findSamples(pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud,
                         MatrixXd &mx, MatrixXd &my, MatrixXd &mz,
                         double cx, double cy, double cz)
{
  // reset the cloud
  cloud->points.resize(0);

  // transform input data to local frame if necessary
  if (world_frame_)
  {
    pcl::Xform3 pose;
    pose.transform(mx, my, mz, p_.rexp(p_.getR()), p_.getC(), true, true); // invert, rotonly
    MatrixXd cxMat(1,1), cyMat(1,1), czMat(1,1);
    cxMat << cx;
    cyMat << cy;
    czMat << cz;
    //TBD: wrong p.c or p.r
    pose.transform(cxMat, cyMat, czMat, p_.rexp(p_.getR()), p_.getC(), true, false); // invert
    cx = cxMat(0,0);
    cy = cyMat(0,0);
    cz = czMat(0,0);
  }
  // calculate ray intersections
  r_  = p_.ri(mx, my, mz, cx, cy, cz);
  
  // create cloud
  MatrixXd x (mx.rows(),mx.cols());
  x = (mx.array() * r_.array()) + cx;
  MatrixXd y (my.rows(),my.cols());
  y = (my.array() * r_.array()) + cy;
  MatrixXd z (mz.rows(),mz.cols());
  z = (mz.array() * r_.array()) + cz;
  
  // clean them up
  MatrixXd bl_mat;
  p_.bl(x, y, bl_mat);
  
  for (int i=0; i<x.rows(); i++)
  {
    for (int j=0; j<x.cols(); j++)
    {
      if (bl_mat(i,j)>0.0)
      {
        x(i,j) = std::numeric_limits<float>::quiet_NaN();
        y(i,j) = std::numeric_limits<float>::quiet_NaN();
        z(i,j) = std::numeric_limits<float>::quiet_NaN();
      }
    }
  }

  pcl::PointXYZ point;
  for (int i=0; i<x.rows(); i++)
  {
    for (int j=0; j<x.cols(); j++)
    {
      point.x = x(i,j);
      point.y = y(i,j);
      point.z = z(i,j);
      cloud->points.push_back(point);
    }
  }
  cloud->width = x.cols();
  cloud->height = x.rows();
  cloud->is_dense = false;
}