當前位置:成語大全網 - 書法字典 - 利用sklearn庫中的KMeans實現彩色圖像聚類分割

利用sklearn庫中的KMeans實現彩色圖像聚類分割

Sklearn庫是最常用和最經典的機器學習庫,它封裝了許多機器學習算法。本文使用該庫中的KMeans算法實現圖像聚類和分割。

本文不談理論,只談應用。

除了sklearn庫之外,我們還需要壹些圖像處理庫。我介紹了以下庫:

我使用pylab圖書館閱讀圖片:

此時讀入的img是壹個形狀為(height,width,3)的三維numpy數組,其中3表示通道數,即三個RGB通道。

但是,KMeans傳入的參數必須是壹個二維數組,因此需要將其分解為兩個維度:

在這種結構中,您只需使用最簡單的方法:

有許多參數,在構建n_clusters之外的其他參數時,我使用默認值:

然後,使用fit()進行訓練:

聚類後,有許多參數,其中兩個參數更重要,需要在此處使用:

聚類完成後,每個像素都需要重新著色,同壹類別中的所有像素都應該用該聚類中心的顏色填充。

在此之前,您需要首先獲得圖片的高度和寬度:

首先,用image.new()重新創建壹張圖片。語法如下所示:

然後您需要使用putpixel()方法來填充像素,但在此之前,您需要處理壹些小細節:

在RGB圖中,每個通道都是0到255之間的整數,但kmeans.cluster_centers_中的元素類型是float64,因此在填充之前,需要稍加處理才能將元素更改為int32類型。

直接改變類型是不合適的,因為kmeans.cluster_centers_畢竟是壹個類似於屬性值的東西,而且名稱太長了,所以改成壹個短的就好。因此,只需制作另壹個副本並使用astype更改數據類型。

如上所述,kmeans.labels_是壹維數組,但圖片是二維的,因此您可以恢復它:

然後妳可以填寫像素:

這裏我們需要註意putpixel()方法,它的兩個參數:

最後,保存圖片:

我在測試中使用了《王者榮耀》中大喬的照片: