void ImageManager::init(ticpp::Document* doc) { imageSetMap = new ImageSetMap; // Iterate over all of the images and add a key with a NULL value try { // Iterate over tags ticpp::Iterator< ticpp::Element > images_iter( "images" ); for ( images_iter = images_iter.begin( doc ); images_iter != images_iter.end(); images_iter++ ) { // Iterate over tags ticpp::Iterator< ticpp::Element > set_iter( "set" ); for ( set_iter = set_iter.begin( images_iter.Get() ); set_iter!= set_iter.end(); set_iter++ ) { // Create a key in imageSetMap for every image set that exists (*imageSetMap)[set_iter.Get()->GetAttribute("category")] = ImageSet(); // Get the SIFT parameters for this set of images SIFTParams siftParams = SIFTParams(); const int def = 1; set_iter.Get()->GetAttributeOrDefault("sift_first", &siftParams.first, def); set_iter.Get()->GetAttributeOrDefault("sift_octaves", &siftParams.octaves, def); set_iter.Get()->GetAttributeOrDefault("sift_levels", &siftParams.levels, def); // Iterate over tags ticpp::Iterator< ticpp::Element > image_iter( "image" ); for ( image_iter = image_iter.begin( set_iter.Get() ); image_iter!= image_iter.end(); image_iter++ ) { std::ifstream instream; try { instream.open(image_iter.Get()->GetText().c_str()); if (!instream.is_open()) { // File wasn't able to be opened. throw(Exception::FileOperationFailedException(image_iter.Get()->GetText().c_str())); } } catch (Exception::Exception &e) { e.print(); } // PGM Buffer VL::PgmBuffer pgmBuffer; VL::extractPgm(instream, pgmBuffer); // SIFT Gaussian Parameters int octaves = siftParams.octaves; int const S = siftParams.levels; int const omin = siftParams.first; float const sigman = .5 ; float const sigma0 = 1.6 * powf(2.0f, 1.0f / S) ; // Optionally autoselect the number number of octaves if (octaves < 1) { octaves = std::max (int (std::floor (log2 (std::min(pgmBuffer.width,pgmBuffer.height))) - omin -3), 1) ; } VL::Sift* sift = new VL::Sift(pgmBuffer.data, pgmBuffer.width, pgmBuffer.height, sigman, sigma0, octaves, S, omin, -1, S+1); ((*imageSetMap)[set_iter.Get()->GetAttribute("category")])[image_iter.Get()->GetAttribute("id")] = sift; } } } } catch ( ticpp::Exception& e ) { std::cout << e.what(); } };