OpenCV Объединение точечных кластеров, удаление контуров

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

вывод из Kmeans в OpenCV

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

Я думал о DBSCAN но, похоже, мне нужно было бы реализовать его самому с нуля, поскольку его нет в OpenCV — я бы предпочел не тратить дополнительное время на то, что не является основной частью моего проекта, и сосредоточиться на теме, а не на создании инструментов. Есть ли библиотека, которая может делать то, что мне нужно? В качестве альтернативы я рассматривал жестокую силу в форме

for each point in list
find nearest neighbor
if distance > threshold
label as bad
if point already has label AND neighbor already has label
two sets collided, merge them
else if neighbor already has label
assign point.label = neighbor.label
else
point.label = new Label
neighbor.label = point.label
find mass center of each labeled set and replace set with it's center.

1

Решение

Вы можете использовать библиотеку Sklearn в Python. Есть много других алгоритмов

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector