rendered paste body 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 <images> tags
ticpp::Iterator< ticpp::Element > images_iter( "images" );
for ( images_iter = images_iter.begin( doc ); images_iter != images_iter.end(); images_iter++ )
{
// Iterate over <set> 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 <image> 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();
}
};