Исследование систем управления манипулятором MR-999Е

Диссертация - Компьютеры, программирование

Другие диссертации по предмету Компьютеры, программирование

ти. Очень важно, чтобы точность угловых точек изображения не была потеряна и, следовательно, чтобы не возникало ссылок на не угловые точки. Вторым критерием выступал хороший уровень локализации угловых точек. Иными словами, чтобы расстояние между найденными угловыми точками и действительными углами сводилось к минимуму. Третьим критерием было, чтобы каждому углу соответствовало не более одной точки. Этот критерий был поставлен, поскольку первых двух было недостаточно для полного исключения возможности множественного соответствования различных точек одному и тому же углу.

Основываясь на этих критериях, детектор углов Кэнни сначала сглаживает изображение для уменьшения шума. Потом находит градиент изображения в каждой точке для выделения областей с наибольшей величиной пространственной производной. Далее алгоритм проходит по этим областям и глушит пиксели с не максимальным значением градиента (процедура nonmaximum suppression). Массив градиентов далее сокращается процедурой гистерезиса (лат. - hysteresis), которая используется для обработки оставшихся пикселей, которые не были приглушены. Процедура гистерезиса использует два порога. Если величина градиента меньше первого, то пиксель устанавливается в ноль (не угол). Если величина градиента больше второго порога, пиксель устанавливается в максимальное значение (делается углом). И если величина лежит между двумя порогами, то пиксель не устанавливается в ноль, пока не найден путь от данного пикселя к пикселю с величиной градиента больше второго порога.

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

void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 ),

 

где image - входное изображение; edges - изображение для выделения краев с помощью функции ; threshold1 - первый порог изображения; threshold2 - второй порог изображения; aperture_size - размер апертуры изображения.

Детектор Харриса. За последние двадцать лет было создано довольно много различных детекторов точечных особенностей изображений. Чаще всего используются детектор Харриса и детектор по минимальным собственным значениям. В данной работе реализованы оба.

Рассмотрим детектор по минимальным собственным значениям. Берем первое изображение последовательности. Для каждого пикселя рассчитываем следующую матрицу:

 

(3.8)

 

где - яркость в точке, - весовая функция по окрестности , в качестве которой обычно берут распределение Гаусса. У точки, окрестность которой похожа на угол, матрица будет иметь два больших положительных собственных значения. Таким образом, условие похожести точки на угол запишется следующим образом:

 

(3.9)

 

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

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

 

(3.10)

 

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

 

void cvCornerHarris( const CvArr* image, CvArr* harris_responce,block_size, int aperture_size=3, double k=0.04 ),

 

где image - входное изображение; harris_responce - изображение для вывода функции, которое должно иметь такой же размер как и входное изображение; block_size - размер блоков; aperture_size - размер апертуры изображения; k - свободный параметр детектора Харриса; - параметр Харриса, его величина обычно лежит в пределах и определяется эмпирически.

Далее с ней проводятся аналогичные действия, поиск локальных максимумов, и введение порогового значения.

На втором этапе - этапе слежения (Tracking) - определяются смещения для каждой особой точки между соседними кадрами и рассчитывается средний по всем точкам вектор сдвига для каждой пары кадров.

Основная идея задачи слежения состоит в поиске окрестности в текущем кадре, максимально похожей на окрестность точки в предыдущем кадре. Следующий ключевой момент состоит в том, что этот поиск окрестности производится не по всему изображению, а в некотором радиусе от исходного положения особой точки. Здесь мы вводим предположение, что за время между двумя кадрами в сцене не происходит больших изменений, поэтому нет смысла искать точку далеко от текущего её положения.

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

 

(3.11)

 

где - окрестность сравнения, - область поиска особенности, и - яркость точки в текущем и предыдущем кадрах.

Функцией поиска контуров является функция cvFindContours:

 

int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, int header_size=sizeof(CvContour), int mode=CV_RETR_LIST, int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) ) ,

 

где image - исходное 8-битное одноканальное изображение. Ненулевые пиксели считаются 1, нулевые остаются 0 - рассматривается как двоичный файл. Для получения такого бинарного изображения с оттенками серого, можно использовать функции cvThreshold, cvAdaptiveThreshold или cvCanny. Функция изменяет содержимое исходного изображения; Storage - ячейка памяти, содержащая полученные контура; first_contour - выходной параметр, содержащий указатель на первый найденный контур; header_size - размер последовательности заголовка >=sizeof(CvChain).

 

Таблица 3.1 - Параметры функции выделения контуров

CV_RETR_EXTERNALесли необходимы только крайние внешние контурыCV_RETR_LISTвыделение всех контуров и помещение их в списокCV_RETR_CCOMPвыделение всех контуров и помещение их в двойную иерархиюCV_RETR_TREEполуч?/p>