0

Я совмещаю функции стереоизображений с использованием openCv, FAST обнаружения функции и соответствия грубой силы.open cv Комбинация функций с использованием заданных координат

  FastFeatureDetector detector(threshold); 
      detector.detect(img1, keypoints1); 
      detector.detect(img2, keypoints2); 

      OrbDescriptorExtractor extractor; 
      extractor.compute(img1, keypoints1, descriptors1); 
      extractor.compute(img2, keypoints2, descriptors2); 

      BFMatcher matcher(NORM_L2); 
      matcher.match(descriptors1, descriptors2, matches); 

То, что я хотел бы сделать, хотя, Есть точки траектории на левом фрейме с использованием оптического потока, ТОГДА соответствуют те точки на правой раме с помощью сопоставления функций.

Возможно ли комбинировать функцию соответствия функций пиксельным координатам точки, которую вы хотите сопоставить?

+0

где вы вставляете «оптическое отслеживание потока» в свой код? Перед «FastFeatureDetector» или между FastFeatureDetector и OrbDescriptorExtractor? – xiawi

+0

перед обнаружением функции на данный момент, но я не связал отслеживаемые точки с экстрактором, так как я не уверен, как ... – anti

ответ

1

Вы не можете указать это, но вы можете ограничить точки во время извлечения. В вашем коде keypoints1 и keypoints2 могут быть входами экстрактора для точек, которые вы хотите согласовать. Следовательно, вы должны сделать следующее:

// perform "optical flow tracking" and get some points 
// for left and right frame 

// convert them to cv::KeyPoint 
// cv::KeyPoint keypoints1; // left frames 
// cv::KeyPoint keypoints1; // right frames 

// extract feature for those points only 
OrbDescriptorExtractor extractor; 
extractor.compute(img1, keypoints1, descriptors1); 
extractor.compute(img2, keypoints2, descriptors2); 

// match for the descriptors computed at the pixel coordinates 
// given by the "optical flow tracking" only 
BFMatcher matcher(NORM_L2); 
matcher.match(descriptors1, descriptors2, matches); 
+0

спасибо! очень признателен. – anti