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

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