2016-08-29 4 views
0

이미지 클러스터링에 DBSCAN 방법을 사용하고 있지만 예기치 않은 결과가 발생합니다. 10 개의 이미지가 있다고 가정 해 봅시다.sklearn.cluster.DBSCAN 예기치 않은 결과가 발생합니다.

먼저, 루프의 이미지를 cv2.imread을 사용하여 읽습니다. 그런 다음 각 이미지 간의 구조적 유사성 지수를 계산합니다. 그 후 저는 다음과 같은 행렬을가집니다 :

[ 
[ 1.   -0.00893619 0.   0.   0.   0.50148778  0.47921832 0.   0.   0.  ] 

[-0.00893619 1.   0.   0.   0.   0.00996088  -0.01873205 0.   0.   0.  ] 

[ 0.   0.   1.   0.57884212 0.   0.    0.   0.   0.   0.  ] 

[ 0.   0.   0.57884212 1.   0.   0.    0.   0.   0.   0.  ] 

[ 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] 

[ 0.50148778 0.00996088 0.   0.   0.   1.   0.63224396 0.   0.   0.  ] 

[ 0.47921832 -0.01873205 0.   0.   0.   0.63224396  1.   0.   0.   0.  ] 

[ 0.   0.   0.   0.   0.   0.   0. 1.   0.77507487 0.69697053] 

[ 0.   0.   0.   0.   0.   0.   0. 0.77507487 1.   0.74861881] 

[ 0.   0.   0.   0.   0.   0.   0. 0.69697053 0.74861881 1.  ]] 

좋아요. 그럼 난 DBSCAN의 간단한 invokation 있습니다

db = DBSCAN(eps=0.4, min_samples=3, metric='precomputed').fit(distances) 
labels = db.labels_ 
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) 

그리고 결과는 내가 잘못합니까 무엇

[0 0 0 0 0 0 0 0 0 0] 

입니까? 왜 모든 이미지를 하나의 클러스터에 넣을 까?

답변

0

문제는 거리 매트릭스를 잘못 계산했기 때문입니다. 주 대각선의 항목은 모두 0입니다.

1

DBSCAN은 일반적으로 비평가로 가정합니다. (거리) 유사하지 않습니다. 유사 임계 값으로 구현할 수도 있습니다 (일반 DBSCAN 참조)

관련 문제