2015-08-17 3 views
4

У меня есть изображение RGB следующей формы ((3L, 5L, 5L)). Это означает 5 на 5 пикселей изображение, имеющее 3 слоя (R, G и B). Я хочу сгруппировать его, используя DBSCAN алгоритма следующим образом. Но я получил сообщение об ошибке ValueError: Found array with dim 3. Expected <= 2. не могу ли я использовать для моего 3D изображения?ValueError В то время как кластеризация в Sklearn

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) 
+1

Если вы посмотрите на документацию: X: массив или разреженная (CSR) матрица формы (n_samples, n_features) или массив формы (n_samples, n_samples) – Moritz

+0

Как вы определяете расстояние между двумя пикселями? – yangjie

+0

@yangjie Я понятия не имею. Вы имеете в виду расстояние между двумя пикселями по каналу (вокселе)? – jean

ответ

2

кластерного вам нужно сказать, что расстояние между двумя точками. DBSCAN не является граф кластеризации алгоритм, он работает с функциями. Вы должны представлять каждый пиксель как функции, так что расстояния уместны.

Функции могут быть только RGB, и в этом случае аналогичные цвета группируются вместе. Или же функции могут также включать координаты x, y, которые будут означать пространственные расстояния.

Если вы хотите рассмотреть пространственные расстояния, я бы предложил вам взглянуть на модуль сегментации scikit-image, который содержит несколько популярных методов сегментации изображений.

+0

Итак, да RGB - это функции, а координаты x, y - пространственные расстояния. Я должен скопировать данные, то есть значения канала RGB относительно координат x, y. Это означает, что чем ближе значения RGB, тем ближе координаты x, y, т. Е. Они попадут в один кластер. В этом случае работает DBSCAN? – jean

+0

Он может работать, но вам нужно поместить все ваши данные в массив 2d, где каждая строка имеет один пиксель, а первые три столбца - значения RGB, а следующие два столбца - значения x и y. (и вам, вероятно, нужно будет умножить любое из них на какое-то значение, чтобы получить их в том же порядке). –

Смежные вопросы