При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка? |
Сравнение производительности некоторых алгоритмов в библиотеках OpenCV и IPP
3. Сравнение производительности операций над изображениями, реализованных на базе OpenCV и Intel IPP
3.1. Тестовые данные
Все рассматриваемые в данной лабораторной работе алгоритмы имеют квадратичную сложность. Чтобы подготовленные нами реализации показывали времена, на которых имеет смысл проводить сравнение, необходимо использовать или подготовить изображение достаточно большого размера. Используем файл Desert.jpg из состава операционной системы Windows 7, расположенный в папке C:\Users\Public\Pictures\Sample Pictures. Этот файл имеет размер 1024?768 пикселей. Создадим из него изображение размера 8192?6144 пиксела, скопировав исходную картинку нужное число раз в любом графическом редакторе.
На указанном изображении авторами были получены следующие времена.
OpenCV (время, с) | IPP (время, с) | |
Медианный фильтр | 0.361 | 0.319 |
Эрозия | 0.234 | 0.115 |
Дилатация | 0.224 | 0.118 |
Гистограмма | 0.351 | 0.130 |
3.2. Проведение вычислительных экспериментов
Для получения более адекватных результатов добавим в функцию main возможность проведения серии запусков для каждого из алгоритмов. Число запусков будем передавать через еще один параметр командной строки.
Таким образом, необходимо изменить следующие фрагменты.
Дополнить описание запуска.
char helper[] = "01_OpenCVvsIPP.exe <img_name> <mode> <num_of_exp>\n\ \t<img_name> - image filename\n\ \t<mode>:\n\ \t\t1 - median filtering\n\ \t\t2 - erode\n\ \t\t3 - dilate\n\ \t\t4 - calc histogram\n\ \t<num_of_exp> - number of experiments\n";
Исправить проверку на число параметров командной строки
if (argc < 4) { printf("%s", helper); return 1; }
Считать значение параметра.
int numOfExp; ... numOfExp = atoi(argv[3]);
Изменить вызовы функций
ocv_time = ipp_time = 0; switch (mode) { case 1: for (i = 0; i < numOfExp; i++) { // отфильтровать с помощью OpenCV ocv_time += median_opencv(srcImgOCV, dstImgOCV); // отфильтровать с помощью IPP ipp_time += median_ipp(srcImgIPP, dstImgIPP); } ...
Выполните указанные изменения и проведите эксперименты с разными значениями параметра numOfExp.
4. Дополнительные задания
- Проведите серийные эксперименты над последовательностью изображений.
- Проведите сравнение других алгоритмов, присутствующих как в OpenCV, так и в IPP и решающих одни и те же задачи.
- Исследуйте возможность использования оптимизированных реализаций функций библиотеки IPP для повышения роизводительности алгоритмов библиотеки OpenCV. Изучите вопрос о совместном использовании библиотек.