From: <gko...@us...> - 2009-03-04 21:07:19
|
Revision: 3705 http://hugin.svn.sourceforge.net/hugin/?rev=3705&view=rev Author: gkohlmeyer Date: 2009-03-04 21:07:09 +0000 (Wed, 04 Mar 2009) Log Message: ----------- Simplified determination of celeste model file name on XRC path; Conforming result dialogs for celeste Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2009-03-04 19:14:20 UTC (rev 3704) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2009-03-04 21:07:09 UTC (rev 3705) @@ -386,9 +386,9 @@ bool createCtrlP = true; // TODO: handle existing control points properly instead of adding them twice. if (m_pano->getNrOfCtrlPoints() > 0) { - int a = wxMessageBox(wxString::Format(_("The panorama already has %d control points.\n\nSkip control points creation?"), m_pano->getNrOfCtrlPoints()), - _("Skip control point creation?"), wxICON_QUESTION | wxYES_NO); - createCtrlP = a != wxYES; + int a = wxMessageBox(wxString::Format(_("The panorama already has %d control points.\n\nSkip control points creation?"), m_pano->getNrOfCtrlPoints()), + _("Skip control point creation?"), wxICON_QUESTION | wxYES_NO); + createCtrlP = a != wxYES; } */ @@ -400,136 +400,127 @@ AutoCtrlPointCreator matcher; CPVector cps = matcher.automatch(*m_pano, imgs, nFeatures,this); GlobalCmdHist::getInstance().addCommand( - new PT::AddCtrlPointsCmd(*m_pano, cps) - ); + new PT::AddCtrlPointsCmd(*m_pano, cps) + ); } // Run Celeste bool t = wxConfigBase::Get()->Read(wxT("/Celeste/Auto"), HUGIN_CELESTE_AUTO); - if (t && m_pano->getNrOfCtrlPoints()){ + if (t && m_pano->getNrOfCtrlPoints()) + { - DEBUG_TRACE("Running Celeste"); - progress.increaseProgress(1, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); + DEBUG_TRACE("Running Celeste"); + progress.increaseProgress(1, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); // set numeric locale to C, for correct number output char * old_locale = setlocale(LC_NUMERIC,NULL); setlocale(LC_NUMERIC,"C"); + // determine file name of SVM model file + // get XRC path from application + wxString wxstrModelFileName = huginApp::Get()->GetXRCPath() + wxT("data/") + wxT(HUGIN_CELESTE_MODEL); + // convert wxString to string + string strModelFileName(wxstrModelFileName.mb_str(wxConvUTF8)); - // SVM model file - #if __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE - wxString strFile; - char buf[100]; - strFile = MacGetPathToBundledResourceFile(CFSTR("celeste.model")); - strcpy( buf, (const char*) strFile.mb_str(wxConvUTF8)); - string modelfile = buf; - #else - char buf[100]; - strcpy( buf, (const char*)huginApp::Get()->GetXRCPath().mb_str(wxConvUTF8) ); - // Will this slash work on Windows? - strcat( buf, "data/"); - strcat( buf, HUGIN_CELESTE_MODEL); - string modelfile = buf; - #endif - - // SVM model file - if ( wxFile::Exists(wxString::FromAscii(buf)) ) { - - for (unsigned int imgNr = 0; imgNr < m_pano->getNrOfImages() - 1; imgNr++){ - - double progress_amount = (double)1/m_pano->getNrOfImages(); - progress.increaseProgress(progress_amount, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); - - const CPVector & controlPoints = m_pano->getCtrlPoints(); - unsigned int removed = 0; - - gNumLocs = 0; - for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { - PT::ControlPoint point = *it; - if (imgNr == point.image1Nr){ - gNumLocs++; - } - if (imgNr == point.image2Nr){ - gNumLocs++; - } - } - - // Create the storage matrix - gLocations = CreateMatrix( (int)0, gNumLocs, 2); - unsigned int glocation_counter = 0; - unsigned int cp_counter = 0; - vector<unsigned int> global_cp_nr; - - for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { - PT::ControlPoint point = *it; - if (imgNr == point.image1Nr){ - gLocations[glocation_counter][0] = (int)point.x1; - gLocations[glocation_counter][1] = (int)point.y1; - global_cp_nr.push_back(cp_counter); - glocation_counter++; - } - if (imgNr == point.image2Nr){ - gLocations[glocation_counter][0] = (int)point.x2; - gLocations[glocation_counter][1] = (int)point.y2; - global_cp_nr.push_back(cp_counter); - glocation_counter++; - } - cp_counter++; - } - - // SVM threshold - double threshold = HUGIN_CELESTE_THRESHOLD; - wxConfigBase::Get()->Read(wxT("/Celeste/Threshold"), &threshold, HUGIN_CELESTE_THRESHOLD); - - // Mask resolution - 1 sets it to fine - bool t = wxConfigBase::Get()->Read(wxT("/Celeste/Filter"), HUGIN_CELESTE_FILTER); - if (t){ - //cerr <<"---Celeste--- Using small filter" << endl; - gRadius = 10; - spacing = (gRadius * 2) + 1; - } - - // Image to analyse - string imagefile = m_pano->getImage(imgNr).getFilename(); + // SVM model file + if ( wxFile::Exists(wxstrModelFileName) ) + { - // Print progress - MainFrame::Get()->SetStatusText(_("searching for cloud-like control points..."),0); + for (unsigned int imgNr = 0; imgNr < m_pano->getNrOfImages() - 1; imgNr++){ - // Vector to store Gabor filter responses - vector<double> svm_responses_ap; - string mask_format = "PNG"; - unsigned int mask = 0; - - // Get responses - get_gabor_response(imagefile,mask,modelfile,threshold,mask_format,svm_responses_ap); + double progress_amount = (double)1/m_pano->getNrOfImages(); + progress.increaseProgress(progress_amount, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); - // Print SVM results - for (unsigned int c = 0; c < svm_responses_ap.size(); c++){ - - unsigned int pNr = global_cp_nr[c] - removed; - - if (svm_responses_ap[c] >= threshold){ + const CPVector & controlPoints = m_pano->getCtrlPoints(); + unsigned int removed = 0; - DEBUG_DEBUG("about to delete point " << pNr); - GlobalCmdHist::getInstance().addCommand( - new PT::RemoveCtrlPointCmd(*m_pano,pNr) - ); - removed++; - cout << "CP: " << c << "\tSVM Score: " << svm_responses_ap[c] << "\tremoved." << endl; - } - } - if (removed) cout << endl; + gNumLocs = 0; + for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { + PT::ControlPoint point = *it; + if (imgNr == point.image1Nr){ + gNumLocs++; + } + if (imgNr == point.image2Nr){ + gNumLocs++; + } + } - } - }else{ - wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); - } - - MainFrame::Get()->SetStatusText(_(""),0); - - // reset locale + // Create the storage matrix + gLocations = CreateMatrix( (int)0, gNumLocs, 2); + unsigned int glocation_counter = 0; + unsigned int cp_counter = 0; + vector<unsigned int> global_cp_nr; + + for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { + PT::ControlPoint point = *it; + if (imgNr == point.image1Nr){ + gLocations[glocation_counter][0] = (int)point.x1; + gLocations[glocation_counter][1] = (int)point.y1; + global_cp_nr.push_back(cp_counter); + glocation_counter++; + } + if (imgNr == point.image2Nr){ + gLocations[glocation_counter][0] = (int)point.x2; + gLocations[glocation_counter][1] = (int)point.y2; + global_cp_nr.push_back(cp_counter); + glocation_counter++; + } + cp_counter++; + } + + // SVM threshold + double threshold = HUGIN_CELESTE_THRESHOLD; + wxConfigBase::Get()->Read(wxT("/Celeste/Threshold"), &threshold, HUGIN_CELESTE_THRESHOLD); + + // Mask resolution - 1 sets it to fine + bool t = wxConfigBase::Get()->Read(wxT("/Celeste/Filter"), HUGIN_CELESTE_FILTER); + if (t){ + //cerr <<"---Celeste--- Using small filter" << endl; + gRadius = 10; + spacing = (gRadius * 2) + 1; + } + + // Image to analyse + string imagefile = m_pano->getImage(imgNr).getFilename(); + + // Print progress + MainFrame::Get()->SetStatusText(_("searching for cloud-like control points..."),0); + + // Vector to store Gabor filter responses + vector<double> svm_responses_ap; + string mask_format = "PNG"; + unsigned int mask = 0; + + // Get responses + get_gabor_response(imagefile, mask, strModelFileName, threshold, mask_format, svm_responses_ap); + + // Print SVM results + for (unsigned int c = 0; c < svm_responses_ap.size(); c++){ + + unsigned int pNr = global_cp_nr[c] - removed; + + if (svm_responses_ap[c] >= threshold){ + + DEBUG_DEBUG("about to delete point " << pNr); + GlobalCmdHist::getInstance().addCommand( + new PT::RemoveCtrlPointCmd(*m_pano,pNr) + ); + removed++; + cout << "CP: " << c << "\tSVM Score: " << svm_responses_ap[c] << "\tremoved." << endl; + } + } + if (removed) cout << endl; + + } + }else{ + wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); + } + + MainFrame::Get()->SetStatusText(_(""),0); + + // reset locale setlocale(LC_NUMERIC,old_locale); - + } DEBUG_TRACE("Finished running Celeste"); @@ -547,9 +538,9 @@ unsigned i2 = *(comps[1].begin()); MainFrame::Get()->ShowCtrlPointEditor( i1, i2); // display message box with - + wxMessageBox(wxString::Format(_("Warning %d unconnected image groups found:"), n) + Components2Str(comps) + wxT("\n") - + _("Please create control points between unconnected images using the Control Points tab.\n\nAfter adding the points, press the \"Align\" button again"),_("Error"), wxOK , this); + + _("Please create control points between unconnected images using the Control Points tab.\n\nAfter adding the points, press the \"Align\" button again"),_("Error"), wxOK , this); return; } @@ -624,7 +615,7 @@ // TODO: photometric optimisation. // first, ensure that vignetting and response coefficients are linked const char * varnames[] = {"Va", "Vb", "Vc", "Vd", "Vx", "Vy", - "Ra", "Rb", "Rc", "Rd", "Re", 0}; + "Ra", "Rb", "Rc", "Rd", "Re", 0}; for (size_t i = 0; i < optPano.getNrOfLenses(); i++) { const Lens & l = optPano.getLens(i); @@ -681,17 +672,17 @@ vigra::FRGBImage * img = new FRGBImage; if (!e) { wxMessageBox(_("Error: could not load all images"), - _("Error"),wxOK,this); + _("Error"),wxOK,this); return; } if (e->origType == "UINT8") { reduceToNextLevel(*(e->image8), *img); transformImage(vigra::srcImageRange(*img), vigra::destImage(*img), - vigra::functor::Arg1()/vigra::functor::Param(255.0)); + vigra::functor::Arg1()/vigra::functor::Param(255.0)); } else if (e->origType == "UINT16") { reduceToNextLevel(*(e->image16), *img); transformImage(vigra::srcImageRange(*img), vigra::destImage(*img), - vigra::functor::Arg1()/vigra::functor::Param(65535.0)); + vigra::functor::Arg1()/vigra::functor::Param(65535.0)); } else { reduceToNextLevel(*(e->imageFloat), *img); } @@ -709,7 +700,7 @@ } double error; smartOptimizePhotometric(optPano, poptmode, - points, *(MainFrame::Get()), error); + points, *(MainFrame::Get()), error); cout << "Auto align, photometric error: " << error *255 << " grey values" << std::endl; // calculate the mean exposure. Modified: hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-03-04 19:14:20 UTC (rev 3704) +++ hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-03-04 21:07:09 UTC (rev 3705) @@ -2134,115 +2134,107 @@ void CPEditorPanel::OnCelesteButton(wxCommandEvent & e) { - if (currentPoints.size() == 0) { - wxMessageBox(_("Cannot run celeste without at least one control point connecting the two images"),_("Error")); - cout << "Cannot run celeste without at least one control point connecting the two images" << endl; - }else{ + if (currentPoints.size() == 0) { + wxMessageBox(_("Cannot run celeste without at least one control point connecting the two images"),_("Error")); + cout << "Cannot run celeste without at least one control point connecting the two images" << endl; + }else{ - ProgressReporterDialog progress(3, _("Running Celeste"), _("Running Celeste"),this); + ProgressReporterDialog progress(3, _("Running Celeste"), _("Running Celeste"),this); - // set numeric locale to C, for correct number output - char * old_locale = setlocale(LC_NUMERIC,NULL); - setlocale(LC_NUMERIC,"C"); + // set numeric locale to C, for correct number output + char * old_locale = setlocale(LC_NUMERIC,NULL); + setlocale(LC_NUMERIC,"C"); - MainFrame::Get()->SetStatusText(_("searching for cloud-like control points..."),0); + MainFrame::Get()->SetStatusText(_("searching for cloud-like control points..."),0); - // Create the storage matrix - gNumLocs = currentPoints.size(); - gLocations = CreateMatrix( (int)0, gNumLocs, 2); - - // Load control points into gLocations - unsigned int glocation_counter = 0; - for (vector<CPoint>::const_iterator it = currentPoints.begin(); it != currentPoints.end(); ++it) { - gLocations[glocation_counter][0] = (int)it->second.x1; - gLocations[glocation_counter][1] = (int)it->second.y1; - glocation_counter++; - } - - // Get Celeste parameters - wxConfigBase *cfg = wxConfigBase::Get(); - - // SVM threshold - double threshold = HUGIN_CELESTE_THRESHOLD; - cfg->Read(wxT("/Celeste/Threshold"), &threshold, HUGIN_CELESTE_THRESHOLD); - - // Mask resolution - 1 sets it to fine - bool t = cfg->Read(wxT("/Celeste/Filter"), HUGIN_CELESTE_FILTER); - if (t){ - //cerr <<"---Celeste--- Using small filter" << endl; - gRadius = 10; - spacing = (gRadius * 2) + 1; - } + // Create the storage matrix + gNumLocs = currentPoints.size(); + gLocations = CreateMatrix( (int)0, gNumLocs, 2); - // SVM model file - #if __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE - wxString strFile; - char buf[100]; - strFile = MacGetPathToBundledResourceFile(CFSTR("celeste.model")); - strcpy( buf, (const char*) strFile.mb_str(wxConvUTF8)); - string modelfile = buf; - #else - char buf[100]; - strcpy( buf, (const char*)huginApp::Get()->GetXRCPath().mb_str(wxConvUTF8) ); - // Will this slash work on Windows? - strcat( buf, "data/"); - strcat( buf, HUGIN_CELESTE_MODEL); - string modelfile = buf; - #endif + // Load control points into gLocations + unsigned int glocation_counter = 0; + for (vector<CPoint>::const_iterator it = currentPoints.begin(); it != currentPoints.end(); ++it) { + gLocations[glocation_counter][0] = (int)it->second.x1; + gLocations[glocation_counter][1] = (int)it->second.y1; + glocation_counter++; + } - // SVM model file - if (! wxFile::Exists(wxString::FromAscii(buf)) ) { - wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); - return ; - } + // Get Celeste parameters + wxConfigBase *cfg = wxConfigBase::Get(); - // Image to analyse - string imagefile = m_pano->getImage(m_leftImageNr).getFilename(); + // SVM threshold + double threshold = HUGIN_CELESTE_THRESHOLD; + cfg->Read(wxT("/Celeste/Threshold"), &threshold, HUGIN_CELESTE_THRESHOLD); - DEBUG_TRACE("Running Celeste"); - - progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); + // Mask resolution - 1 sets it to fine + bool t = (cfg->Read(wxT("/Celeste/Filter"), HUGIN_CELESTE_FILTER) != 0); + if (t) + { + //cerr <<"---Celeste--- Using small filter" << endl; + gRadius = 10; + spacing = (gRadius * 2) + 1; + } - // Vector to store Gabor filter responses - vector<double> svm_responses_cp; - string mask_format = "PNG"; - unsigned int mask = 0; + // determine file name of SVM model file + // get XRC path from application + wxString wxstrModelFileName = huginApp::Get()->GetXRCPath() + wxT("data/") + wxT(HUGIN_CELESTE_MODEL); + // convert wxString to string + string strModelFileName(wxstrModelFileName.mb_str(wxConvUTF8)); - // Get responses - get_gabor_response(imagefile,mask,modelfile,threshold,mask_format,svm_responses_cp); + // SVM model file + if (! wxFile::Exists(wxstrModelFileName) ) { + wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); + return ; + } - progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); + // Image to analyse + string imagefile = m_pano->getImage(m_leftImageNr).getFilename(); - // Print SVM results - unsigned int removed = 0; - for (unsigned int c = 0; c < svm_responses_cp.size(); c++){ - - if (svm_responses_cp[c] >= threshold){ + DEBUG_TRACE("Running Celeste"); - unsigned int pNr = localPNr2GlobalPNr((c - removed)); - DEBUG_DEBUG("about to delete point " << pNr); - GlobalCmdHist::getInstance().addCommand( - new PT::RemoveCtrlPointCmd(*m_pano,pNr) - ); - removed++; - cout << "CP: " << c << "\tSVM Score: " << svm_responses_cp[c] << "\tremoved." << endl; - } - if (removed) cout << endl; - } + progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); - progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); + // Vector to store Gabor filter responses + vector<double> svm_responses_cp; + string mask_format = "PNG"; + unsigned int mask = 0; - wxMessageBox(wxString::Format(_("Finished running Celeste.\n%d cloud-like control points removed."), - removed), _("Celeste"), wxICON_EXCLAMATION, this); + // Get responses + get_gabor_response(imagefile, mask, strModelFileName, threshold, mask_format, svm_responses_cp); - DEBUG_TRACE("Finished running Celeste"); + progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); - MainFrame::Get()->SetStatusText(_(""),0); + // Print SVM results + unsigned int removed = 0; + for (unsigned int c = 0; c < svm_responses_cp.size(); c++){ - // reset locale - setlocale(LC_NUMERIC,old_locale); - - } + if (svm_responses_cp[c] >= threshold){ + + unsigned int pNr = localPNr2GlobalPNr((c - removed)); + DEBUG_DEBUG("about to delete point " << pNr); + GlobalCmdHist::getInstance().addCommand( + new PT::RemoveCtrlPointCmd(*m_pano,pNr) + ); + removed++; + cout << "CP: " << c << "\tSVM Score: " << svm_responses_cp[c] << "\tremoved." << endl; + } + if (removed) + { + cout << endl; + } + } + + progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); + + wxMessageBox(wxString::Format(_("Removed %d control points"), removed), _("Celeste result"),wxOK|wxICON_INFORMATION,this); + + DEBUG_TRACE("Finished running Celeste"); + + MainFrame::Get()->SetStatusText(_(""),0); + + // reset locale + setlocale(LC_NUMERIC,old_locale); + } } FDiff2D CPEditorPanel::LocalFineTunePoint(unsigned int srcNr, Modified: hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2009-03-04 19:14:20 UTC (rev 3704) +++ hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2009-03-04 21:07:09 UTC (rev 3705) @@ -729,141 +729,134 @@ void ImagesPanel::OnCelesteButton(wxCommandEvent & e) { - const UIntSet & selImg = images_list->GetSelected(); - unsigned int total_removed = 0; - - if ( selImg.size() == 0) { - DEBUG_WARN("Cannot run celeste without at least one point"); - }else{ - - ProgressReporterDialog progress(selImg.size()+1, _("Running Celeste"), _("Running Celeste"),this); - - DEBUG_TRACE("Running Celeste"); - // set numeric locale to C, for correct number output - char * old_locale = setlocale(LC_NUMERIC,NULL); - setlocale(LC_NUMERIC,"C"); + const UIntSet & selImg = images_list->GetSelected(); + unsigned int total_removed = 0; - // SVM model file - #if __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE - wxString strFile; - char buf[100]; - strFile = MacGetPathToBundledResourceFile(CFSTR("celeste.model")); - strcpy( buf, (const char*) strFile.mb_str(wxConvUTF8)); - string modelfile = buf; - #else - char buf[100]; - strcpy( buf, (const char*)huginApp::Get()->GetXRCPath().mb_str(wxConvUTF8) ); - // Will this slash work on Windows? - strcat( buf, "data/"); - strcat( buf, HUGIN_CELESTE_MODEL); - string modelfile = buf; - #endif + if ( selImg.size() == 0) + { + DEBUG_WARN("Cannot run celeste without at least one point"); + } + else + { + ProgressReporterDialog progress(selImg.size()+1, _("Running Celeste"), _("Running Celeste"),this); - // SVM model file - if (! wxFile::Exists(wxString::FromAscii(buf)) ) { - wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); - return ; - } + DEBUG_TRACE("Running Celeste"); + // set numeric locale to C, for correct number output + char * old_locale = setlocale(LC_NUMERIC,NULL); + setlocale(LC_NUMERIC,"C"); - for (UIntSet::const_iterator itr = selImg.begin(); itr != selImg.end(); ++itr) { + // determine file name of SVM model file + // get XRC path from application + wxString wxstrModelFileName = huginApp::Get()->GetXRCPath() + wxT("data/") + wxT(HUGIN_CELESTE_MODEL); + // convert wxString to string + string strModelFileName(wxstrModelFileName.mb_str(wxConvUTF8)); - progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); + // SVM model file + if (! wxFile::Exists(wxstrModelFileName) ) { + wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); + return ; + } - const CPVector & controlPoints = pano->getCtrlPoints(); - unsigned int removed = 0; - const unsigned int imgNr = *itr; - - gNumLocs = 0; - for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { - PT::ControlPoint point = *it; - if (imgNr == point.image1Nr){ - gNumLocs++; - } - if (imgNr == point.image2Nr){ - gNumLocs++; - } - } - - // Create the storage matrix - gLocations = CreateMatrix( (int)0, gNumLocs, 2); - unsigned int glocation_counter = 0; - unsigned int cp_counter = 0; - vector<unsigned int> global_cp_nr; - - for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { - PT::ControlPoint point = *it; - - if (imgNr == point.image1Nr){ - //cout << "---imgNr = " << imgNr << " point.image1Nr = " << point.image1Nr << endl; - gLocations[glocation_counter][0] = (int)point.x1; - gLocations[glocation_counter][1] = (int)point.y1; - global_cp_nr.push_back(cp_counter); - glocation_counter++; - } - if (imgNr == point.image2Nr){ - //cout << "---imgNr = " << imgNr << " point.image1Nr = " << point.image1Nr << endl; - gLocations[glocation_counter][0] = (int)point.x2; - gLocations[glocation_counter][1] = (int)point.y2; - global_cp_nr.push_back(cp_counter); - glocation_counter++; - } - cp_counter++; - } - - // SVM threshold - double threshold = HUGIN_CELESTE_THRESHOLD; - wxConfigBase::Get()->Read(wxT("/Celeste/Threshold"), &threshold, HUGIN_CELESTE_THRESHOLD); - - // Mask resolution - 1 sets it to fine - bool t = wxConfigBase::Get()->Read(wxT("/Celeste/Filter"), HUGIN_CELESTE_FILTER); - if (t){ - //cerr <<"---Celeste--- Using small filter" << endl; - gRadius = 10; - spacing = (gRadius * 2) + 1; - } - - // Image to analyse - string imagefile = pano->getImage(*itr).getFilename(); + for (UIntSet::const_iterator itr = selImg.begin(); itr != selImg.end(); ++itr) { - // Print progress - MainFrame::Get()->SetStatusText(_("searching for cloud-like control points..."),0); + progress.increaseProgress(1.0, std::string(wxString(_("Running Celeste")).mb_str(wxConvLocal))); - // Vector to store Gabor filter responses - vector<double> svm_responses_im; - string mask_format = "PNG"; - unsigned int mask = 0; - - // Get responses - get_gabor_response(imagefile,mask,modelfile,threshold,mask_format,svm_responses_im); - - MainFrame::Get()->SetStatusText(_("classifying control points..."),0); - - // Print SVM results - for (unsigned int c = 0; c < svm_responses_im.size(); c++){ - - unsigned int pNr = global_cp_nr[c] - removed; - - if (svm_responses_im[c] >= threshold){ + const CPVector & controlPoints = pano->getCtrlPoints(); + unsigned int removed = 0; + const unsigned int imgNr = *itr; - DEBUG_DEBUG("about to delete point " << pNr); - GlobalCmdHist::getInstance().addCommand( - new PT::RemoveCtrlPointCmd(*pano,pNr) - ); - removed++; - total_removed++; - cout << "CP: " << c << "\tSVM Score: " << svm_responses_im[c] << "\tremoved." << endl; - } - } - if (removed) cout << endl; - } - - MainFrame::Get()->SetStatusText(_(""),0); - - // reset locale - setlocale(LC_NUMERIC,old_locale); - } - - wxMessageBox(wxString::Format(_("Removed %d control points"), total_removed), _("Celeste result"),wxOK|wxICON_INFORMATION,this); - + gNumLocs = 0; + for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { + PT::ControlPoint point = *it; + if (imgNr == point.image1Nr){ + gNumLocs++; + } + if (imgNr == point.image2Nr){ + gNumLocs++; + } + } + + // Create the storage matrix + gLocations = CreateMatrix( (int)0, gNumLocs, 2); + unsigned int glocation_counter = 0; + unsigned int cp_counter = 0; + vector<unsigned int> global_cp_nr; + + for (PT::CPVector::const_iterator it = controlPoints.begin(); it != controlPoints.end(); ++it) { + PT::ControlPoint point = *it; + + if (imgNr == point.image1Nr){ + //cout << "---imgNr = " << imgNr << " point.image1Nr = " << point.image1Nr << endl; + gLocations[glocation_counter][0] = (int)point.x1; + gLocations[glocation_counter][1] = (int)point.y1; + global_cp_nr.push_back(cp_counter); + glocation_counter++; + } + if (imgNr == point.image2Nr){ + //cout << "---imgNr = " << imgNr << " point.image1Nr = " << point.image1Nr << endl; + gLocations[glocation_counter][0] = (int)point.x2; + gLocations[glocation_counter][1] = (int)point.y2; + global_cp_nr.push_back(cp_counter); + glocation_counter++; + } + cp_counter++; + } + + // SVM threshold + double threshold = HUGIN_CELESTE_THRESHOLD; + wxConfigBase::Get()->Read(wxT("/Celeste/Threshold"), &threshold, HUGIN_CELESTE_THRESHOLD); + + // Mask resolution - 1 sets it to fine + bool t = wxConfigBase::Get()->Read(wxT("/Celeste/Filter"), HUGIN_CELESTE_FILTER); + if (t){ + //cerr <<"---Celeste--- Using small filter" << endl; + gRadius = 10; + spacing = (gRadius * 2) + 1; + } + + // Image to analyse + string imagefile = pano->getImage(*itr).getFilename(); + + // Print progress + MainFrame::Get()->SetStatusText(_("searching for cloud-like control points..."),0); + + // Vector to store Gabor filter responses + vector<double> svm_responses_im; + string mask_format = "PNG"; + unsigned int mask = 0; + + // Get responses + get_gabor_response(imagefile, mask, strModelFileName, threshold, mask_format, svm_responses_im); + + MainFrame::Get()->SetStatusText(_("classifying control points..."),0); + + // Print SVM results + for (unsigned int c = 0; c < svm_responses_im.size(); c++){ + + unsigned int pNr = global_cp_nr[c] - removed; + + if (svm_responses_im[c] >= threshold){ + + DEBUG_DEBUG("about to delete point " << pNr); + GlobalCmdHist::getInstance().addCommand( + new PT::RemoveCtrlPointCmd(*pano,pNr) + ); + removed++; + total_removed++; + cout << "CP: " << c << "\tSVM Score: " << svm_responses_im[c] << "\tremoved." << endl; + } + } + if (removed) + { + cout << endl; + } + } + MainFrame::Get()->SetStatusText(_(""),0); + + // reset locale + setlocale(LC_NUMERIC,old_locale); + } + + wxMessageBox(wxString::Format(_("Removed %d control points"), total_removed), _("Celeste result"),wxOK|wxICON_INFORMATION,this); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |