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

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