亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? calibrtwocamadlg.cpp

?? 這是前段時(shí)間自己寫的一個給兩個攝像機(jī)定標(biāo)的對話框程序
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
	{
		max_2	   = INT_MIN;
		maxIndex_2 = -1;
		angle2	   = 0;
		
		for( i=0; i<n; i++ )
		{
			if( fabs(angles[i]) > 500 ) continue;
			
			degree1 = fabs(KMathematica::MapAnglePi2mPi(angles[i]-angle1));
			degree2 = fabs(degree1 - PI/2);
			if( angleCounter[i] >= max_2 && ((degree2 < PI/6)&&exact || (!exact)&&( degree1 > diff) ) )
			{
				max_2 = angleCounter[i];
				maxIndex_2 = i;
				angle2 = angles[i];
				diff = degree1; 
			}
		}
		
		if( max_2 >= thr2 && maxIndex_2 != -1 )
			retVal.y = (float)angle2;
	}
	
	//	delete []angles;
	delete []angleCounter;
	
	return retVal;
}
//----------------------------------------------------------------------------//
//
// Function: CalibrateCamera
// Purpose : Finds the A matrix(m_cameraMatrix) and the m_distortion vector from the 
//			 loaded images. There must be at least 4 images in order to get a correct 
//			 A matrix. The more the number  of the images used the more exact results 
//			 are obtained. This function also calculates the recpective rotation and 
//			 translation vectors for the input calibration images used. 
// Output  : m_cameraMatrix : a0 = horizontal scaling, a4= vertical scaling, a1 = skew
//							  (a2,a5) = principal point.
//			 m_distortion     : first two entries are radial m_distortion and last two entries 
//						  	  are tangential distoriton parameters.
//----------------------------------------------------------------------------//

void CCalibrtwocamaDlg::CalibrateCamera()
{
	UpdateData();

	if( m_nEffectiveImageNumber == 0 ) 
		return;

	int* numPoints = new int[m_nEffectiveImageNumber];
	for( int k=0; k < m_nEffectiveImageNumber; k++ ) numPoints[k] = m_nNumCorners;

	delete[]m_distortion  ; m_distortion   = new double[4]; for( k=0; k<4; k++ ) m_distortion  [k] = 0.0;
	delete[]m_cameraMatrix; m_cameraMatrix = new double[9]; for( k=0; k<9; k++ ) m_cameraMatrix[k] = 0.0;
	delete[]m_transVects  ; m_transVects   = new double[m_nEffectiveImageNumber*3];
	delete[]m_rotMatrs    ; m_rotMatrs     = new double[m_nEffectiveImageNumber*9];

	int  useIntrinsicGuess = 0;
	
	CvPoint2D64d* uvinv  = new CvPoint2D64d[m_nEffectiveImageNumber * m_nNumCorners];
	CvPoint3D64d* XYZinv = new CvPoint3D64d[m_nEffectiveImageNumber * m_nNumCorners];
	int size = m_nEffectiveImageNumber * m_nNumCorners;

	int index;

	for(int i=0 ; i<m_nEffectiveImageNumber; i++)
	{
		for( int j=0; j<m_nNumCorners; j++ )
		{
			index = KMathematica::Modulus( i+2, m_nEffectiveImageNumber );
			uvinv [i*m_nNumCorners+j].x = uveff [index*m_nNumCorners+j].x;
			uvinv [i*m_nNumCorners+j].y = uveff [index*m_nNumCorners+j].y;
			XYZinv[i*m_nNumCorners+j].x = XYZeff[index*m_nNumCorners+j].x;
			XYZinv[i*m_nNumCorners+j].y = XYZeff[index*m_nNumCorners+j].y;
			XYZinv[i*m_nNumCorners+j].z = XYZeff[index*m_nNumCorners+j].z;
		}
	}

	CvVect64d INVdistortion   = new double[4];
	CvMatr64d INVcameraMatrix = new double[9];
	CvVect64d INVtransVects   = new double[m_nEffectiveImageNumber*3];
	CvMatr64d INVrotMatrs     = new double[m_nEffectiveImageNumber*9];

	// cvCalibrateCamera_64d SOMEHOW fails to find the first rotation matrix true. 
	// However it gives correct results for the remaining images. Therefore, I invert all
	// the data sets and enter them in reverse order. By doing so, I will take the last 
	// rotation matrix of the inverted data set as the rotation matrix of the normal 
	// data set.

	cvCalibrateCamera_64d(m_nEffectiveImageNumber, 
					  numPoints, 
					  imgsize, 
					  uveff, 
					  XYZeff, 
					  m_distortion, 
					  m_cameraMatrix, 
					  m_transVects, 
					  m_rotMatrs, 
					  useIntrinsicGuess
					  ); 

	cvCalibrateCamera_64d(m_nEffectiveImageNumber, 
					  numPoints, 
					  imgsize, 
					  uvinv, 
					  XYZinv, 
					  INVdistortion, 
					  INVcameraMatrix, 
					  INVtransVects, 
					  INVrotMatrs, 
					  useIntrinsicGuess
					  ); 

	CvVect64d focal = new double[2];
	
	focal[0] = m_cameraMatrix[0];
	focal[1] = m_cameraMatrix[4];
	
	CvPoint2D64d principal;
	principal.x = m_cameraMatrix[2];
	principal.y = m_cameraMatrix[5];

	cvFindExtrinsicCameraParams_64d(m_nNumCorners,
					  imgsize,
					  uveff,
					  XYZeff,
					  focal,
					  principal,
					  m_distortion,
					  m_rotMatrs,
					  m_transVects
					  );

	cvFindExtrinsicCameraParams_64d(m_nNumCorners,
					  imgsize,
					  uvinv,
					  XYZinv,
					  focal,
					  principal,
					  INVdistortion,
					  INVrotMatrs,
					  INVtransVects
					  );

	// Correct first rotation matrix and translation vector!
	for( i=0; i<9; i++ )
	{
		index = KMathematica::Modulus(-2, m_nEffectiveImageNumber );

		m_rotMatrs[i] = INVrotMatrs[index*9+i];		
		if( i<3 ) 
			m_transVects[i] = INVtransVects[3*index+i];

		index = KMathematica::Modulus( m_nEffectiveImageNumber-3, m_nEffectiveImageNumber );

		m_rotMatrs[9*(m_nEffectiveImageNumber-1)+i] = INVrotMatrs[index*9+i];
		if( i<3 ) 
			m_transVects[3*(m_nEffectiveImageNumber-1)+i] = INVtransVects[index*3+i];
	}

	delete[]focal		   ;
	delete[]INVdistortion  ;
	delete[]INVcameraMatrix;
	delete[]INVtransVects  ;
	delete[]INVrotMatrs	   ;

	delete[]numPoints;

	delete []XYZinv;
	delete []uvinv;
	
}

