1

我想确定图像中大多数线条交叉的点。显然,这样的点可能不止一个,但为了简单起见,我只尝试了一个点。我正在尝试使用 Kmeans 聚类中内置的 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.
4

1 回答 1

0

您可以在 python 中使用 Sklearn 库。它有许多其他算法

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

于 2017-04-13T15:34:45.703 回答