使用 HDBSCAN 聚类相似的线

问题描述

enter image description here

上图是视频中的一帧。最终目标是检测门。我想要做的是类似于圆圈的聚类线,其中未圈出的线是异常值。我的发现告诉我这是一个 HDBSCAN 问题,所以我尝试像这样实现 HDBSCAN:

import cv2
import numpy as np
import hdbscan

gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# Create default Fast Line Detector (FSD)
fld = cv2.ximgproc.createFastLineDetector(_length_threshold=60,_canny_th1=5,_canny_th2=5,_canny_aperture_size=3,_do_merge=True
                                          )

# Detect lines in the image
lines = fld.detect(gray_img)

cluster_lines = []
if type(lines) is not type(None):
    for line in lines:
        x1,y1,x2,y2 = line[0]
        cluster_lines.append([(x1 + x2) // 2,(y1 + y2) // 2])
        # cluster_lines.append([x1,y2])

line_clusterer = hdbscan.HDBSCAN(min_cluster_size=3,cluster_selection_epsilon=0.5)
line_clusterer.fit(cluster_lines)
labels = line_clusterer.labels_
cluster_max = line_clusterer.labels_.max()

我尝试了 2 种方法,一种是按原样传入行列表,这给出了非常糟糕的结果,我假设这是因为 HDBSCAN 不知道坐标代表一条线。第二种是传入每行中点的列表,效果更好,但仍然不是很好。有什么方法可以改进这一点并获得与预期结果更相似的结果?

原始图片

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...