void CCalibrtwocamaDlg::CalculateCalibrationErrors(bool print)
{
	if( m_nEffectiveImageNumber == 0 ) return;
	
	// calculate pixel errors: 
	CvPoint2D64d* uvapp = new CvPoint2D64d[m_nEffectiveImageNumber * m_nNumCorners];

	CString path = m_ImageRoot.folderPath + '\\' + "backprojection.txt";
	FILE* fp;

	if( print )
	{
		fp = fopen(path, "w");
		fprintf(fp,"index\trealx\trealy\tcalcx\tcalcy\terrorx\terrory\n");
	}

	int index;

	CvPoint3D64d backProject;

	double diffx,diffy;

	m_dErrorMean.x = 0;
	m_dErrorMean.y = 0;

	m_dErrorPower.x = 0;
	m_dErrorPower.y = 0;

	m_dErrorMax.x = 0;
	m_dErrorMax.y = 0;

	double r0,r1,r2,r3,r4,r5,r6,r7,r8,t0,t1,t2;
	double r_square, r_quad;

	double xx, yy, temp;

	for( int i=0; i<m_nEffectiveImageNumber; i++ )
	{
		for( int j=0; j<m_nNumCorners; j++)
		{
			index = i*m_nNumCorners+j;

			r0 = m_rotMatrs[i*9  ];
			r1 = m_rotMatrs[i*9+1];
			r2 = m_rotMatrs[i*9+2];
			r3 = m_rotMatrs[i*9+3];
			r4 = m_rotMatrs[i*9+4];
			r5 = m_rotMatrs[i*9+5];
			r6 = m_rotMatrs[i*9+6];
			r7 = m_rotMatrs[i*9+7];
			r8 = m_rotMatrs[i*9+8];

			t0 = m_transVects[3*i  ];
			t1 = m_transVects[3*i+1];
			t2 = m_transVects[3*i+2];

			// multiply with R and add T vector
			backProject.x = r0*XYZeff[index].x +r1*XYZeff[index].y +r2*XYZeff[index].z + t0;
			backProject.y = r3*XYZeff[index].x +r4*XYZeff[index].y +r5*XYZeff[index].z + t1;
			backProject.z = r6*XYZeff[index].x +r7*XYZeff[index].y +r8*XYZeff[index].z + t2;

			if( m_bCompansateDistortion )
			{
				// apply projection 
				uvapp[index].x = backProject.x / backProject.z;
				uvapp[index].y = backProject.y / backProject.z;

				// calculate distorted coordinates
				r_square = pow( uvapp[index].x , 2) +  pow( uvapp[index].y , 2);
				r_quad   = pow( r_square, 2);

				xx = uvapp[index].x*(1 + m_distortion[0]*r_square + m_distortion[1]*r_quad)
					+2*m_distortion[2]*uvapp[index].x*uvapp[index].y 
					+  m_distortion[3]*(r_square + 2*uvapp[index].x *uvapp[index].x);

				yy =   uvapp[index].y*(1+m_distortion[0]*r_square 
									  +m_distortion[1]*r_quad)   
					+  m_distortion[2]*(r_square+2*uvapp[index].y*uvapp[index].y) 
					+2*m_distortion[3]*uvapp[index].x*uvapp[index].y;

				// multiply with camera matrix.
				uvapp[index].x = m_cameraMatrix[0]*xx+m_cameraMatrix[2];	
				uvapp[index].y = m_cameraMatrix[4]*yy+m_cameraMatrix[5];
			}
			else
			{
				uvapp[index].x = m_cameraMatrix[0]*backProject.x+
								 m_cameraMatrix[1]*backProject.y+
								 m_cameraMatrix[2]*backProject.z;

				uvapp[index].y = m_cameraMatrix[3]*backProject.x+
								 m_cameraMatrix[4]*backProject.y+
								 m_cameraMatrix[5]*backProject.z;

				temp = m_cameraMatrix[6]*backProject.x+
					   m_cameraMatrix[7]*backProject.y+
					   m_cameraMatrix[8]*backProject.z;

				uvapp[index].x /= temp;
				uvapp[index].y /= temp;
			}

			diffx = uveff[index].x-uvapp[index].x;
			diffy = uveff[index].y-uvapp[index].y;

			m_dErrorMean.x += fabs(diffx);
			m_dErrorMean.y += fabs(diffy);

			m_dErrorPower.x += pow(diffx,2);
			m_dErrorPower.y += pow(diffy,2);

			if( fabs(diffx) > m_dErrorMax.x ) m_dErrorMax.x = fabs(diffx);
			if( fabs(diffy) > m_dErrorMax.y ) m_dErrorMax.y = fabs(diffy);

			if( print ) 
			{
				fprintf( fp, "%d\t%3.2f\t%3.2f\t%3.2f\t%3.2f\t%3.2f\t%3.2f\t\n",
					          index,
							  uveff[index].x,
							  uveff[index].y,
							  uvapp[index].x,
							  uvapp[index].y,
							  diffx,
							  diffy );
			}
		}
	}

	if( print )
	{
		fclose(fp);
	}


	m_dErrorPower.x  = sqrt(m_dErrorPower.x);
	m_dErrorPower.y  = sqrt(m_dErrorPower.y);
	m_dErrorPower.x /= m_nEffectiveImageNumber*m_nNumCorners;
	m_dErrorPower.y /= m_nEffectiveImageNumber*m_nNumCorners;

	m_dErrorMean.x /= m_nEffectiveImageNumber*m_nNumCorners;
	m_dErrorMean.y /= m_nEffectiveImageNumber*m_nNumCorners;

	delete []uvapp; uvapp = NULL;

}

