예제 #1
0
void trans_code(char *filename){
	//f2 = fopen("out_target.txt", "w+" );
	f2 = fopen( filename, "w+" );
	pre_trans();
	InterCodes* cur = intercs;
	do{
		trans(cur);
		cur = cur->next;
	}while(cur != NULL);
}
예제 #2
0
파일: RemoteDoc.cpp 프로젝트: ch3n2k/rss
void CRemoteDoc::OnRegisterFeaturelessFourier() 
{
	//parameters:
	SimilarityEstimation::GradientOperator filter = SimilarityEstimation::OP_ROBERT;
	SimilarityEstimation::HighpassFilter highpass = SimilarityEstimation::FILTER_NONE;
	bool isTranslation = false;
	bool isRotation    = false;
	bool isScaling     = false;
	
	//get parameters from user
	FourierRegisterDialog dialog;

	if(dialog.DoModal()==IDOK) {
		isTranslation = static_cast<bool>(dialog.isTranslation);
		isRotation    = static_cast<bool>(dialog.isRotation);
		isScaling     = static_cast<bool>(dialog.isScaling);
		bool has_parameter = dialog.m_bPara;
		double base_width = dialog.m_WidthBase;
		double base_height = dialog.m_HeightBase;
		double base_focus = dialog.m_FocusBase;
		double ref_width = dialog.m_WidthRef;
		double ref_height = dialog.m_HeightRef;
		double ref_focus = dialog.m_FocusRef;

		
		

		if( !dialog.filter.CompareNoCase("NONE") )
			filter = SimilarityEstimation::OP_NONE;
		else if( !dialog.filter.CompareNoCase("Robert"))
			filter = SimilarityEstimation::OP_ROBERT;
		else if( !dialog.filter.CompareNoCase("NONE"))
			filter = SimilarityEstimation::OP_SOBEL;			
		else
			filter = SimilarityEstimation::OP_NONE;

		if( !dialog.highpass.CompareNoCase("NONE") )
			highpass = SimilarityEstimation::FILTER_NONE;
		else if( !dialog.highpass.CompareNoCase("LAP1") )
			highpass = SimilarityEstimation::FILTER_1;
		else if( !dialog.highpass.CompareNoCase("LAP2") )
			highpass = SimilarityEstimation::FILTER_2;
		else if( !dialog.highpass.CompareNoCase("LAP3") )
			highpass = SimilarityEstimation::FILTER_3;
		else if( !dialog.highpass.CompareNoCase("LAP4") )
			highpass = SimilarityEstimation::FILTER_4;
		else
			highpass = SimilarityEstimation::FILTER_NONE;

		CString image_name = dialog.image;
	
		/*FourierBasedAffineModel<float> model;*/
		Image<RealPixel> image2;
		image_cast(GetImage(), image2);
		Image<RealPixel> image1;

		POSITION pos = GetDocTemplate()->GetFirstDocPosition();
		while(pos) {
			CRemoteDoc *pDoc= (CRemoteDoc *) (GetDocTemplate()->GetNextDoc(pos));
			if(pDoc->GetTitle() == image_name) {
				image_cast(pDoc->GetImage(), image1);
				//image1 = pDoc->GetImage();	
			}
		}

		if(has_parameter) {
//      para  输入参数,para[0]为可见光相机焦距,para[1]为可见光相机底
//            片水平尺寸,para[2]为可见光相机底片垂直尺寸,para[3]为红
//            外相机焦距,para[4]为红外相机底片水平尺寸,para[5]为红外
			double scale1 = base_focus / ref_focus * ref_width / base_width * image1.width() / image2.width();
			double scale2 = base_focus / ref_focus * ref_height / base_height * image1.height() / image2.height();
			double scale = sqrt(scale1*scale2);
			HomoModel pre_trans_model;
			pre_trans_model.SetSimilarity(scale, 0, image2.width() * (1 - scale) / 2.0, image2.height() * (1 - scale) / 2.0);
			HomoTrans<RealPixel> pre_trans(pre_trans_model, image1.size());
			Image<RealPixel> temp;
			pre_trans.operator ()(image2, temp);
			//image_cast(temp, image2);
			image2 = temp;
		}

		HomoModel model;
		SimilarityEstimation sim_est(isTranslation, isRotation, isScaling, filter, highpass);

		/* compute model param */
		sim_est( image1, image2, model);

		Image<pixel_type> result;
		HomoTrans<pixel_type> homo_trans(model, image1.size());
		homo_trans.operator()(GetImage(), result);
		SetImage(result);
	}
}