سؤال

كيف أقوم بإنشاء قاعدة بيانات من واصفات SIFT (من الصور)؟ نيتي هو تنفيذ مجموعة تدريب مرسلة على آلة ناقلات الدعم.

هل كانت مفيدة؟

المحلول

ما نوع الصور التي تحتاجها؟ إذا كنت لا تهتم ، يمكنك فقط تنزيل مجموعة بيانات رؤية الكمبيوتر العامة مثل http://lear.inrialpes.fr/~jegou/data.php#holidays الذي يقدم كل من الصور والخفيات المحسوبة بالفعل من مناطقها. أو جرب مجموعات البيانات الأخرى ، على سبيل المثال ، من http://www.cvpapers.com/datasets.html

الاحتمالات الأخرى هي فقط تنزيل صنع الكثير من الصور ، واكتشاف نقطة الاهتمام ووصفها بالنقاشات. يمكن القيام به 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