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

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

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

2. Разработка приложения для сравнения производительности операций над изображениями, реализованных на базе OpenCV и Intel IPP

2.1. Требования к общей организации приложения

Прежде чем перейти к созданию проекта в среде разработки Microsoft Visual Studio 2010 и написанию кода, обсудим некоторые общие моменты.

Сравнение производительности мы будем проводить на реализациях некоторых выбранных алгоритмов обработки изображений из библиотек OpenCV и IPP. При этом нашей задачей не является масштабное сравнение указанных библиотек: слишком много экспериментов пришлось бы провести. Выбор конкретных функций для сравнения также субъективен. Дополнительная сложность связана с тем, что в OpenCV и IPP существенно разным образом устроены базовые структуры данных, а поскольку в IPP нет средств загрузки изображений, нам придется выполнять предварительное их преобразование.

Итак, в качестве алгоритмов для сравнения мы используем медианную фильтрацию, относящуюся к алгоритмам размытия, два морфологических преобразования: эрозию и дилатацию, – а также один из статистических алгоритмов: гистограмму.

2.2. Создание проекта

Создадим новое Решение (Solution), в которое включим Проект (Project) данной лабораторной работы. Последовательно выполните следующие шаги:

  1. Запустите приложение Microsoft Visual Studio 2010.
  2. В меню File выполните команду New\rightarrowProject….
  3. Как показано на рис. 1, в диалоговом окне New Project в типах проекта выберите Win32, в шаблонах Win32 Console Application, в поле Name введите название проекта OpenCVvsIPP, в поле Location укажите путь к папке с лабораторными работами, снимите флажок Create directory for Solution. Нажмите OK.
    Создание решения для лабораторной работы

    Рис. 11.1. Создание решения для лабораторной работы
  4. В диалоговом окне Win32 Application Wizard нажмите Next (или выберите Application Settings в дереве слева) и установите флаг Empty Project. Нажмите Finish.
  5. В окне Solution Explorer в папке Source Files выполните команду контекстного меню Add\rightarrowNew Item…. В дереве категорий слева выберите Code, в шаблонах справа – C++ File (.cpp), в поле Name введите имя файла main. Нажмите Add. В результате выполненной последовательности действий в окне редактора кода Visual Studio будет открыт пустой файл main.cpp.

2.3. Настройка свойств проекта

Настроить проект для использования библиотеки IPP из состава пакета Intel Parallel Studio XE 2013 очень просто. Понадобится следующая последовательность действий.

  1. Выполните команду контекстного меню Properties, чтобы получить доступ к настройкам проекта.
  2. Откройте вкладку Configuration Properties\rightarrowIntel Performance Libraries.
  3. В выпадающем списке напротив свойства Use IPP выберите способ линковки библиотеки Intel® IPP (рис. 11.2).
    Перечень способов линковки библиотеки IPP

    Рис. 11.2. Перечень способов линковки библиотеки IPP

Для использования функций библиотеки OpenCV потребуется немного больше действий.

  1. Сначала установим путь до заголовочных файлов библиотеки OpenCV. Выполните команду контекстного меню Properties, чтобы получить доступ к настройкам проекта. Откройте вкладку Configuration Properties\rightarrowC/C++\rightarrowGeneral (рис. 11.3). Сверху в окне свойств в выпадающем списке Configuration выберите значение All Configurations, чтобы установить свойство для всех режимов компиляции (Debug и Release). В поле Additional Include Directories укажите пути до заголовочных файлов библиотеки OpenCV (например, c:\OpenCV\build\include). Нажмите кнопку Apply, чтобы применить указанное свойство.
    Установка путей до заголовочных файлов OpenCV

    Рис. 11.3. Установка путей до заголовочных файлов OpenCV
  2. Далее установим путь до подключаемых библиотек (lib-файлов). Откройте вкладку Configuration Properties\rightarrowLinker\rightarrowGeneral (рис. 11.4). Сверху в окне свойств в выпадающем списке Configuration выберите значение All Configurations. В поле Additional Library Directories укажите путь до lib-файлов (например, c:\OpenCV\build\x86\vc10\lib\).
    Установка путей до подключаемых библиотек OpenCV

    Рис. 11.4. Установка путей до подключаемых библиотек OpenCV
  3. Последним действием укажем список подключаемых библиотек. Откройте вкладку Configuration Properties\rightarrowLinker\rightarrowInput (рис. 11.5). Сначала в окне свойств в выпадающем списке Configuration выберите значение Debug и установите в поле Additional Dependencies список lib-файлов opencv_core242d.lib, opencv_imgproc242d.lib, opencv_highgui242d.lib, opencv_legacy242d.lib, opencv_video242d.lib, opencv_ml242d.lib, opencv_objdetect242d.lib. Аналогичные действия необходимо проделать для режима Release, указав список lib-файлов с теми же названиями за исключением отсутствия последней буквы d.
    Установка списка подключаемых библиотек OpenCV

    Рис. 11.5. Установка списка подключаемых библиотек 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).

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

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