[英]Fix KMeans cluster position
我正在嘗試使用 KMeans 對 RGB colors 進行聚類,並自動計算圖像上每組的像素數。 為此,我將質心的初始 position 設置在我想從 sklearn 分類和運行 KMeans 的位置。
問題是,根據圖像,算法 output 改變了初始質心向量的順序,所以當我計算元素的數量時,它會變成錯誤的顏色。
當我沒有一個或多個位於圖像初始質心的 colors 時,通常會發生這種情況。 在這種情況下,我希望它改為 0。
有誰知道如何在 KMeans 預測的 output 上修復初始質心的順序?
代碼如下:
centroid_start = np.array([[0,0,0],#Black
[38,64,87], #Col1
[43,68,98], #Col2
[23,42,45], #Col3
[160, 62, 0],#Col3
[153, 82, 33], #Col5
[198, 130, 109], #Col6
[100,105,79], #Col7
[220,138, 22]#Col8
], np.float64)
image = cv.cvtColor(img, cv.COLOR_HSV2RGB)
reshape=image.reshape((image.shape[0]*image.shape[1], 3))
cluster = KMeans(n_clusters =np.shape(centroid_start[0], init =centroid_start).fit(reshape)
pixels = Counter(cluster.labels_)
print(pixels)
問題是:當我檢查“像素”變量時,0 並不總是對應於黑色,1 並不總是對應於 Col1,等等。
如果您不希望 colors 遷移,您可能不應該使用 k-means。 相反,只需使用 colors 和圖像像素之間的成對距離,然后使用 select 距離最小的顏色。
如果您確實希望遷移初始 colors,那么您必須接受您的一些初始集群中心(顏色)可能會消失或可能遷移到與初始 colors 非常不同的位置。 一種選擇是重新排序您擬合的KMeans object 的cluster_centers_
屬性(可能還有labels_
)的行。 另一個可能更安全的選項是計算擬合集群中心到原始 colors 的映射(再次使用成對距離),然后轉換后續 k-means 分類的結果。 如果您想一步完成所有操作,您可以將KMeans
子類化或通過創建自己的從 BaseEstimator 派生的class來包裝它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.