本文整理汇总了C++中UIntSet类的典型用法代码示例。如果您正苦于以下问题:C++ UIntSet类的具体用法?C++ UIntSet怎么用?C++ UIntSet使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了UIntSet类的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: stackPixel
//now you can do dynamic programming, look thinks up on fly
bool CalculateOptimalROI::stackPixel(int i, int j, UIntSet &stack)
{
bool inside = intersection; // start with true for intersection mode and with false for union mode
//check that pixel at each place
for(UIntSet::const_iterator it=stack.begin();it!=stack.end();it++)
{
double xd,yd;
if(transfMap[*it]->transformImgCoord(xd,yd,(double)i,(double)j))
{
if(o_panorama.getImage(*it).isInside(vigra::Point2D(xd,yd)))
{
if (!intersection) {
//if found in a single image, short cut out
inside=true;
break;
}
}
else {
if (intersection) {
//outside of at least one image - return false
inside=false;
break;
}
}
}
}
return inside;
}
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:30,代码来源:CalculateOptimalROI.cpp
示例2: AddComponentGlyphs
EStatusCode CFFEmbeddedFontWriter::AddDependentGlyphs(UIntVector& ioSubsetGlyphIDs)
{
EStatusCode status = PDFHummus::eSuccess;
UIntSet glyphsSet;
UIntVector::iterator it = ioSubsetGlyphIDs.begin();
bool hasCompositeGlyphs = false;
for(;it != ioSubsetGlyphIDs.end() && PDFHummus::eSuccess == status; ++it)
{
bool localHasCompositeGlyphs;
status = AddComponentGlyphs(*it,glyphsSet,localHasCompositeGlyphs);
hasCompositeGlyphs |= localHasCompositeGlyphs;
}
if(hasCompositeGlyphs)
{
UIntSet::iterator itNewGlyphs;
for(it = ioSubsetGlyphIDs.begin();it != ioSubsetGlyphIDs.end(); ++it)
glyphsSet.insert(*it);
ioSubsetGlyphIDs.clear();
for(itNewGlyphs = glyphsSet.begin(); itNewGlyphs != glyphsSet.end(); ++itNewGlyphs)
ioSubsetGlyphIDs.push_back(*itNewGlyphs);
sort(ioSubsetGlyphIDs.begin(),ioSubsetGlyphIDs.end());
}
return status;
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:29,代码来源:CFFEmbeddedFontWriter.cpp
示例3: DEBUG_TRACE
void OptimizePhotometricPanel::OnOptimizeButton(wxCommandEvent & e)
{
DEBUG_TRACE("");
// run optimizer
// take the OptimizeVector from somewhere.
//OptimizeVector optvars = getOptimizeVector();
//m_pano->setOptimizeVector(optvars);
UIntSet imgs;
if (m_only_active_images_cb->IsChecked()) {
// use only selected images.
imgs = m_pano->getActiveImages();
if (imgs.size() == 0) {
//FIXME: Pop-up a dialog stating no images have been selected for optimization.
return;
}
} else {
for (unsigned int i = 0 ; i < m_pano->getNrOfImages(); i++) {
imgs.insert(i);
}
}
runOptimizer(imgs);
}
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:25,代码来源:OptimizePhotometricPanel.cpp
示例4: PTOptEstimator
PTOptEstimator(PanoramaData & pano, int i1, int i2, double maxError,
bool optHFOV, bool optB)
{
m_maxError = maxError;
UIntSet imgs;
imgs.insert(i1);
imgs.insert(i2);
m_localPano = (pano.getNewSubset(imgs)); // don't forget to delete
m_li1 = (i1 < i2) ? 0 : 1;
m_li2 = (i1 < i2) ? 1 : 0;
// get control points
m_cps = m_localPano->getCtrlPoints();
// only use 2D control points
BOOST_FOREACH(ControlPoint & kp, m_cps) {
if (kp.mode == ControlPoint::X_Y) {
m_xy_cps.push_back(kp);
}
}
if (optHFOV)
m_optvars.push_back(OptVarSpec(0,std::string("v")));
if (optB)
m_optvars.push_back(OptVarSpec(0,std::string("b")));
m_optvars.push_back(OptVarSpec(m_li2,"r"));
m_optvars.push_back(OptVarSpec(m_li2,"p"));
m_optvars.push_back(OptVarSpec(m_li2,"y"));
if (optHFOV)
m_optvars.push_back(OptVarSpec(0,"v"));
if (optB)
m_optvars.push_back(OptVarSpec(0,"b"));
/** optimisation for first pass */
m_opt_first_pass.resize(2);
m_opt_first_pass[1].insert("r");
m_opt_first_pass[1].insert("p");
m_opt_first_pass[1].insert("y");
/** optimisation for second pass */
if (optHFOV || optB) {
m_opt_second_pass = m_opt_first_pass;
if (optHFOV)
m_opt_second_pass[0].insert("v");
if (optB)
m_opt_second_pass[0].insert("b");
}
// number of points required for estimation
m_numForEstimate = (m_optvars.size()+1)/2;
// extract initial parameters from pano
m_initParams.resize(m_optvars.size());
int i=0;
BOOST_FOREACH(OptVarSpec & v, m_optvars) {
m_initParams[i] = v.get(*m_localPano);
DEBUG_DEBUG("get init var: " << v.m_name << ", " << v.m_img << ": " << m_initParams[i]);
i++;
}
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:58,代码来源:PTOptimizer.cpp
示例5: getImagesinROI
UIntSet getImagesinROI (const PanoramaData& pano, const UIntSet activeImages)
{
UIntSet images;
PanoramaOptions opts = pano.getOptions();
for (UIntSet::const_iterator it = activeImages.begin(); it != activeImages.end(); ++it)
{
vigra::Rect2D roi = estimateOutputROI(pano, opts, *it);
if (! (roi.isEmpty())) {
images.insert(*it);
}
}
return images;
}
开发者ID:TopPano,项目名称:hugin_lite,代码行数:13,代码来源:LayerStacks.cpp
示例6: DEBUG_INFO
void AssistantPanel::OnCropFactorChanged(wxCommandEvent & e)
{
wxString text = m_cropFactorText->GetValue();
DEBUG_INFO("crop factor: " << text.mb_str(wxConvLocal));
double val;
if (!str2double(text, val)) {
return;
}
UIntSet images;
images.insert(0);
GlobalCmdHist::getInstance().addCommand(
new PT::UpdateCropFactorCmd(*m_pano,images,val)
);
}
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:15,代码来源:AssistantPanel.cpp
示例7: AddComponentGlyphs
bool TrueTypeEmbeddedFontWriter::AddComponentGlyphs(unsigned int inGlyphID,UIntSet& ioComponents)
{
GlyphEntry* glyfTableEntry;
UIntList::iterator itComponentGlyphs;
bool isComposite = false;
if(inGlyphID >= mTrueTypeInput.mMaxp.NumGlyphs)
{
TRACE_LOG2("TrueTypeEmbeddedFontWriter::AddComponentGlyphs, error, requested glyph index %ld is larger than the maximum glyph index for this font which is %ld. ",inGlyphID,mTrueTypeInput.mMaxp.NumGlyphs-1);
return false;
}
glyfTableEntry = mTrueTypeInput.mGlyf[inGlyphID];
if(glyfTableEntry != NULL && glyfTableEntry->mComponentGlyphs.size() > 0)
{
isComposite = true;
for(itComponentGlyphs = glyfTableEntry->mComponentGlyphs.begin();
itComponentGlyphs != glyfTableEntry->mComponentGlyphs.end();
++itComponentGlyphs)
{
ioComponents.insert(*itComponentGlyphs);
AddComponentGlyphs(*itComponentGlyphs,ioComponents);
}
}
return isComposite;
}
开发者ID:CornerZhang,项目名称:PDF-Writer,代码行数:26,代码来源:TrueTypeEmbeddedFontWriter.cpp
示例8: OnLoadLens
void AssistantPanel::OnLoadLens(wxCommandEvent & e)
{
unsigned int imgNr = 0;
unsigned int lensNr = m_variable_groups->getLenses().getPartNumber(imgNr);
// get all images with the current lens.
UIntSet imgs;
for (unsigned int i = 0; i < m_pano->getNrOfImages(); i++)
{
if (m_variable_groups->getLenses().getPartNumber(i) == lensNr)
{
imgs.insert(i);
};
}
PT::PanoCommand* cmd=NULL;
if(ApplyLensParameters(this,m_pano,imgs,cmd))
{
GlobalCmdHist::getInstance().addCommand(cmd);
};
}
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:19,代码来源:AssistantPanel.cpp
示例9: GetSelectedProjection
void AssistantPanel::OnLensTypeChanged (wxCommandEvent & e)
{
// uses enum Lens::LensProjectionFormat from PanoramaMemento.h
size_t var = GetSelectedProjection(m_lensTypeChoice);
Lens lens = m_variable_groups->getLens(0);
if (lens.getProjection() != (Lens::LensProjectionFormat) var) {
//double crop = lens.getCropFactor();
double fl = lens.getFocalLength();
UIntSet imgs;
imgs.insert(0);
std::vector<PanoCommand*> commands;
commands.push_back(
new PT::ChangeImageProjectionCmd(
*m_pano,
imgs,
(HuginBase::SrcPanoImage::Projection) var
)
);
commands.push_back(new PT::UpdateFocalLengthCmd(*m_pano, imgs, fl));
GlobalCmdHist::getInstance().addCommand(
new PT::CombinedPanoCommand(*m_pano, commands));
}
}
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:24,代码来源:AssistantPanel.cpp
示例10: GetProgPath
CPVector AutoPanoSift::automatch(CPDetectorSetting &setting, Panorama & pano, const UIntSet & imgs,
int nFeatures, int & ret_value, wxWindow *parent)
{
CPVector cps;
if (imgs.size() == 0) {
return cps;
}
// create suitable command line..
wxString autopanoExe = GetProgPath(setting.GetProg());
if(setting.IsTwoStepDetector())
{
std::vector<wxString> keyFiles(pano.getNrOfImages());
cps=automatch(setting, pano, imgs, nFeatures, keyFiles, ret_value, parent);
Cleanup(setting, pano, imgs, keyFiles, parent);
return cps;
};
wxString autopanoArgs = setting.GetArgs();
// TODO: create a secure temporary filename here
wxString ptofile = wxFileName::CreateTempFileName(wxT("ap_res"));
autopanoArgs.Replace(wxT("%o"), ptofile);
wxString tmp;
tmp.Printf(wxT("%d"), nFeatures);
autopanoArgs.Replace(wxT("%p"), tmp);
SrcPanoImage firstImg = pano.getSrcImage(*imgs.begin());
tmp.Printf(wxT("%f"), firstImg.getHFOV());
autopanoArgs.Replace(wxT("%v"), tmp);
tmp.Printf(wxT("%d"), (int) firstImg.getProjection());
autopanoArgs.Replace(wxT("%f"), tmp);
long idx = autopanoArgs.Find(wxT("%namefile")) ;
DEBUG_DEBUG("find %namefile in '"<< autopanoArgs.mb_str(wxConvLocal) << "' returned: " << idx);
bool use_namefile = idx >=0;
idx = autopanoArgs.Find(wxT("%i"));
DEBUG_DEBUG("find %i in '"<< autopanoArgs.mb_str(wxConvLocal) << "' returned: " << idx);
bool use_params = idx >=0;
idx = autopanoArgs.Find(wxT("%s"));
bool use_inputscript = idx >=0;
if (! (use_namefile || use_params || use_inputscript)) {
CPMessage(_("Please use %namefile, %i or %s to specify the input files for the control point detector"),
_("Error in control point detector command"), parent);
return cps;
}
wxFile namefile;
wxString namefile_name;
if (use_namefile) {
// create temporary file with image names.
namefile_name = wxFileName::CreateTempFileName(wxT("ap_imgnames"), &namefile);
DEBUG_DEBUG("before replace %namefile: " << autopanoArgs.mb_str(wxConvLocal));
autopanoArgs.Replace(wxT("%namefile"), namefile_name);
DEBUG_DEBUG("after replace %namefile: " << autopanoArgs.mb_str(wxConvLocal));
for(UIntSet::const_iterator it = imgs.begin(); it != imgs.end(); it++)
{
namefile.Write(wxString(pano.getImage(*it).getFilename().c_str(), HUGIN_CONV_FILENAME));
namefile.Write(wxT("\r\n"));
}
// close namefile
if (namefile_name != wxString(wxT(""))) {
namefile.Close();
}
} else {
string imgFiles;
for(UIntSet::const_iterator it = imgs.begin(); it != imgs.end(); it++)
{
imgFiles.append(" ").append(quoteFilename(pano.getImage(*it).getFilename()));
}
autopanoArgs.Replace(wxT("%i"), wxString (imgFiles.c_str(), HUGIN_CONV_FILENAME));
}
wxString ptoinfile_name;
if (use_inputscript) {
wxFile ptoinfile;
ptoinfile_name = wxFileName::CreateTempFileName(wxT("ap_inproj"));
autopanoArgs.Replace(wxT("%s"), ptoinfile_name);
ofstream ptoinstream(ptoinfile_name.mb_str(wxConvFile));
//delete all existing control points in temp project
//otherwise the existing control points will be loaded again
Panorama tempPano=pano.duplicate();
CPVector emptyCPV;
tempPano.setCtrlPoints(emptyCPV);
tempPano.printPanoramaScript(ptoinstream, tempPano.getOptimizeVector(), tempPano.getOptions(), imgs, false);
}
#ifdef __WXMSW__
if (autopanoArgs.size() > 32000) {
CPMessage(_("Command line for control point detector too long.\nThis is a Windows limitation\nPlease select less images, or place the images in a folder with\na shorter pathname"),
_("Too many images selected"), parent );
return cps;
}
#endif
wxString cmd = autopanoExe + wxT(" ") + autopanoArgs;
DEBUG_DEBUG("Executing: " << autopanoExe.mb_str(wxConvLocal) << " " << autopanoArgs.mb_str(wxConvLocal));
wxArrayString arguments = wxCmdLineParser::ConvertStringToArgs(autopanoArgs);
//.........这里部分代码省略.........
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:101,代码来源:AutoCtrlPointCreator.cpp
示例11: automatch
CPVector AutoPanoKolor::automatch(CPDetectorSetting &setting, Panorama & pano, const UIntSet & imgs,
int nFeatures, int & ret_value, wxWindow *parent)
{
CPVector cps;
wxString autopanoExe = setting.GetProg();
// write default autopano.kolor.com flags
wxString autopanoArgs = setting.GetArgs();
string imgFiles;
for(UIntSet::const_iterator it = imgs.begin(); it != imgs.end(); it++)
{
imgFiles.append(" ").append(quoteFilename(pano.getImage(*it).getFilename()));
}
wxString ptofilepath = wxFileName::CreateTempFileName(wxT("ap_res"));
wxFileName ptofn(ptofilepath);
wxString ptofile = ptofn.GetFullName();
autopanoArgs.Replace(wxT("%o"), ptofile);
wxString tmp;
tmp.Printf(wxT("%d"), nFeatures);
autopanoArgs.Replace(wxT("%p"), tmp);
SrcPanoImage firstImg = pano.getSrcImage(*imgs.begin());
tmp.Printf(wxT("%f"), firstImg.getHFOV());
autopanoArgs.Replace(wxT("%v"), tmp);
tmp.Printf(wxT("%d"), (int) firstImg.getProjection());
autopanoArgs.Replace(wxT("%f"), tmp);
autopanoArgs.Replace(wxT("%i"), wxString (imgFiles.c_str(), HUGIN_CONV_FILENAME));
wxString tempdir = ptofn.GetPath();
autopanoArgs.Replace(wxT("%d"), ptofn.GetPath());
wxString cmd;
cmd.Printf(wxT("%s %s"), wxQuoteFilename(autopanoExe).c_str(), autopanoArgs.c_str());
#ifdef __WXMSW__
if (cmd.size() > 32766) {
CPMessage(_("Command line for control point detector too long.\nThis is a Windows limitation\nPlease select less images, or place the images in a folder with\na shorter pathname"),
_("Too many images selected"), parent);
return cps;
}
#endif
DEBUG_DEBUG("Executing: " << cmd.c_str());
wxArrayString arguments = wxCmdLineParser::ConvertStringToArgs(cmd);
if (arguments.GetCount() > 127) {
DEBUG_ERROR("Too many arguments for call to wxExecute()");
DEBUG_ERROR("Try using the %s parameter in preferences");
CPMessage(wxString::Format(_("Too many arguments (images). Try using the %%s parameter in preferences.\n\n Could not execute command: %s"), autopanoExe.c_str()), _("wxExecute Error"), parent);
return cps;
}
ret_value = 0;
// use MyExternalCmdExecDialog
ret_value = CPExecute(autopanoExe, autopanoArgs, _("finding control points"), parent);
if (ret_value == HUGIN_EXIT_CODE_CANCELLED) {
return cps;
} else if (ret_value == -1) {
CPMessage( wxString::Format(_("Could not execute command: %s"),cmd.c_str()), _("wxExecute Error"), parent);
return cps;
} else if (ret_value > 0) {
CPMessage(wxString::Format(_("Command: %s\nfailed with error code: %d"),cmd.c_str(),ret_value),
_("wxExecute Error"), parent);
return cps;
}
ptofile = ptofn.GetFullPath();
ptofile.append(wxT("0.oto"));
if (! wxFileExists(ptofile.c_str()) ) {
CPMessage(wxString::Format(_("Could not open %s for reading\nThis is an indicator that the control point detector call failed,\nor incorrect command line parameters have been used.\n\nExecuted command: %s"),ptofile.c_str(),cmd.c_str()),
_("Control point detector failure"), parent );
return cps;
}
// read and update control points
cps = readUpdatedControlPoints((const char *)ptofile.mb_str(HUGIN_CONV_FILENAME), pano);
if (!wxRemoveFile(ptofile)) {
DEBUG_DEBUG("could not remove temporary file: " << ptofile.c_str());
}
return cps;
}
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:82,代码来源:AutoCtrlPointCreator.cpp
示例12: main
int main(int argc, char *argv[])
{
// parse arguments
const char * optstring = "o:hn:pws";
int c;
string output;
bool onlyPair = false;
bool wholePano = false;
bool skipOptimisation = false;
double n = 2.0;
while ((c = getopt (argc, argv, optstring)) != -1)
{
switch (c) {
case 'o':
output = optarg;
break;
case 'h':
usage(argv[0]);
return 0;
case 'n':
n = atof(optarg);
if(n==0)
{
cerr <<"Invalid parameter: " << optarg << " is not valid real number" << endl;
return 1;
};
if (n<1.0)
{
cerr << "Invalid parameter: n must be at least 1" << endl;
return 1;
};
break;
case 'p':
onlyPair= true;
break;
case 'w':
wholePano = true;
break;
case 's':
skipOptimisation = true;
break;
case ':':
cerr <<"Option -n requires a number" << endl;
return 1;
break;
case '?':
break;
default:
abort ();
}
}
if (argc - optind != 1)
{
usage(argv[0]);
return 1;
};
if (onlyPair && wholePano)
{
cerr << "Options -p and -w can't used together" << endl;
return 1;
};
string input=argv[optind];
Panorama pano;
ifstream prjfile(input.c_str());
if (!prjfile.good()) {
cerr << "could not open script : " << input << endl;
return 1;
}
pano.setFilePrefix(hugin_utils::getPathPrefix(input));
DocumentData::ReadWriteError err = pano.readData(prjfile);
if (err != DocumentData::SUCCESSFUL) {
cerr << "error while parsing panos tool script: " << input << endl;
cerr << "DocumentData::ReadWriteError code: " << err << endl;
return 1;
}
size_t nrImg=pano.getNrOfImages();
if (nrImg < 2)
{
cerr << "Panorama should consist of at least two images" << endl;
return 1;
}
if (pano.getNrOfCtrlPoints() < 3)
{
cerr << "Panorama should contain at least 3 control point" << endl;
};
size_t cpremoved1=0;
UIntSet CPtoRemove;
// step 1 with pairwise optimisation
if(!wholePano)
{
CPtoRemove=getCPoutsideLimit_pair(pano,n);
if (CPtoRemove.size()>0)
//.........这里部分代码省略.........
开发者ID:TaiManProject,项目名称:Dirks_Code_V3,代码行数:101,代码来源:cpclean.cpp
示例13: main
int main(int argc, char* argv[])
{
// parse arguments
const char* optstring = "o:i:l:h";
static struct option longOptions[] =
{
{"output", required_argument, NULL, 'o' },
{"image", required_argument, NULL, 'i' },
{"lines", required_argument, NULL, 'l' },
{"help", no_argument, NULL, 'h' },
0
};
UIntSet cmdlineImages;
int c;
int optionIndex = 0;
int nrLines = 5;
string output;
while ((c = getopt_long (argc, argv, optstring, longOptions,&optionIndex)) != -1)
{
switch (c)
{
case 'o':
output = optarg;
break;
case 'h':
usage(argv[0]);
return 0;
case 'i':
{
int imgNr=atoi(optarg);
if((imgNr==0) && (strcmp(optarg,"0")!=0))
{
cerr << "Could not parse image number.";
return 1;
};
cmdlineImages.insert(imgNr);
};
break;
case 'l':
nrLines=atoi(optarg);
if(nrLines<1)
{
cerr << "Could not parse number of lines.";
return 1;
};
break;
case ':':
cerr <<"Option " << longOptions[optionIndex].name << " requires a number" << endl;
return 1;
break;
case '?':
break;
default:
abort ();
}
}
if (argc - optind != 1)
{
cout << "Warning: " << argv[0] << " can only work on one project file at one time" << endl << endl;
usage(argv[0]);
return 1;
};
string input=argv[optind];
// read panorama
Panorama pano;
ifstream prjfile(input.c_str());
if (!prjfile.good())
{
cerr << "could not open script : " << input << endl;
return 1;
}
pano.setFilePrefix(hugin_utils::getPathPrefix(input));
DocumentData::ReadWriteError err = pano.readData(prjfile);
if (err != DocumentData::SUCCESSFUL)
{
cerr << "error while parsing panos tool script: " << input << endl;
cerr << "DocumentData::ReadWriteError code: " << err << endl;
return 1;
}
if(pano.getNrOfImages()==0)
{
cerr << "error: project file does not contains any image" << endl;
cerr << "aborting processing" << endl;
return 1;
};
std::vector<size_t> imagesToProcess;
if(cmdlineImages.size()==0)
{
//no image given, process all
for(size_t i=0;i<pano.getNrOfImages();i++)
{
imagesToProcess.push_back(i);
};
}
//.........这里部分代码省略.........
开发者ID:MWisBest,项目名称:android_external_Focal,代码行数:101,代码来源:linefind.cpp
示例14: DEBUG_ASSERT
CPVector AutoPanoSiftPreAlign::automatch(CPDetectorSetting &setting, Panorama & pano, const UIntSet & imgs,
int nFeatures, std::vector<wxString> &keyFiles, int & ret_value, wxWindow *parent)
{
CPVector cps;
if (imgs.size()<2)
return cps;
DEBUG_ASSERT(keyFiles.size()==pano.getNrOfImages());
vector<UIntSet> usedImages;
usedImages.resize(pano.getNrOfImages());
if(setting.GetOption())
{
//only work on not connected image pairs
CPVector oldCps=pano.getCtrlPoints();
for(unsigned i=0;i<oldCps.size();i++)
{
if(oldCps[i].mode==ControlPoint::X_Y)
{
usedImages[oldCps[i].image1Nr].insert(oldCps[i].image2Nr);
usedImages[oldCps[i].image2Nr].insert(oldCps[i].image1Nr);
};
};
};
HuginBase::CalculateImageOverlap overlap(&pano);
overlap.calculate(10);
for(UIntSet::const_iterator it=imgs.begin();it!=imgs.end();it++)
{
UIntSet images;
images.clear();
images.insert(*it);
UIntSet::const_iterator it2=it;
for(++it2;it2!=imgs.end();it2++)
{
//check if this image pair was yet used
if(set_contains(usedImages[*it2],*it))
continue;
//now check position
if(overlap.getOverlap(*it,*it2)>0)
{
images.insert(*it2);
};
};
if(images.size()<2)
continue;
//remember image pairs for later
for(UIntSet::const_iterator img_it=images.begin();img_it!=images.end();img_it++)
for(UIntSet::const_iterator img_it2=images.begin();img_it2!=images.end();img_it2++)
usedImages[*img_it].insert(*img_it2);
AutoPanoSift matcher;
CPVector new_cps;
if(setting.IsTwoStepDetector())
new_cps=matcher.automatch(setting, pano, images, nFeatures, keyFiles, ret_value, parent);
else
new_cps=matcher.automatch(setting, pano, images, nFeatures, ret_value, parent);
if(new_cps.size()>0)
AddControlPointsWithCheck(cps,new_cps);
if(ret_value!=0)
{
Cleanup(setting, pano, imgs, keyFiles, parent);
return cps;
};
};
Cleanup(setting, pano, imgs, keyFiles, parent);
return cps;
};
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:65,代码来源:AutoCtrlPointCreator.cpp
示例15: getHDRStacks
vector<UIntSet> getHDRStacks(const PanoramaData & pano, UIntSet allImgs, PanoramaOptions opts)
{
vector<UIntSet> result;
// if no images are available, return empty result vector
if ( allImgs.empty() )
{
return result;
}
UIntSet stack;
CalculateImageOverlap overlap(&pano);
overlap.calculate(10); // we are testing 10*10=100 points
do {
unsigned srcImg = *(allImgs.begin());
stack.insert(srcImg);
allImgs.erase(srcImg);
// find all images that have a suitable overlap.
for (UIntSet::iterator it = allImgs.begin(); it != allImgs.end(); ) {
unsigned srcImg2 = *it;
++it;
if(overlap.getOverlap(srcImg,srcImg2)>opts.outputStacksMinOverlap)
{
stack.insert(srcImg2);
allImgs.erase(srcImg2);
}
}
result.push_back(stack);
stack.clear();
} while (allImgs.size() > 0);
return result;
}
开发者ID:TopPano,项目名称:hugin_lite,代码行数:35,代码来源:LayerStacks.cpp
示例16: FDiff2D
FDiff2D CalculateFOV::calcFOV(const PanoramaData& panorama)
{
if (panorama.getNrOfImages() == 0) {
// no change
return FDiff2D(panorama.getOptions().getHFOV(), panorama.getOptions().getVFOV());
}
vigra::Size2D panoSize(360*2,180*2);
// remap into minature pano.
PanoramaOptions opts;
opts.setHFOV(360);
opts.setProjection(PanoramaOptions::EQUIRECTANGULAR);
opts.setWidth(panoSize.x);
opts.setHeight(panoSize.y);
// remap image
// DGSW - make sure the type is correct
vigra::BImage panoAlpha(panoSize.x, panoSize.y,static_cast< unsigned char >(0));
// vigra::BImage panoAlpha(panoSize.x, panoSize.y,0);
Nona::RemappedPanoImage<vigra::BImage, vigra::BImage> remapped;
UIntSet activeImgs = panorama.getActiveImages();
for (UIntSet::iterator it = activeImgs.begin(); it != activeImgs.end(); ++it) {
// for (unsigned int imgNr=0; imgNr < getNrOfImages(); imgNr++) {
// DGSW FIXME - Unreferenced
// const PanoImage & img = getImage(*it);
remapped.setPanoImage(panorama.getSrcImage(*it), opts, vigra::Rect2D(0,0,panoSize.x,panoSize.y));
//remapped.setPanoImage(*this, *it, vigra::Size2D(img.getWidth(), img.getHeight()), opts);
// calculate alpha channel
remapped.calcAlpha();
// copy into global alpha channel.
vigra::copyImageIf(vigra_ext::applyRect(remapped.boundingBox(),
vigra_ext::srcMaskRange(remapped)),
vigra_ext::applyRect(remapped.boundingBox(),
vigra_ext::srcMask(remapped)),
vigra_ext::applyRect(remapped.boundingBox(),
destImage(panoAlpha)));
// vigra::ImageExportInfo imge2("c:/hugin_calcfov_alpha.png");
// exportImage(vigra::srcImageRange(panoAlpha), imge2);
}
// get field of view
FDiff2D ul,lr;
bool found = false;
ul.x = DBL_MAX;
ul.y = DBL_MAX;
lr.x = -DBL_MAX;
lr.y = -DBL_MAX;
for (int v=0; v< panoSize.y; v++) {
for (int h=0; h < panoSize.x; h++) {
if (panoAlpha(h,v)) {
// pixel is valid
if ( ul.x > h ) {
found=true;
ul.x = h;
}
if ( ul.y > v ) {
found=true;
ul.y = v;
}
if ( lr.x < h) {
found=true;
lr.x = h;
}
if ( lr.y < v) {
found=true;
lr.y = v;
}
}
}
}
if (!found) {
// if nothing found, return current fov
return FDiff2D(panorama.getOptions().getHFOV(), panorama.getOptions().getVFOV());
}
ul=ul/2.0;
lr=lr/2.0;
ul.x = ul.x - 180;
ul.y = ul.y - 90;
lr.x = lr.x - 180;
lr.y = lr.y - 90;
FDiff2D fov (2*std::max(fabs(ul.x), fabs(lr.x)), 2*std::max(fabs(ul.y), fabs(lr.y)));
if(fov.x<40)
{
fov.x+=1;
};
return fov;
}
开发者ID:MWisBest,项目名称:android_external_Focal,代码行数:88,代码来源:CalculateFOV.cpp
示例17: keyFiles
CPVector AutoPanoSiftMultiRow::automatch(CPDetectorSetting &setting, Panorama & pano, const UIntSet & imgs,
int nFeatures, int & ret_value, wxWindow *parent)
{
CPVector cps;
if (imgs.size() < 2)
{
return cps;
};
std::vector<wxString> keyFiles(pano.getNrOfImages());
//generate cp for every consecutive image pair
unsigned int counter=0;
for(UIntSet::const_iterator it = imgs.begin(); it != imgs.end(); )
{
if(counter==imgs.size()-1)
break;
counter++;
UIntSet ImagePair;
ImagePair.clear();
ImagePair.insert(*it);
it++;
ImagePair.insert(*it);
AutoPanoSift matcher;
CPVector new_cps;
new_cps.clear();
if(setting.IsTwoStepDetector())
new_cps=matcher.automatch(setting, pano, ImagePair, nFeatures, keyFiles, ret_value, parent);
else
new_cps=matcher.automatch(setting, pano, ImagePair, nFeatures, ret_value, parent);
if(new_cps.size()>0)
AddControlPointsWithCheck(cps,new_cps);
if(ret_value!=0)
{
Cleanup(setting, pano, imgs, keyFiles, parent);
return cps;
};
};
// now connect all image groups
// generate temporary panorama to add all found cps
UIntSet allImgs;
fill_set(allImgs, 0, pano.getNrOfImages()-1);
Panorama optPano=pano.getSubset(allImgs);
for (CPVector::const_iterator it=cps.begin();it!=cps.end();++it)
optPano.addCtrlPoint(*it);
CPGraph graph;
createCPGraph(optPano, graph);
CPComponents comps;
int n = findCPComponents(graph, comps);
if(n>1)
{
UIntSet ImagesGroups;
for(unsigned int i=0;i<n;i++)
{
ImagesGroups.insert(*(comps[i].begin()));
if(comps[i].size()>1)
ImagesGroups.insert(*(comps[i].rbegin()));
};
AutoPanoSift matcher;
CPVector new_cps;
if(setting.IsTwoStepDetector())
new_cps=matcher.automatch(setting, optPano, ImagesGroups, nFeatures, keyFiles, ret_value, parent);
else
new_cps=matcher.automatch(setting, optPano, ImagesGroups, nFeatures, ret_value, parent);
if(new_cps.size()>0)
AddControlPointsWithCheck(cps,new_cps,&optPano);
if(ret_value!=0)
{
Cleanup(setting, pano, imgs, keyFiles, parent);
return cps;
};
createCPGraph(optPano,graph);
n=findCPComponents(graph, comps);
};
if(n==1 && setting.GetOption())
{
//next steps happens only when all images are connected;
//now optimize panorama
PanoramaOptions opts = pano.getOptions();
opts.setProjection(PanoramaOptions::EQUIRECTANGULAR);
// calculate proper scaling, 1:1 resolution.
// Otherwise optimizer distances are meaningless.
opts.setWidth(30000, false);
opts.setHeight(15000);
optPano.setOptions(opts);
int w = optPano.calcOptimalWidth();
opts.setWidth(w);
opts.setHeight(w/2);
optPano.setOptions(opts);
//generate optimize vector, optimize only yaw and pitch
OptimizeVector optvars;
const SrcPanoImage & anchorImage = optPano.getImage(opts.optimizeReferenceImage);
for (unsigned i=0; i < optPano.getNrOfImages(); i++)
{
std::set<std::string> imgopt;
if(i==opts.optimizeReferenceImage)
{
//optimize only anchors pitch, not yaw
imgopt.insert("p");
//.........这里部分代码省略.........
开发者ID:xelmirage,项目名称:hugin-2012.0.0,代码行数:101,代码来源:AutoCtrlPointCreator.cpp
示例18: panoSize
void CenterHorizontally::centerHorizontically(PanoramaData& panorama)
{
vigra::Size2D panoSize(360,180);
// remap into minature pano.
PanoramaOptions opts;
opts.setHFOV(360);
opts.setProjection(PanoramaOptions::EQUIRECTANGULAR);
opts.setWidth(360);
opts.setHeight(180);
// remap image
vigra::BImage panoAlpha(panoSize);
Nona::RemappedPanoImage<vigra::BImage, vigra::BImage> remapped;
// use selected images.
const UIntSet allActiveImgs(panorama.getActiveImages());
if (allActiveImgs.empty())
{
// do nothing if there are no images
return;
}
//only check unlinked images
UIntSet activeImgs;
for (UIntSet::const_iterator it = allActiveImgs.begin(); it!= allActiveImgs.end(); ++it)
{
const SrcPanoImage & img=panorama.getImage(*it);
bool consider=true;
if(img.YawisLinked())
{
for(UIntSet::const_iterator it2=activeImgs.begin(); it2!=activeImgs.end(); ++it2)
{
if(img.YawisLinkedWith(panorama.getSrcImage(*it2)))
{
consider=false;
break;
};
};
};
if(consider)
activeImgs.insert(*it);
};
for (UIntSet::iterator it = activeImgs.begin(); it != activeImgs.end(); ++it)
{
remapped.setPanoImage(panorama.getSrcImage(*it), opts, vigra::Rect2D(0,0,360,180));
// calculate alpha channel
remapped.calcAlpha();
// copy into global alpha channel.
vigra::copyImageIf(vigra_ext::applyRect(remapped.boundingBox(),
vigra_ext::srcMaskRange(remapped)),
vigra_ext::applyRect(remapped.boundingBox(),
vigra_ext::srcMask(remapped)),
vigra_ext::applyRect(remapped.boundingBox(),
destImage(panoAlpha)));
}
// get field of view
std::vector<int> borders;
bool colOccupied = false;
for (int h=0; h < 360; h++) {
bool curColOccupied = false;
for (int v=0; v< 180; v++) {
if (panoAlpha(h,v)) {
// pixel is valid
curColOccupied = true;
}
}
if ((colOccupied && !curColOccupied) ||
(!colOccupied && curColOccupied))
{
// change in position, save point.
borders.push_back(h-180);
colOccupied = curColOccupied;
}
}
int lastidx = borders.size() -1;
if (lastidx == -1) {
// empty pano
return;
}
if (colOccupied) {
// we have reached the right border, and the pano is still valid
// shift right fragments by 360 deg
// |11 2222| -> | 222211 |
std::vector<int> newBorders;
newBorders.push_back(borders[lastidx]);
for (int i = 0; i < lastidx; i++) {
newBorders.push_back(borders[i]+360);
}
borders = newBorders;
}
const double dYaw=(borders[0] + borders[lastidx])/2;
//.........这里部分代码省略.........
开发者ID:ndevenish,项目名称:Hugin,代码行数:101,代码来源:CenterHorizontally.cpp
示例19: getExposureLayers
vector<UIntSet> getExposureLayers(const PanoramaData & pano, UIntSet allImgs, PanoramaOptions opts)
{
vector<UIntSet> result;
// if no images are available, return empty result vector
if ( allImgs.empty() )
{
return result;
}
UIntSet stack;
do {
unsigned srcImg = *(allImgs.begin());
stack.insert(srcImg);
allImgs.erase(srcImg);
// find all images that have a suitable overlap.
SrcPanoImage simg = pano.getSrcImage(srcImg);
double maxEVDiff = opts.outputLayersExposureDiff;
for (UIntSet::iterator it = allImgs.begin(); it != allImgs.end(); ) {
unsigned srcImg2 = *it;
++it;
SrcPanoImage simg2 = pano.getSrcImage(srcImg2);
if ( fabs(simg.getExposureValue() - simg2.getExposureValue()) < maxEVDiff )
{
stack.insert(srcImg2);
allImgs.erase(srcImg2);
}
}
result.push_back(stack);
stack.clear();
} while (allImgs.size() > 0);
return result;
}
开发者ID:TopPano,项目名称:hugin_lite,代码行数:36,代码来源:LayerStacks.cpp
注:本文中的UIntSet类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论