scikitlearn의 DBSCAN을 사용하여 색상 기반의 이미지를 분할하려고합니다. 결과는 입니다. 보시다시피 3 개의 클러스터가 있습니다. 내 목표는 그림의 부표를 다른 클러스터로 분리하는 것입니다. 그러나 분명히 그들은 같은 클러스터로 나타나고 있습니다. 광범위한 eps 값과 min_samples를 시도했지만이 두 가지는 항상 함께 묶입니다. 내 코드는 다음과 같습니다이미지가 DBSCAN을 사용하여 올바르게 분할되지 않음
img= cv2.imread("buoy1.jpg)
labimg = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
n = 0
while(n<4):
labimg = cv2.pyrDown(labimg)
n = n+1
feature_image=np.reshape(labimg, [-1, 3])
rows, cols, chs = labimg.shape
db = DBSCAN(eps=5, min_samples=50, metric = 'euclidean',algorithm ='auto')
db.fit(feature_image)
labels = db.labels_
plt.figure(2)
plt.subplot(2, 1, 1)
plt.imshow(img)
plt.axis('off')
plt.subplot(2, 1, 2)
plt.imshow(np.reshape(labels, [rows, cols]))
plt.axis('off')
plt.show()
나는이 유클리드 거리를 복용하고 실험실에서 공간 유클리드 거리가 서로 다른 색상과 다를 것이기 때문입니다 가정합니다. 누구든지 나에게 이것에 대한 지침을 줄 수 있다면 정말 고맙겠습니다.
업데이트 : 아래 답변은 작동합니다. DBSCAN은 2 차원 이하의 배열을 필요로하기 때문에 원본 이미지에 열을 연결하고 n x 5 차원 행렬을 생성하기 위해 재구성되었습니다. 여기서 n은 x 차원과 y 차원의 곱입니다. 이것은 나를 위해 작동하는 것 같다.
indices = np.dstack(np.indices(img.shape[:2]))
xycolors = np.concatenate((img, indices), axis=-1)
np.reshape(xycolors, [-1,5])
감사합니다. 그 트릭을 할 것으로 보인다. –