opencv之kmeans聚類演算法

2021-07-26 19:35:36 字數 1426 閱讀 5664

k-means演算法算是個著名的聚類演算法了,不僅容易實現,並且效果也不錯,訓練過程不需人工干預,實乃模式識別等領域的居家必備良品啊,今天就拿這個演算法練練手。

總結來說,這個演算法的步驟如下:

kmeans是非常經典的聚類演算法,至今也還保留著較強的生命力,影象處理中經常用到kmeans演算法或者其改進演算法進行影象分割操作,在資料探勘中kmeans經常用來做資料預處理。opencv中提供了完整的kmeans演算法,其函式原型為:

double kmeans( inputarray data, int k, inputoutputarray bestlabels, termcriteria criteria, int attempts, int flags, outputarray centers = noarray() );

其中data表示用於聚類的資料,是n維的陣列型別(mat型),必須浮點型;

k表示需要聚類的類別數;

bestlabels聚類後的標籤陣列,mat型;

criteria迭代收斂準則(max_iter最大迭代次數,eps最高精度);

attemps表示嘗試的次數,防止陷入區域性最優;

flags 表示聚類中心的選取方式(kmeans_random_centers 隨機選取,kmeans_pp_centers使用arthur提供的演算法,kmeans_use_initial_labels使用初始標籤);

centers 表示聚類後的類別中心。

關於kmeans的理論可以參考:基本kmeans演算法介紹及其實現

補充:

k-means 演算法接受輸入量 k ;然後將n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小

1. 演算法基本步驟

(1) 從 n個資料物件任意選擇 k 個物件作為初始聚類中心;

(2) 根據每個聚類物件的均值(中心物件),計算每個物件與這些中心物件的距離;並根據最小距離重新對相應物件進行劃分;

(3) 重新計算每個(有變化)聚類的均值(中心物件);

(4) 計算標準測度函式,當滿足一定條件,如函式收斂時,則演算法終止;如果條件不滿足則回到步驟(2)。

2.opencv 函式使用

int cvkmeans2(const cvarr* samples, //輸入樣本的浮點矩陣,每個樣本一行

int nclusters,//所給定的聚類數目 

cvarr* labels, //輸出整數向量:每個樣本對應的類別標識

cvtermcriteria termcrit, //指定聚類的最大迭代次數和/或精度(兩次迭代引起的聚類中心的移動距離)

int attempts=1, cvrng* rng=0,int flags=0, 

cvarr* centers=0,double* compactness=0);

參考:

聚類演算法之Kmeans

kmeans是聚類演算法中比較簡單的演算法,也用的非常多。這裡進行簡單的解釋,主要目的在於給自己記錄,以備以後檢視。k均值聚類的主要思想是為了使得各個類的點離聚類中心都盡可能近。k均值聚類的演算法可以描述為 輸入 資料集d d 聚類簇個數 k 演算法 從資料集d中隨機選擇k個樣本作為初始聚類中心 r...

聚類演算法之K means

k means演算法也稱k 均值聚類演算法。它試圖通過基於原型的 劃分的距離計算來發現k個使用者預先指定的簇。將一組資料劃分為預先設定好的k個簇,也可理解為隨機選擇k個向量作為初始均值向量。接下來根據均值向量將樣本劃分到距離最近的均值向量所在的簇中。這是一次迭代過程。重新計算並更新均值向量,不斷重複...

經典演算法之k means聚類

原理 給定一系列樣本點,想要分成k類 1 首先從中隨機選取k個點作為質心 2 分別計算每個點到這k個質心的歐式距離 為例 到哪個質心距離最小,這個點就屬於這個質心,這樣把所有點分成k類 3 再分別計算k類中每一類新的質心,根據公式2 4 迭代 2 3 直到達到最優條件,條件如最小距離平方和公式3 公...