Example #1
0
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;
}