void LearningRankN(double* x_training, double* x_trainingEncoded, int nx, int ntrain, int niter, KernelType kernel, double epsilon, double* p_Ci, double* p_Cinv, double sigma_A, double sigma_Pow, double* xmean, int doEncoding, double* optAlphas, double* pTwoSigmaPow2, double kernelParam1, double kernelParam2, int normalize, double* X_min, double* X_max) { //0. Init Temp Data int nAlpha = ntrain-1; double* p_Kij = (double*)mxCalloc(ntrain*ntrain,sizeof(double)); double* p_dKij = (double*)mxCalloc(nAlpha*nAlpha,sizeof(double)); double* p_alpha = (double*)mxCalloc(nAlpha,sizeof(double)); double* p_sumAlphaDKij = (double*)mxCalloc(nAlpha,sizeof(double)); double* p_div_dKij = (double*)mxCalloc(nAlpha*nAlpha,sizeof(double)); double* p_dx = (double*)mxCalloc(nx,sizeof(double)); double* Kvals = (double*)mxCalloc(ntrain,sizeof(double)); int i,j; double ttotal = 0; //1. Transform training points to the new coordinate system and //then compute Euclidean distance instead of 'EXPENSIVE' Mahalanobis distance if (doEncoding == 1) { //p_Cinv is the C^-0.5 ;) Encoding(x_training, x_trainingEncoded, p_Cinv, xmean, ntrain, nx); } if (normalize == 1) { normalizeX(x_trainingEncoded, ntrain, nx, X_min, X_max); } //2. Calculate the distance between points, then calculate sigma(gamma) and Kernel Matrix double TwoSigmaPow2 = 0; CalculateTrainingKernelMatrix(x_trainingEncoded, ntrain, nx, p_Kij, &TwoSigmaPow2, sigma_A, sigma_Pow, kernel, kernelParam1, kernelParam2); //3. Optimize alpha parameters OptimizeL(ntrain, p_Ci, epsilon, niter, p_Kij, p_dKij, p_alpha, p_sumAlphaDKij, p_div_dKij); *pTwoSigmaPow2 = TwoSigmaPow2; for (int i=0; i<nAlpha; i++) { optAlphas[i] = p_alpha[i]; } mxFree(p_sumAlphaDKij); mxFree(p_div_dKij); mxFree(p_dKij); mxFree(p_Kij); mxFree(p_dx); mxFree(p_alpha); mxFree(Kvals); }
WorldRenderer::WorldRenderer(RenderingContext* rctx, DepthGenerator* depthGen, ImageGenerator* imageGen, BallManager* ball_manager) : AbstractOpenGLRenderer(rctx) { m_depthGen = depthGen; m_imageGen = imageGen; //m_henshinDetector = henshinDetector; m_ball_manager = ball_manager; DepthMetaData dmd; m_depthGen->GetMetaData(dmd); m_width = dmd.XRes(); m_height = dmd.YRes(); // allocate working buffers XnUInt32 numPoints = getNumPoints(); m_vertexBuf = new M3DVector3f[numPoints]; m_colorBuf = new M3DVector4f[numPoints]; // pre-set values on working buffers M3DVector3f* vp = m_vertexBuf; M3DVector4f* cp = m_colorBuf; for (XnUInt32 iy = 0; iy < m_height; iy++) { for (XnUInt32 ix = 0; ix < m_width; ix++) { (*vp)[0] = normalizeX(float(ix)); (*vp)[1] = normalizeY(float(iy)); (*vp)[2] = 0; vp++; (*cp)[0] = (*cp)[1] = (*cp)[2] = 0; (*cp)[3] = 1; // alpha is always 1.0 cp++; } } m_batch.init(numPoints); m_depthAdjustment = DEFAULT_DEPTH_ADJUSTMENT; }