Обнаружение выровненных точек в наборе точек OpenCV

Учитывая набор точек на изображении, я хочу обнаружить группы выровненных точек, как показано на рисунке:Линии на изображении

Как я могу это сделать? Любая помощь будет оценена.

2 ответа

Это хорошее потенциальное применение преобразования Хафа. Пространство Хаф для линий - это (r, \theta), где r - расстояние от начала координат до ближайшей точки на линии, а \ theta - ее ориентация.

Каждая точка в пространстве xy становится синусоидой в пространстве Хо, как показано в статье Wiki.

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

Самый простой алгоритм для подгонки линий к точкам - это сделать прямоугольный (r, \theta) массив аккумуляторов изначально равным нулю. Затем проследите синусоиду для каждой точки в этом дискретном (r, \theta) пространстве, увеличивая каждый элемент аккумулятора на фиксированную величину. Найдите подходящие линии, ища элементы большого массива. Координаты элемента дают (r, \theta) для подгонки.

Отслеживание синусоиды является простым. Если у вас есть T аккумуляторных отсеков на оси \ theta, то каждый соответствует углу k(\pi)/N для некоторого 0 <= k

Для начала вы можете попробовать это:

  1. Перечислите все линии, которые можно сформировать, выбрав любые две из этих точек (n(n-1)/2 те для n точки).

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

  3. Для каждой выровненной пары линий вы можете легко проверить, выровнены ли и другие точки на этих линиях. И эти точки будут теми же точками, которые вам нужны.

Другие вопросы по тегам