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

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