OpenCV Объединение точечных кластеров, удаление контуров
Я хочу определить точку, где большинство линий на изображении пересекаются. Очевидно, что может быть несколько таких точек, но для простоты я пробую только одну точку. Я пытался с OpenCV, встроенным в кластеризацию Kmeans, но этот алгоритм предполагает, что каждая точка должна быть кластеризована, поэтому я получаю что-то вроде этого:
Очевидно, что становится намного хуже, когда появляется больше линий, так как каждое пересечение будет смещать центр кластера. Я хочу добиться удаления всех контуров, возникающих в результате случайного пересечения линий здесь и там, что особенно проблематично в сложных сценах.,
Я думал о 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