KMeans, чтобы найти доминирующий цвет каждого изображения в массиве изображений - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь использовать K-Means, чтобы найти доминирующий цвет каждого изображения в массиве изображений.В приведенном ниже примере используются KMeans из импорта из python's sklearn.cluster.

Скажем, например, у меня есть изображение размером 100x100 пикселей, я хотел бы найти доминирующий цвет блоков 5x5 в изображении 100x100.

Моя текущая реализация (ниже) использует K-Means для анализа каждого блока 5x5 по одному, что очень медленно для больших размеров изображения.Я хотел бы передать массив изображений в K-Means и вернуть ему массив доминирующих цветов, где каждый индекс в возвращенном массиве соответствует индексу в массиве изображений.

Текущая реализация:

def get_dominant_color(image):
    image = image.reshape((image.shape[0] * image.shape[1], 3))

    clt = KMeans(n_clusters = 4)
    labels = clt.fit_predict(image)
    label_counts = Counter(labels)
    dominant_color = clt.cluster_centers_[label_counts.most_common(1)[0][0]]

    divisor = np.sum(dominant_color)
    if divisor != 0:
        # normalize the rgb values
        dominant_color = dominant_color / np.sum(dominant_color)

    return dominant_color

Я пытался изменить это, чтобы вызвать clt.fit_predict(images), где images - это массив блоков 5x5, но я верю, что это будет смешивать все цвета всех изображений для получения одного вывода.Если возможно, как я могу манипулировать этим, чтобы независимо анализировать каждое отдельное изображение?

...