All pastes #908760 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-02-18 18:41 UTC
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();
        }
    };