Как создать базу данных дескрипторов SIFT

Как создать базу данных дескрипторов SIFT (изображений)? Я намерен реализовать обучающий набор под наблюдением на машине опорных векторов.


person user2967127    schedule 08.11.2013    source источник


Ответы (1)


Какие изображения вам нужны? Если вам все равно, вы можете просто загрузить общедоступный набор данных компьютерного зрения, например http://lear.inrialpes.fr/~jegou/data.php#holidays, который предлагает как изображения, так и уже вычисленные SIFT из своих регионов. Или попробуйте другие наборы данных, например, из http://www.cvpapers.com/datasets.html

Другая возможность - просто загрузить\сделать много фотографий, определить точки интереса и описать их с помощью SIFT. Это можно сделать с помощью OpenCV, VLFeat или другие библиотеки.

Пример OpenCV.

    #include <opencv2/opencv.hpp>
    #include <opencv2/nonfree/nonfree.hpp>
    #include <fstream>


    void WriteSIFTs(std::vector<cv::KeyPoint> &keys, cv::Mat desc, std::ostream &out1)
    {
      for(int i=0; i < (int) keys.size(); i++)
        {
          out1 << keys[i].pt.x << " " << keys[i].pt.y << " " << keys[i].size << " " << keys[i].angle << " "; 
//If you don`t need information about keypoints (position, size) 
//you can comment out the string above

          float* descPtr = desc.ptr<float>(i);
          for (int j = 0; j < desc.cols; j++)
              out1  << *descPtr++ << " ";
          out1 << std::endl;
        }

    }


    int main(int argc, const char* argv[])
    {
      const cv::Mat img1 = cv::imread("graf.png", 0); //Load as grayscale

      cv::SiftFeatureDetector detector;
      std::vector<cv::KeyPoint> keypoints;
      detector.detect(img1, keypoints);

      cv::SiftDescriptorExtractor extractor;
      cv::Mat descriptors;
      extractor.compute(img1, keypoints, descriptors);

      std::ofstream file1("SIFTs1.txt");
      if (file1.is_open())
        WriteSIFTs(keypoints,descriptors,file1);
      file1.close();
      return 0;
    }
person old-ufo    schedule 08.11.2013
comment
Да, я хочу создать свой собственный набор данных. Итак, я сделал много фотографий и хочу извлечь их дескрипторы SIFT, а затем смонтировать набор данных этих векторов. Я использую openCV, но я в этом совсем новичок, так что мне нужно делать? (Спасибо) - person user2967127; 08.11.2013