Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции? |
Самостоятельная работа 6: Сравнение производительности некоторых алгоритмов в библиотеках OpenCV и IPP
3. Сравнение производительности операций над изображениями, реализованных на базе OpenCV и Intel IPP
3.1. Тестовые данные
Все рассматриваемые в данной лабораторной работе алгоритмы имеют квадратичную сложность. Чтобы подготовленные нами реализации показывали времена, на которых имеет смысл проводить сравнение, необходимо использовать или подготовить изображение достаточно большого размера. Используем файл Desert.jpg из состава операционной системы Windows 7, расположенный в папке C:\Users\Public\Pictures\Sample Pictures. Этот файл имеет размер 1024x768 пикселей. Создадим из него изображение размера 8192x6144 пиксела, скопировав исходную картинку нужное число раз в любом графическом редакторе.
На указанном изображении авторами были получены следующие времена.
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. Изучите вопрос о совместном использовании библиотек.