我有如下形状的RGB图像((3L, 5L, 5L)。这意味着5 × 5像素的图像有3层(R,G和b)。我想使用DBSCAN算法对它进行聚类,如下所示。但是我得到了一个错误信息,ValueError: Found array with dim 3. Expected <= 2
。我的3d图像不能使用吗?
import numpy as np
from sklearn.cluster import DBSCAN
from collections import Counter
data = np.random.rand(3,5,5)
print np.shape(data)
print data
db = DBSCAN(eps=0.12, min_samples=3).fit(data)
print db
DBSCAN(algorithm='auto', eps=0.12, leaf_size=30, metric='euclidean',
min_samples=1, p=None, random_state=None)
labels = db.labels_
print Counter(labels)
要进行聚类,需要说明两点之间的距离。DBSCAN不是一个图聚类算法,它与特征一起工作。您需要将每个像素表示为特征,以便距离合适。
特征可以只是RGB,在这种情况下,相似的颜色聚集在一起。或者特征也可以包括x, y坐标,这意味着空间距离也被考虑在内。
如果你想考虑空间距离,我建议你看看scikit-image的分割模块,它包含了几个流行的图像分割方法。