Я пытаюсь найти 3 доминирующих цвета нескольких изображений с использованием кластеров K-mean. Проблема, с которой я сталкиваюсь, заключается в том, что K-значит также кластеризует фон изображения. Я использую Python 2.7 и OpenCV 3K-означает цветную кластеризацию - опустить фоновые пиксели с замаскированными массивами numpy
Все изображения имеют тот же серый фон следующего цвета RGB: 150,150,150. Чтобы избежать этого, K-означает также кластерный цвет фона, я создал маскированный массив, который маскирует все значения «150» пикселей из исходного массива изображений, теоретически оставляя в массиве только для не-фоновых пикселей для K-Means. Однако, когда я запускаю свой скрипт, он по-прежнему возвращает серый как один из доминирующих цветов.
Мой вопрос: Маскированный массив, способ пойти (и сделал я что-то не так), или есть ли лучшие альтернативы, чтобы каким-то образом исключить пиксели из кластеров K-средств?
Пожалуйста найти мой код ниже:
from sklearn.cluster import KMeans
from sklearn import metrics
import cv2
import numpy as np
def centroid_histogram(clt):
numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)
(hist, _) = np.histogram(clt.labels_, bins=numLabels)
hist = hist.astype("float")
hist /= hist.sum()
return hist
image = cv2.imread("test1.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
h, w, _ = image.shape
w_new = int(100 * w/max(w, h))
h_new = int(100 * h/max(w, h))
image = cv2.resize(image, (w_new, h_new))
image_array = image.reshape((image.shape[0] * image.shape[1], 3))
image_array = np.ma.masked_values(image_array,150)
clt = KMeans(n_clusters=3)
clt.fit(image_array)
hist = centroid_histogram(clt)
zipped = zip(hist, clt.cluster_centers_)
zipped.sort(reverse=True, key=lambda x: x[0])
hist, clt.cluster_centers = zip(*zipped)
print(clt.cluster_centers_)
это прекрасно работает как вход для kmeans для кластеризации цветов. не используется пространственная информация (позиции пикселей), список пикселей, создаваемых путем индексирования, является прекрасным. – welch
Спасибо @welch, я не был уверен – Soltius