Не требуется ускорение распараллеливания потоков для детектора признаков - PullRequest
0 голосов
/ 23 марта 2019

Я хочу получить функции серфинга на нескольких изображениях одновременно. Я не вижу ускорения после моей реализации.

Вот нормальная версия процесса.

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 микросекунд

Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...