Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая_Априамашвили_док.doc
Скачиваний:
54
Добавлен:
10.05.2015
Размер:
2.61 Mб
Скачать

1.3 Базовое преобразование Хафа

Идея преобразования Хафа состоит в поиске кривых, которые проходят через достаточное количество точек интереса [4]. Рассмотрим семейство кривых на плоскости, заданное параметрическим уравнением:

,(5)

где F(?) - некоторая функция;

a1, a2, …, an- параметры семейства кривых;

(x,y) - координаты на плоскости.

Параметры семейства кривых образуют фазовое пространство, каждая точка которого (конкретные значения параметров a1, a2, …, an) соответствует некоторой кривой. Ввиду дискретности машинного представления и входных данных (изображения), требуется перевести непрерывное фазовое пространство в дискретное пространство. Для этого в фазовом пространстве вводится сетка, разбивающая его на ячейки, каждая из которых соответствует набору кривых с близкими значениями параметров. Каждой ячейке фазового пространства можно поставить в соответствие число (счетчик), указывающее количество точек интереса на изображении, принадлежащих хотя бы одной из кривых, соответствующих данной ячейке. Анализ счетчиков ячеек позволяет найти на изображении кривые, на которых лежит наибольшее количество точек интереса [13].

Базовый алгоритм выделения кривых состоит из следующих шагов:

1. Выбор сетки дискретизации. На этом этапе выбирается шаг дискретизации для каждого параметра кривой. От этого выбора будет зависеть сложность (~ скорость) и эффективность алгоритма.

. Заполнение аккумулятора (матрицы счетчиков). Зачастую это самый долгий шаг алгоритма, поскольку заполнение производится путем полного перебора.

. Анализ аккумулятора (поиск пиков). В матрице аккумулятора ищется счетчик с максимальным значением.

. Выделение кривой. Каждая ячейка аккумулятора есть значение фазового пространства, а значит, она задает некоторую (искомую) кривую. Но поскольку значение на шаге 1 стало дискретным, может потребоваться уточнение кривой каким-либо иным методом по уже найденным точкам кривой.

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

. Переход на шаг 3.

1.3.1 Поиск прямых

Прямую на плоскости можно задать следующим образом:

, (6)

где R - длина перпендикуляра опущенного на прямую из начала координат;

(x,y) - координаты точки на прямой;

θ - угол между перпендикуляром к прямой и осью OX (см. Рисунок 7).

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

Значение θ изменяется в пределах от 0 до 2π, R ограничено размерами входного изображения. Таким образом, функция, задающая семейство прямых, имеет вид:

(7)

Через каждую точку (x,y) изображения можно провести несколько прямых с разными значениями R и θ (см. Рисунок 8), т. е. каждой точке (x,y) изображения соответствует набор точек в фазовом пространстве (R,θ), образующий синусоиду (см. Рисунок 9). В свою очередь каждой точке пространства (R,θ) соответствует набор точек (x,y) на изображении, образующий прямую [9].

Рисунок 8 - Задание семейства кривых на плоскости

Рисунок 9 - Фазовое пространство для семейства прямых, изображенных на рисунке 8

Каждой точке (R00) пространства (R,θ) можно поставить в соответствие счетчик, соответствующий количеству точек (x,y), лежащих на прямой:

(8)

Ввиду дискретности машинного представления входных данных, требуется перевести непрерывное фазовое пространство в дискретное пространство. Введем сетку на пространстве (R,θ), одной ячейке которой соответствует набор прямых с близкими значениями R и θ. Теперь счетчик ставится в соответствие каждой ячейке сетки: ячейке [Ri,Ri+1]?[qi,qi+1] соответствует число точек, удовлетворяющих уравнению:

, (9)

где .

Размер ячеек выбирается с учетом следующих соображений. Если ячейки будут очень большими, то за "прямую" может приниматься разрозненный набор точек. Если же наоборот, ячейки будут слишком малы, есть вероятность, что ни одной прямой не найдется - все счетчики будут иметь небольшое значение.

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

а) Обнулить счетчики всех ячеек.

б) Для каждой точки интереса.

в) Для каждой прямой, проходящей через данную точку.

г) Увеличить соответствующий счетчик.

д) Выбрать ячейку с максимальным значением счетчика.

е) Параметры прямой, проходящей через максимальное число точек принять равным координатам центра выбранной ячейки в фазовом пространстве.

Если прямых нужно найти несколько, можно отсортировать счетчики по убыванию или рассматривать точки локальных максимумов фазового пространства. На рисунке 10 изображены примеры исходных изображений и соответствующих им фазовых пространств.

графический примитив программный пользователь

Рисунок 10 - Пример работы преобразования Хафа: а) исходные изображения, б) фазовое пространство (R, θ). Величина счетчика в каждой точке фазового пространства обозначена оттенком серого (чем больше счетчик, тем светлее точка)

.3.2 Выделение окружностей на изображении

Геометрическое место точек окружности можно представить в виде формулы:

,(10)

где (a,b) - координаты центра окружности;

(x,y) - координаты точки на окружности;

R - ее радиус.

Формула, задающая семейство окружностей, имеет вид:

(11)

Если ставится задача найти окружность заранее известного радиуса, то фазовым пространством будет плоскость параметров центра окружности (a,b). В таком случае, алгоритм выделения окружностей полностью аналогичен алгоритму нахождения прямых.

Если радиус окружности заранее неизвестен, то пространство параметров будет трехмерным - (a,b,R), что существенно увеличивает вычислительную сложность решения задачи. Для сведения задачи обратно к двумерному фазовому пространству в некоторых случаях можно применить метод описанный в [4].