Вопрос

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

Это было полезно?

Решение

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

Другая возможность - просто загрузить сделать много фотографий, обнаружить точку интереса и описать их с помощью SIFTS. Это можно сделать с 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;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top