コード例 #1
0
void CalibrationUtils::cameraToScreenPosition(float &x, float &y)
{
	cameraToScreenSpace(x, y);

	//is this right to avoid boundingbox overflow? this overflow occurs due to new angle box
// 	if(y > _camHeight) y = _camHeight;
// 	if(y < 0) y = 0;
// 	if(x > _camWidth) x = _camWidth;
// 	if(x < 0) x = 0;
// 
// 	int pos = (int)y * (int)_camWidth + (int)x;
// 
// 	x = cameraToScreenMap[pos].X;
// 	y = cameraToScreenMap[pos].Y;
}
コード例 #2
0
//! Convertion des valeurs d'affichage théorique en valeur réelle de tout les points
void CalibrationUtils::computeCameraToScreenMap()
{
	cameraToScreenMap = new vector2df[_camWidth * _camHeight];

	int p = 0;
	for(int y = 0; y < _camHeight; y++)
	{
		for(int x = 0; x < _camWidth; x++)
		{
			//On cast les valeurs en réel
			float transformedX = (float)x;
			float transformedY = (float)y;

			//Convertion de la valeur théorique de tout les points, en valeur réelle
			cameraToScreenSpace(transformedX, transformedY);
			cameraToScreenMap[p] = vector2df(transformedX, transformedY);
			p++;
		}
	}
}
コード例 #3
0
//Compute a map of camera to screen coordinates
void CalibrationUtils::computeCameraToScreenMap()
{
	cameraToScreenMap = new vector2df[_camWidth * _camHeight];

	int p = 0;
	for(int y = 0; y < _camHeight; y++)
	{
		for(int x = 0; x < _camWidth; x++)
		{
			//cast to float
			float transformedX = (float)x;
			float transformedY = (float)y;

			//convert camera to screenspace for all possible camera positions
			cameraToScreenSpace(transformedX, transformedY);
			//save these into a map of transformed camera to screenspace positions
			cameraToScreenMap[p] = vector2df(transformedX, transformedY);
			p++;
		}
	}
}
コード例 #4
0
ファイル: ofxMultiplexer.cpp プロジェクト: alathon/ccv15-diku
void ofxMultiplexer::computeOffsetMap(unsigned int* cameraOffsetMap,vector2df* calibrationPoints,int cameraPosition)
{
	vector2df* screenPoints = (vector2df*)malloc((actualCalibrationGridWidth+1) * (actualCalibrationGridHeight+1) * sizeof(vector2df));
	vector2df* cameraPoints = (vector2df*)malloc((actualCalibrationGridWidth+1) * (actualCalibrationGridHeight+1) * sizeof(vector2df));
	int* triangles = (int*)malloc((actualCalibrationGridWidth+1)*(actualCalibrationGridHeight+1)*6*sizeof(int));

	int t = 0;
	for(int j = 0; j < actualCalibrationGridHeight; j++)
	{
		for(int i = 0; i < actualCalibrationGridWidth; i++)
		{
			triangles[t+0] = (i+0) + ((j+0) * (actualCalibrationGridWidth+1));
			triangles[t+1] = (i+1) + ((j+0) * (actualCalibrationGridWidth+1));
			triangles[t+2] = (i+0) + ((j+1) * (actualCalibrationGridWidth+1));
			t += 3;
			triangles[t+0] = (i+1) + ((j+0) * (actualCalibrationGridWidth+1));
			triangles[t+1] = (i+1) + ((j+1) * (actualCalibrationGridWidth+1));
			triangles[t+2] = (i+0) + ((j+1) * (actualCalibrationGridWidth+1));
			t += 3;
		}
	}

	int size = actualStitchedFrameWidth * actualStitchedFrameHeight;
	int LeftX = 0;
	int TopY = 0;
	for (int i=0;i<size;i++)
	{
		if ((cameraMap[0][i] == cameraPosition) ||
			(cameraMap[1][i] == cameraPosition) ||
			(cameraMap[2][i] == cameraPosition) ||
			(cameraMap[3][i] == cameraPosition))
		{
			LeftX = i % actualStitchedFrameWidth;
			TopY = i / actualStitchedFrameWidth;
			break;
		}
	}
	int globalCalibrationGridWidth = (interleaveMode ?  actualCalibrationGridWidth * actualCameraGridWidth - actualCameraGridWidth + 1 : actualCalibrationGridWidth * actualCameraGridWidth);
	int globalCalibrationGridHeight = (interleaveMode ? actualCalibrationGridHeight * actualCameraGridHeight - actualCameraGridHeight + 1 : actualCalibrationGridHeight * actualCameraGridHeight);
	float calibrationGridCellWidth = ((float)actualStitchedFrameWidth) / globalCalibrationGridWidth;
	float calibrationGridCellHeight = ((float)actualStitchedFrameHeight) / globalCalibrationGridHeight;
	int cameraX = cameraPosition % actualCameraGridWidth;
	int cameraY = cameraPosition / actualCameraGridWidth;
	cameraX *= (interleaveMode  ? (actualCalibrationGridWidth-1) : actualCalibrationGridWidth);
	cameraY *= (interleaveMode  ? (actualCalibrationGridHeight-1) : actualCalibrationGridHeight);
	int P = 0;
	for (int j=0;j<=actualCalibrationGridHeight;j++)
	{
		for (int i=0;i<=actualCalibrationGridWidth;i++)
		{
			screenPoints[P].X = (float)(calibrationGridCellWidth * i + LeftX);
			screenPoints[P].Y = (float)(calibrationGridCellHeight * j + TopY);
			P++;
		}
	}
	memcpy((void*)cameraPoints,calibrationPoints,(actualCalibrationGridWidth+1) * (actualCalibrationGridHeight+1) * sizeof(vector2df));
	memset(cameraOffsetMap,0,actualStitchedFrameWidth * actualStitchedFrameHeight * sizeof(unsigned int));
	
	int T = 0;
	for (int j=0;j<actualStitchedFrameHeight;j++)
	{
		for (int i=0;i<actualStitchedFrameWidth;i++)
		{
			unsigned int transformedX = i;
			unsigned int transformedY = j;
			if ((cameraMap[0][i+j*actualStitchedFrameWidth] != cameraPosition)&&
				(cameraMap[1][i+j*actualStitchedFrameWidth] != cameraPosition)&&
				(cameraMap[2][i+j*actualStitchedFrameWidth] != cameraPosition)&&
				(cameraMap[3][i+j*actualStitchedFrameWidth] != cameraPosition))
				transformedX = transformedY = 0;
			else
				cameraToScreenSpace(transformedX,transformedY,screenPoints,cameraPoints,triangles);
			if (transformedX >= cameraFramesWidth[cameraPosition])
				transformedX=cameraFramesWidth[cameraPosition]-1;
			if (transformedY >= cameraFramesHeight[cameraPosition])
				transformedY = cameraFramesHeight[cameraPosition]-1;
 			cameraOffsetMap[T] = transformedX+transformedY*cameraFramesWidth[cameraPosition];
			T++;
		}
	}
	free(screenPoints);
	free(cameraPoints);
	free(triangles);
}