【问题标题】:ValueError While Clustering in SklearnSklearn中聚类时的ValueError
【发布时间】:2015-11-09 15:22:25
【问题描述】:

我有以下形状的 RGB 图像 ((3L, 5L, 5L)。这意味着 5 x 5 像素图像具有 3 层 (R,G,andB)。我想使用 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)

【问题讨论】:

  • 如果您查看文档: X :数组或稀疏 (CSR) 形状矩阵 (n_samples, n_features),或数组形状 (n_samples, n_samples)
  • 如何定义两个像素之间的距离?
  • @yangjie 我不知道。您是指通道上两个像素之间的距离(体素)吗?

标签: python numpy scikit-learn


【解决方案1】:

要进行聚类,您需要说出两点之间的距离是多少。 dbscan不是图形聚类算法,它适用于功能。您需要将每个像素表示为特征,以便距离适当。

功能只能是RGB,在这种情况下,相似的颜色将聚集在一起。或者该特征还可以包括x,y坐标,这将是意味着间隔距离。

如果要考虑空间距离,我建议您查看Scikit-image的分段模块,其中包含几个流行的图像分段方法。

【讨论】:

  • 因此,是RGB是特征,x,y坐标是空间距离。我必须相对于x,y坐标聚类数据,即RGB信道值。这意味着,RGB值越近,近x,y坐标,即,它们将陷入相同的群集。在这种情况下,没有DBSCAN工作? span>
  • 它可以工作,但您需要将所有数据放入2d阵列,其中每行是一个像素,前三列是RGB值,接下来的两个列是x和y值. (您可能需要将它们中的任何一个乘以某个值才能使它们达到相同的数量级)。
猜你喜欢
  • 2017-12-03
  • 2020-07-14
  • 2020-08-10
  • 2023-03-24
  • 2020-05-14
  • 2016-07-29
  • 2015-01-07
  • 2023-03-12
相关资源
最近更新 更多