簡體   English   中英

修復 KMeans 集群 position

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM