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); }
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); } }