1. 獲取顏色特徵集合
2. k均值聚類
3. 顯示聚類結果
輸出結果:
輸出結果:
原始碼int main(int argc, char *ar**)
cv::imshow("src", src);
int samplenum = src.rows*src.cols;
cv::mat points(samplenum,src.channels(),cv_32f,cv::scalar(0));
std::cout << "資料集維度:" << points.size() << std::endl;
// rgb為特徵
for(int i=0;i(i,j);
int index = i*src.cols + j;
// point(j,i) .
points.at(index,0) = bgr[0];
points.at(index,1) = bgr[1];
points.at(index,2) = bgr[2];}}
cv::mat labels;
cv::mat centers;
/* k均值聚類
api介面:cv_exports_w double kmeans( inputarray data, int k, inputoutputarray bestlabels,
termcriteria criteria, int attempts,
int flags, outputarray centers = noarray() );
引數分析:
data:聚類資料,n維點集, 矩陣輸入,行為樣本數目,列為特徵。
k: 分割的類數目
bestlabels: 輸入輸出型別,點集合的索引,輸入的值作為起始聚類值
criteria: 迭代終止條件
attempts: 嘗試重新次數
flags: 初始化中心模式,參考cv::kmeansflags
centers: 聚類的中心,output matrix
cv::kmeansflags
*/int clusternum = 4;
cv::termcriteria tc = cv::termcriteria(cv::termcriteria::eps + cv::termcriteria::count,10,0.1);
cv::kmeans(points,clusternum,labels,tc,3,cv::kmeans_random_centers,centers);
std::cout << "矩陣中心\n" << centers
cv::rng rng(12345);
for(int i=0; i < clusternum; i++) colorset.push_back(cv::vec3b(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)));
// colorset.push_back(cv::vec3b(255,0,0));
// colorset.push_back(cv::vec3b(0,255,0));
// colorset.push_back(cv::vec3b(255,0,255));
// colorset.push_back(cv::vec3b(0,255,255));
// colorset.push_back(cv::vec3b(255,255,255));
cv::mat result = cv::mat::zeros(src.rows,src.cols,cv_8uc3);
// rgb 資料轉換到樣本資料
// 顯示影象分割結果
for(int i=0;i(index);
result.at(i, j) = colorset[label];}}
cv::imshow("cluster result", result);
// 繪製中心
cv::waitkey(0);
return 1;
}
SAS 聚類分析 K 均值聚類
k 均值方法,有時也叫勞埃德方法或 lioyd forgy 方法。k 均值聚類的核心思想是 為指定劃分數目的最佳劃分。對於 n 個觀測,每個觀測是 m 維的實數向量,現在需要找到 k 個聚類 其中 k n,即 n 個子集 使得每個類別分組內的方差最小化。1.隨機選取 k 個真實 或虛擬的資料點作為初...
聚類分析(一) 什麼是聚類分析
將一群物理物件或者抽象物件的劃分成相似的物件類的過程。其中類簇是資料物件的集合,在類簇中所有的物件都彼此相似,而類簇與類簇之間的物件是彼此相異。聚類除了可以用於資料分割 data segmentation 也可以用於離群點檢測 outlier detection 所謂的離群點指的是與 普通 點相對應...
聚類分析(一) 什麼是聚類分析
將一群物理物件或者抽象物件的劃分成相似的物件類的過程。其中類簇是資料物件的集合,在類簇中所有的物件都彼此相似,而類簇與類簇之間的物件是彼此相異。聚類除了可以用於資料分割 data segmentation 也可以用於離群點檢測 outlier detection 所謂的離群點指的是與 普通 點相對應...