Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Преобразования Хафа


Автор: Geniy00 9.5.2007, 00:29
Добрый вечер.
Мне нужно составить программу которая ищет графические примитивы на изображении(в данном случае линии)
Я хотел бы уточнить некоторый детали в преобразовании Хафа.

На сколько я все правильно понял:
1)Сначала мы должны сделать изображение монохромным(бинарным). Все черный точки будут точками интереса(берем пример в котором линия черным цветом).
2)Следующим шагом будет заполнение «фазового пространства» (это будет какаето матрица АхВ). Каждой точке «фазового пространства» будет отвечать прямая на рисунке. 
Если точки лежат на одной прямой то счетчик матрицы будет возростать.

Прямую на плоскости можно задать формулою:
R=x * cos § + y * sin §
, где 
R – длина перпендикуляра, опущенного с начала координат.
§ - угол между перпендикуляром и ОХ
x,y – координаты точки.

Теперь вопросы:
1) Наша задача имея декартовую систему координат и какоето изображение на ней, заполнить матрицу с "фазового пространства". Тоесть какаето ячейка становится на 1 больше.
Я так понимаю это делается по формуле x * cos § + y * sin § - R = 0 ??
(, где 
R – длина перпендикуляра, опущенного с начала координат.
§ - угол между перпендикуляром и ОХ
x,y – координаты точки.)

Каким образом, обясните пожайлуста. (мы в этой формуле знаем только x i y)
Пример: есть какието точки с координатами (x1,y1), (x2,y2), (x3,y3). Как проверить лежат ли они на одной прямой?

2) Каким способом нужно перебирать точки?
  А) Проводим прямые поочередно через любые две точки(Через 2 точки можно провести только одну прямую), и так надо перебрать все точки?
А если точек много это будет очень долго? Или там не обязательно перебирать все?
  Б) Проводим через одну точку большое количество прямых, и есть вероятность, что на какуето из этого множества прямых попадут еще точки?
Не факт же что попадет, или если размерность матрицы подберется побольше то точка сама попадет?
  В) Какой варинт вы бы посоветовали?

P.S. Пробывал розобрать по литературе, в поиске на форуме ничего интересного не нашел.
Писать программу собираюсь на CBuilder'e

Автор: esperant0 9.5.2007, 09:29
"На сколько я все правильно понял:
1)Сначала мы должны сделать изображение монохромным(бинарным

"


В начале ищутся все границы edges.



Автор: Geniy00 9.5.2007, 10:20
Цитата(esperant0 @ 9.5.2007,  09:29)
"На сколько я все правильно понял:
1)Сначала мы должны сделать изображение монохромным(бинарным

"


В начале ищутся все границы edges.

Края надо находить на фотографии например комнаты или какогото дома.
А у меня в задании приблизительно так: есть рисунок например с линией, кругом, елипсом, прямоугольником, какимто  не значительным шумом. (по сути это уже и есть края)

Автор: TanchikVK 22.2.2010, 13:55
Цитата

 Теперь вопросы:
1) Наша задача имея декартовую систему координат и какоето изображение на ней, заполнить матрицу с "фазового пространства". Тоесть какаето ячейка становится на 1 больше.
Я так понимаю это делается по формуле x * cos § + y * sin § - R = 0 ??
(, где 
R – длина перпендикуляра, опущенного с начала координат.
§ - угол между перпендикуляром и ОХ
x,y – координаты точки.)

Каким образом, обясните пожайлуста. (мы в этой формуле знаем только x i y)
Пример: есть какието точки с координатами (x1,y1), (x2,y2), (x3,y3). Как проверить лежат ли они на одной прямой?

2) Каким способом нужно перебирать точки?
  А) Проводим прямые поочередно через любые две точки(Через 2 точки можно провести только одну прямую), и так надо перебрать все точки?
А если точек много это будет очень долго? Или там не обязательно перебирать все?
  Б) Проводим через одну точку большое количество прямых, и есть вероятность, что на какуето из этого множества прямых попадут еще точки?
Не факт же что попадет, или если размерность матрицы подберется побольше то точка сама попадет?
  В) Какой варинт вы бы посоветовали?

У меня те же самые вопросы. Есть ли на форуме человек, который разбирается в алгоритме Hough Transform? Помогите бедной студентке. 
Реализовывать поиск графических примитивов собираюсь на Delphi.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)