Опубликован: 02.09.2013 | Доступ: свободный | Студентов: 429 / 54 | Длительность: 19:27:00

Самостоятельная работа 5: Сборка и установка Intel® Integrated Performance Primitives. Использование библиотеки в среде Microsoft® Visual Studio

4.5. Запуск приложения и проверка корректности

Для проверки корректности реализации, разработанной на базе Intel® IPP, необходимо реализовать функцию сравнения цветов пикселей отфильтрованных изображений. По существу в функции необходимо выполнить проход по всем пикселям и сравнить значения по каждому из трех каналов. В результате формируется количество пикселей, в которых не совпали значения интенсивности хотя бы по одному каналу.

int compare(const Mat &srcImgOCV, const Mat &srcImgIPP) 
{ 
    int kPoints = 0; 
    int w = srcImgOCV.size().width,  
        h = srcImgOCV.size().height, i, j, idx; 
    for (i = 0; i < h; i++) 
    { 
        idx = 3 * i * w; 
        for (j = 0; j < w; j++, idx += 3) 
        { 
            if (srcImgOCV.data[idx]     –  
                     srcImgIPP.data[idx]     != 0 || 
                srcImgOCV.data[idx + 1] –  
                     srcImgIPP.data[idx + 1] != 0 || 
                srcImgOCV.data[idx + 2] –  
                     srcImgIPP.data[idx + 2] != 0) 
            { 
                kPoints++; 
            } 
        } 
    } 
    return kPoints; 
} 

На данный момент можно выполнить запуск приложения, нажав сочетание клавиш Ctrl+F5. В результате работы программы будет показано три изображения: исходное и два отфильтрованных (рис. 12.11). Если приложение отработало корректно, то наряду с этим в консоли будет выведено соответствующее сообщение (рис. 12.12). В противном случае, в консоли появится сообщение об ошибке с указанием количества пикселей, в которых получены разные цвета.

Результат запуска приложения

Рис. 12.11. Результат запуска приложения
Сообщение командной строки

Рис. 12.12. Сообщение командной строки

5. Разработка приложения для поиска прямых линий на изображении с использованием Intel® Integrated Performance Primitives

5.1. Постановка задачи

Задача поиска заданных геометрических примитивов на изображении (прямых, эллипсов, окружностей и т.п.) – одна из актуальных задач компьютерного зрения. Данная задача возникает при разработке приложений в сфере робототехники и видеоаналитики в процессе поиска объектов, имеющих типичную геометрическую форму. Также существует опыт применения методов поиска примитивов при распознавании рукописных текстов.

Обобщенное преобразование Хафа – наиболее известный метод определения положения геометрических примитивов заданной формы на изображении. В настоящей работе предлагается использовать данное преобразование применительно к задаче поиска прямых линий.

Во второй части лабораторной работы требуется разработать приложение, которое удовлетворяет следующим требованиям:

  1. Поддержка возможности поиска прямых линий с использованием преобразования Хафа, реализованного в библиотеке OpenCV.
  2. Поддержка поиска прямых линий с использованием преобразования Хафа и других необходимых функций библиотеки Intel® IPP.
  3. Отображение полученных прямых линий на исходном изображении.

5.2. Преобразование Хафа

Преобразование Хафа – метод обнаружения прямых и более сложных кривых на бинарных изображениях. Метод позволяет определить параметры семейства кривых и обеспечивает поиск на изображении множества кривых указанного семейства [1]. Первоначально метод был разработан применительно к поиску прямых линий, впоследствии был обобщен на произвольное семейство кривых, заданных параметрически.

Рассмотрим схему работы преобразования Хафа для определения прямых линий на изображении [7]. Прямую на плоскости можно задать параметрически в виде (1), исходя из геометрического представления, показанного на рис. 12.13.

x\,cos\,\theta+y\,sin\,\theta=R, ( 1)

где R – величина перпендикуляра, опущенного из начала координат системы Oxy на прямую, \theta – угол наклона перпендикуляра относительно оси Ox,0 \leqslant \theta < 2\pi.

Параметрическое представление прямой на плоскости

Рис. 12.13. Параметрическое представление прямой на плоскости

Тогда неявная функция, определяющая семейство прямых, может быть записана в форме (2).

F(R, \theta \,x,y)=x\,cos\,\theta +y\,sin\,\theta-R=0 ( 2)

Таким образом, через каждую точку (x,y) проходит несколько прямых, соответствующих разным значениям параметров R и \theta. По существу любой фиксированной точке (x_0,y_0) ставится в соответствие набор точек в пространстве параметров (R,\theta) . В свою очередь каждой точке (R_0,\theta_0) можно поставить в соответствие количество точек (x,y) , лежащих на прямой x\,cos\,\theta_0 +y\,sin\,\theta_0-R_0=0. Дискретность представления данных в машине требует введения сетки на плоскости параметров \theta_i=i\Delta \theta, R_j=j \Delta  R. И теперь каждой точке (R_0,\theta_0) будем ставить в соответствие количество точек, принадлежащих семейству прямых (3).

x\,cos\,\theta +y\,sin\,\theta=R,\,\,\,\,\, \theta_i \leqslant  \theta \leqslant \theta_{i+1},R_i \leqslant R \leqslant R_{i+1} ( 3)

Выбрав ячейку сетки, которой соответствует максимальное количество точек, получим наиболее вероятную прямую. В качестве параметров этой прямой можно принять координаты центра ячейки сетки. Если необходимо выделить несколько прямых, то достаточно отсортировать множество ячеек сетки в порядке убывания числа точек и выбрать определенное количество первых ячеек.

5.3. Схема решения задачи поиска прямых линий на цветном изображении с использованием преобразования Хафа

Схема решения задачи поиска прямых линий на цветном изображении с использованием преобразования Хафа включает несколько этапов:

  1. Загрузка изображения.
  2. Преобразование изображения в оттенки серого.
  3. Поиск ребер на полученном изображении. Ребра можно найти, например, с использованием детектора Канни. Различные способы выделения ребер были рассмотрены в лабораторной работе "Базовые операции обработки изображений".
  4. Применение преобразования Хафа к бинарному изображению, содержащему ребра.
  5. Преобразование полученных параметров прямых из полярной системы координат в декартову систему, связанную с исходным изображением.
Андрей Терёхин
Андрей Терёхин

Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции?

Демянчик Иван
Демянчик Иван

В главе 14 мы видим понятие фильтра, но не могу разобраться, чем он является в теории и практике.

" Искомый объект можно описать с помощью фильтра F= \lbrace f_{x',y'},x' \in \lbrace0, ...,w_f \rbrace , y' \in \lbrace 0,...,h_f \rbrace \rbrace "