Опубликован: 20.08.2013 | Уровень: для всех | Доступ: платный | ВУЗ: Новосибирский Государственный Университет
Самостоятельная работа 6:

Сравнение производительности некоторых алгоритмов в библиотеках OpenCV и IPP

< Самостоятельная работа 5 || Самостоятельная работа 6: 1234567

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. Дополнительные задания

  1. Проведите серийные эксперименты над последовательностью изображений.
  2. Проведите сравнение других алгоритмов, присутствующих как в OpenCV, так и в IPP и решающих одни и те же задачи.
  3. Исследуйте возможность использования оптимизированных реализаций функций библиотеки IPP для повышения роизводительности алгоритмов библиотеки OpenCV. Изучите вопрос о совместном использовании библиотек.
< Самостоятельная работа 5 || Самостоятельная работа 6: 1234567
Александра Максимова
Александра Максимова

При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка?
 

Алена Борисова
Алена Борисова

В лекции по обработке полутоновых изображений (http://www.intuit.ru/studies/courses/10621/1105/lecture/17979?page=2) увидела следующий фильтр:


    \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 2 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array} - \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 1 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array}

В описании говорится, что он "делает изображение более чётким, потому что, как видно из конструкции фильтра, в однородных частях изображение не изменяется, а в местах изменения яркости это изменение усиливается".

Что вижу я в конструкции фильтра (скорее всего ошибочно): F(x, y) = 2 * I(x, y) - 1/9 I(x, y) = 17/9 * I(x, y), где F(x, y) - яркость отфильтрованного пикселя, а I(x, y) - яркость исходного пикселя с координатами (x, y). Что означает обычное повышение яркости изображения, при этом без учета соседних пикселей (так как их множители равны 0).

Объясните, пожалуйста, как данный фильтр может повышать четкость изображения?

Сергей Кротов
Сергей Кротов
Россия
Дмитрий Донсков
Дмитрий Донсков
Россия, Москва, Московский Авиационный Институт