Я использую OpenCv 2.4.10 с Cuda 7.0 на VS10
В моем проекте ЦП поиск ключевых точек и сопоставление, как это;
detector = new cv::SURF(150,3);
descriptorExtractor = cv::DescriptorExtractor::create("SURF");
detector->detect(gry0,keypoints0);
descriptorExtractor->compute(gry0, keypoints0, descriptor0);
detector->detect(gry1,keypoints1);
descriptorExtractor->compute(gry1, keypoints1, descriptor1);
cv::BFMatcher matcher(cv::NORM_L2);
matcher.match(descriptor1, descriptor0, matches);
В GPU;
cv::gpu::SURF_GPU surf(150,3);
surf(gpumatFrameGray0, cv::gpu::GpuMat(), keypoints0GPU, descriptors0GPU);
surf(gpumatFrameGray0, cv::gpu::GpuMat(), keypoints1GPU, descriptors1GPU);
surf.downloadKeypoints(keypoints0GPU,keypoints0);
surf.downloadKeypoints(keypoints0GPU,keypoints1);
cv::gpu::BFMatcher_GPU matcher(cv::NORM_L2);
matcher.matchSingle(descriptors1GPU, descriptors0GPU, trainIdx, distance);
matcher.matchDownload(trainIdx, distance, matches);
У меня 2 вопроса.
1) Большинство ключевых точек для CPU и GPU одинаковы. Между некоторыми значениями есть разница в 0,000002. Это нормально и почему так происходит?
2) Мой второй и важный вопрос заключается в том, что соответствие CPU и GPU отличается. Я показываю таблицу соответствия
В этой таблице показано положение ключевых точек на изображениях, соответствующих ЦП и ГП.
Например, ключевая точка с положением x «22.333189» в кадре 0 соответствует двум ключевым точкам в кадре 1 для кода ЦП.
Но для кода GPU он соответствует трем различным ключевым точкам.
Таких отличий много. Из-за этих различий результат гомографии также отличается, и алгоритм дает другой результат. Какое решение этой проблемы?
Спасибо
StereoBM
и некоторых алгоритмов каскадного обнаружения (насколько я помню). - person victor1234   schedule 05.07.2015