Как сделать минимальным изменение положения центра кластеров при кластеризации пикселей по цветам?

Требуется разбить пиксели фотографии на кластеры по цветам с помощью KMeans так, чтобы красные или близкие к красному цвету пиксели лежали в определённом кластере. Проблема в том, что при кластеризации с заданными центрами сами центры очень сильно меняются. Т.е. на картинке малого одного цвета и много оттенков другого и центр кластера переходит на оттенок другого цвета.
Вот код, что у меня есть:

image=cv2.imread("2.JPG")
w_1,h_1,c=image.shape
image=np.asarray(image)
w_1,h_1,c=image.shape
reshape=np.reshape(image,(w_1*h_1,-1))
df=pd.DataFrame(reshape,columns=["R","G",'B'])
centroid_start = np.array([[0,0,0],#black
                           [255,74,58], #r
                           [0,255,0], #g
                           [0,0,255],#b
                           [255,255,255]], np.float64)      
model=KMeans(n_clusters=5, max_iter=300,init=centroid_start,tol=5,verbose=0)
model.fit(df)
df['cluster'] = model.labels_
print(model.cluster_centers_)

А это то, какие центры кластеров получаются:

[[ 32.33945893  25.82406996  24.38820703]
 [109.68861814 116.17874769 122.84376928]
 [ 78.64083836  78.05760559  79.82114957]
 [ 92.76858345 113.44600281 146.63113604]
 [254.81742351 254.88062439 254.89208085]]

Как сделать так, чтобы смещение данных центров кластеров было минимальным?


Ответы (0 шт):