Я хочу получить функции серфинга на нескольких изображениях одновременно. Я не вижу ускорения после моей реализации.
Вот нормальная версия процесса.
prev = high_resolution_clock::now();
cout<<"Number of Images : "<<images.size()<<endl;
for (int i = 0 ; i < images.size(); i++)
{
surf->detectAndCompute(bwImages[i], Mat(), keypoints, descriptors);
}
current = high_resolution_clock::now();
duration = duration_cast<microseconds>( current - prev ).count();
cout<<"Time taken for SURF detector "<<duration<<" microseconds"<<endl;
Выход
Время, необходимое для детектора SURF 3058657 микросекунд
Это моя распараллеленная версия
void getDescriptor(Mat bwImage,int i, map<int,vector<KeyPoint>> &keyPointMap,map<int,Mat> &descriptorMap)
{
Mat descriptors;
std::vector<KeyPoint> keypoints;
Ptr<Feature2D> surf = SURF::create(SURF_HESSIAN_THRESHOLD);
surf->detectAndCompute(bwImage, Mat(), keypoints, descriptors);
std::lock_guard<std::mutex> guard(mut);
keyPointMap[i] = keypoints;
descriptorMap[i] = descriptors;
return;
}
void getDescriptorsParallel(vector < Mat > &bwImages,map<int,vector<KeyPoint>> &keyPointMap,map<int,Mat> &descriptorMap)
{
std::thread t[25];
for (int i = 0 ; i < bwImages.size(); i++)
t[i] = std::thread(getDescriptor,bwImages[i],i,
std::ref(keyPointMap),std::ref(descriptorMap));
for (int i = 0 ; i < bwImages.size(); i++)
t[i].join();
}
Это занимает больше времени, чем предыдущая версия. Время, необходимое для getDescriptorsParallel(bwImages,keyPointMap,descriptorMap);
, составляет
3435328 микросекунд
Что мне здесь не хватает?