我正在嘗試使用 KMeans 對 RGB 顏色進行聚類,并自動計算圖像上每個組的像素數。為此,我將質心的初始位置設置在我想要分類的位置,并從 sklearn 運行 KMeans。問題是,根據圖像,算法輸出會改變初始質心向量的順序,因此當我計算元素數量時,它會變成錯誤的顏色。當我在圖像的初始質心中沒有一種或多種顏色時,通常會發生這種情況。在這種情況下,我希望它計數為 0。有誰知道如何修復 KMeans 預測輸出的初始質心順序?代碼如下: 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,等等。
1 回答

qq_遁去的一_1
TA貢獻1725條經驗 獲得超8個贊
如果您不想遷移顏色,則可能不應該使用 k-means。相反,只需使用顏色和圖像像素之間的成對距離,然后選擇距離最小的顏色。
如果您確實希望初始顏色遷移,那么您必須接受一些初始聚類中心(顏色)可能會消失或可能遷移到與初始顏色非常不同的東西。一種選擇是重新排序適合的KMeanscluster_centers_
對象的屬性行(可能還有labels_
)。另一個 - 可能更安全 - 選項是計算擬合簇中心到原始顏色的映射(再次使用成對距離),然后轉換后續 k-means 分類的結果。如果你想一步完成所有這些,你可以通過創建你自己的派生自BaseEstimator的類來子類化或包裝它。KMeans
添加回答
舉報
0/150
提交
取消