void CCalibrtwocamaDlg::GenerateReport()
{
	if( m_nEffectiveImageNumber == 0 ) return;
	
	CString path;
	path = m_ImageRoot.folderPath + '\\' + califlag+"calibration_result.txt";
	cps = fopen(path, "w");
	
	fprintf(cps,"Effective Image Number Processed = %d\n\n", m_nEffectiveImageNumber);
	
	fprintf(cps, "Camera Matrix\n%10.2f %10.2f %10.2f\n%10.2f %10.2f %10.2f\n%10.2f %10.2f %10.2f\n", 
		m_cameraMatrix[0],m_cameraMatrix[1],m_cameraMatrix[2], 
		m_cameraMatrix[3],m_cameraMatrix[4],m_cameraMatrix[5], 
		m_cameraMatrix[6],m_cameraMatrix[7],m_cameraMatrix[8]);
	
	fprintf( cps, "\nPixel Error Powers: \n");
	fprintf( cps, "X Error : %3.3f\tY Error : %3.3f\n",m_dErrorPower.x,m_dErrorPower.y);
	
	fprintf( cps, "\nPixel Mean Errors: \n");
	fprintf( cps, "X Error : %3.3f\tY Error : %3.3f\n",m_dErrorMean.x,m_dErrorMean.y);
	
	fprintf( cps, "\nMAX X Error : %3.3f\n",m_dErrorMax.x);
	fprintf( cps, "MAX Y Error : %3.3f\n",m_dErrorMax.y);
	
	fprintf(cps,"\nDistortion\n");
	for( int k=0; k<4; k++)
		fprintf(cps,"%7.2f\t", m_distortion[k] );
	fprintf(cps,"\n\n");
	
	fprintf(cps,"R & T Matrices\n\n");
	
	fprintf(cps, "    Rotation Matrices                Translation Vectors\n");
	fprintf(cps, "------------------------------------------------------------\n");
	
	for(int i=0;i<m_nEffectiveImageNumber;i++)
	{
		for(int j=0; j<9; j++)
		{
			fprintf(cps, "%7.2f\t", m_rotMatrs[i*9+j]);
			if((j+1)%3==0) {
				fprintf(cps,"%25.2f\n", m_transVects[i*3+j/3]);
			}
		}
		fprintf(cps,"\n");
	}
	
	fclose(cps);

}



void CCalibrtwocamaDlg::DisplayReport()
{

	UpdateData();
	
	if( m_nEffectiveImageNumber == 0 ) return;
	
	CString path = m_ImageRoot.folderPath + '\\' +califlag+ "calibration_result.txt";
	
	CStdioFile file(path,CFile::modeRead|CFile::typeText);
	CString strLine,strText;
	while(file.ReadString(strLine)){
		
		if( strcmp(strLine, "R & T Matrices") == 0 )
			break;
		strText+=strLine;
		strText+="\n";
	}
	if (califlag=="left")
	MessageBox(strText, "Left Camera Calibration Results");
	else if(califlag="right")
		MessageBox(strText,"Right Camera Calibration Results");
    else
        MessageBox(strText," Camera Calibration Results");
	
	if( m_bDisplayRT )
	{
		strText = "";
		while(file.ReadString(strLine)){
			strText+=strLine;
			strText+="\n";
		}
		if (califlag=="left")
			MessageBox(strText, "Left Camera Rotation and Translation Vectors");
		else if(califlag="right")
			MessageBox(strText,"Right Camera Rotation and Translation Vectors");
	    else
			MessageBox(strText,"Rotation and Translation Vectors");
	}

}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区成人在线视频| 亚洲永久免费av| 91蜜桃免费观看视频| 日韩影视精彩在线| 日韩精品综合一本久道在线视频| 国产馆精品极品| 午夜在线成人av| 国产精品系列在线| 91精品国产综合久久精品性色| 国产精品18久久久久| 亚洲一级片在线观看| 国产精品国产三级国产a| 日韩欧美国产不卡| 在线精品国精品国产尤物884a| 久久69国产一区二区蜜臀| 亚洲综合偷拍欧美一区色| 久久免费的精品国产v∧| 在线观看亚洲精品| 国产91丝袜在线18| 五月激情综合婷婷| 三级欧美韩日大片在线看| 亚洲精品久久久久久国产精华液 | 成人sese在线| 成人午夜大片免费观看| k8久久久一区二区三区 | 日韩电影免费一区| 亚洲1区2区3区4区| 日本女优在线视频一区二区| 午夜精品在线视频一区| 日韩av在线播放中文字幕| 国产福利91精品| 一区二区三区在线播放| 久久久久久久一区| 欧美电影免费观看高清完整版 | 欧美日韩一区二区在线视频| 欧美三级电影在线观看| 正在播放亚洲一区| 欧美日韩免费观看一区三区| 在线观看三级视频欧美| 91精品国产美女浴室洗澡无遮挡| 欧美日韩一二三| 8x福利精品第一导航| 在线播放/欧美激情| www精品美女久久久tv| 欧美高清一级片在线观看| 亚洲欧美日韩国产综合| 五月综合激情日本mⅴ| 极品少妇一区二区三区精品视频| 成人动漫精品一区二区| 欧美色大人视频| 日韩 欧美一区二区三区| 成人小视频免费观看| 日韩精品自拍偷拍| 亚洲欧美电影一区二区| 丝袜美腿成人在线| 久久av资源网| 丰满少妇久久久久久久| 91精品国产入口在线| 久久亚区不卡日本| 一区二区欧美精品| 国产在线精品一区二区三区不卡 | 国产综合色在线| 欧美久久久影院| 国产精品乱人伦中文| 国产一区二区不卡老阿姨| 777久久久精品| 午夜精品成人在线| 欧美性色欧美a在线播放| 国产精品成人免费| 成人国产精品视频| 国产精品色呦呦| 经典三级在线一区| 日韩无一区二区| 麻豆精品新av中文字幕| 在线欧美日韩精品| 亚洲黄色小视频| 91久久香蕉国产日韩欧美9色| 亚洲欧洲www| 一本在线高清不卡dvd| 1区2区3区精品视频| 国产精品69毛片高清亚洲| 日韩免费视频线观看| 日韩av不卡在线观看| 91精品国产综合久久婷婷香蕉| 日韩国产精品久久久| 91精品国产综合久久久蜜臀图片| 日本一区二区高清| 99久久伊人久久99| 亚洲欧美经典视频| 欧美日韩亚洲国产综合| 青青草原综合久久大伊人精品优势| 欧美男女性生活在线直播观看| 麻豆中文一区二区| 国产女人水真多18毛片18精品视频| 91原创在线视频| 美腿丝袜在线亚洲一区| 国产农村妇女精品| 欧美日韩一二三区| 国产老妇另类xxxxx| 亚洲丝袜自拍清纯另类| 欧美一区二区三区免费观看视频| 国产精品中文字幕日韩精品| 亚洲国产日韩一区二区| 国产天堂亚洲国产碰碰| 欧美久久久影院| 99久久综合99久久综合网站| 黄色日韩三级电影| 日日摸夜夜添夜夜添亚洲女人| 欧美国产1区2区| 最新国产の精品合集bt伙计| 在线观看av不卡| 国产91精品在线观看| 夜夜揉揉日日人人青青一国产精品 | 91福利国产成人精品照片| 国产精品中文字幕日韩精品| 午夜av区久久| 玉米视频成人免费看| 亚洲伦理在线精品| 亚洲欧美一区二区三区极速播放 | 一本色道**综合亚洲精品蜜桃冫| 国产精品影视天天线| 日韩影院精彩在线| 午夜电影久久久| 亚洲国产成人av| 午夜精品一区二区三区三上悠亚| 亚洲成人免费观看| 午夜久久久久久| 国内成人免费视频| 国产乱色国产精品免费视频| 国产自产高清不卡| 激情文学综合网| 国产一区二区三区综合| 国产一区二三区| 欧美三级乱人伦电影| 欧美日韩夫妻久久| 欧美大片一区二区| 国产丝袜美腿一区二区三区| 中文字幕一区二区三区乱码在线| 亚洲欧美视频在线观看视频| 亚洲视频一区二区免费在线观看| 亚洲美女免费视频| 午夜久久久久久久久| 激情久久五月天| 91精品福利视频| 欧美大片一区二区| 一区二区三区国产豹纹内裤在线| 免费精品视频在线| gogogo免费视频观看亚洲一| 欧美伦理电影网| 精品不卡在线视频| 亚洲精品自拍动漫在线| 美女性感视频久久| 成人深夜福利app| 欧美日韩在线三区| 亚洲国产精华液网站w| 日韩电影在线免费| 在线欧美小视频| 久久综合九色综合欧美亚洲| 一区二区三区资源| 国产精品一区免费视频| 欧美日韩精品免费观看视频| 国产亚洲婷婷免费| 丝袜亚洲另类欧美综合| 99精品久久久久久| 国产精品久久影院| 国产成人夜色高潮福利影视| 欧美日韩一区二区三区高清 | 色综合久久88色综合天天 | 中文字幕中文字幕在线一区| 国产曰批免费观看久久久| 日韩欧美高清dvd碟片| 一区二区三区久久久| 99在线热播精品免费| xf在线a精品一区二区视频网站| 亚洲综合精品自拍| 成人深夜视频在线观看| 国产亚洲欧美激情| 国产精品综合视频| 欧美电影免费观看高清完整版在线 | 欧美日韩电影在线| 亚洲综合另类小说| 91在线视频18| 亚洲图片欧美激情| 91福利资源站| 一区二区高清在线| 欧美日韩三级一区| 日韩国产欧美视频| 精品国产sm最大网站| 成人免费观看av| 亚洲欧美激情视频在线观看一区二区三区 | 成人一区二区三区在线观看| 欧美经典三级视频一区二区三区| 高清日韩电视剧大全免费| 国产精品黄色在线观看| 欧美中文字幕一区| 蜜桃av一区二区三区| 一区在线中文字幕| 欧美一区二区大片| 国产一区二区精品久久99| 亚洲黄色免费电影|