【尊重
】本部落格提供多版本的最大最小距離聚類演算法:《
聚類演算法-最大最小距離演算法(例項+**)
》,提供c++,python,opencv以及matlab版本的最大最小距離聚類演算法的實現
目錄
opencv實現最大最小距離聚類演算法
一、最大最小距離演算法基本思想
二、演算法實現步驟
1.c++ opencv實現方法
2.c++,python以及matlab版本
最大最小距離法是模式識別中一種基於試探的類聚演算法,它以歐式距離為基礎,取盡可能遠的物件作為聚類中心。因此可以避免k-means法初值選取時可能出現的聚類種子過於臨近的情況,它不僅能智慧型確定初試聚類種子的個數,而且提高了劃分初試資料集的效率。
該演算法以歐氏距離為基礎,首先初始乙個樣本物件作為第1個聚類中心,再選擇乙個與第1個聚類中心最遠的樣本作為第2個聚類中心,然後確定其他的聚類中心,直到無新的聚類中心產生。最後將樣本按最小距離原則歸入最近的類。
假設有10個模式樣本點:,其樣本分佈如圖所示:
最大最小距離聚類演算法步驟如下:
該演算法的聚類結果與引數和起始點的選取關係重大。若無先驗樣本分佈知識,則只有用試探法通過多次試探優化,若有先驗知識用於指導和選取,則演算法可很快收斂。
為了方便看解計算過程,下面以**的方式列出:
/*計算歐式距離*/
float calcudistance(uchar* ptr, uchar* ptrcen, int cols)
d = sqrt(d);
return d;
}/** @brief 最大最小距離演算法
@param data 輸入樣本資料,每一行為乙個樣本,每個樣本可以存在多個特徵資料
@param theta 閾值,一般設定為0.5,閾值越小聚類中心越多
@param centerindex 聚類中心的下標
@return 返回每個樣本的類別,類別從1開始,0表示未分類或者分類失敗
*/cv::mat maxmindisfun(cv::mat data, float theta, vector¢erindex)
} mindistance = distance.clone();
double minval; double maxval; cv::point minloc; cv::point maxloc;
maxval = maxdistance;
while (maxval > (maxdistance*theta))
} //查詢mindistance中最大值
cv::minmaxloc(mindistance, &minval, &maxval, &minloc, &maxloc);
index = maxloc.y;
} return classes;
}int main()
執行結果:
原始資料data=
[ 0, 0;
3, 8;
2, 2;
1, 1;
5, 3;
4, 8;
6, 3;
5, 4;
6, 4;
7, 5]
類別classes=
[1; 2;
1; 1;
3; 2;
3; 3;
3; 3]
請參考鄙人的部落格:《聚類演算法-最大最小距離演算法(例項+**)》
如果你覺得該帖子幫到你,還望貴人多多支援,鄙人會再接再厲,繼續努力的~
2654 最小距離最大
題目描述 給出n個位置 數軸上的座標值 從中選出k個,讓這k個位置相鄰兩個之間的距離 相鄰位置座標的差值 盡可能的大 盡可能大的意思是這k 1個距離的最小值盡量大 輸出這個最大的最小值。樣例解釋 選位置 1 5 9。輸入 第一行 2個數n和k 2 n 100000,2 k 10000,k n 後面n...
2654 最小距離最大
問題 給出n個位置 數軸上的座標值 從中選出k個,讓這k個位置相鄰兩個之間的距離 相鄰位置座標的差值 盡可能的大 盡可能大的意思是這k 1個距離的最小值盡量大 輸出這個最大的最小值。樣例解釋 選位置 1 5 9。輸入 第一行 2個數n和k 2 n 100000,2 k 10000,k n 後面n行 ...
OpenCV 距離變換實現
距離變換實現影象的每個畫素到最近前景目標或到影象邊界的距離,距離變換的步驟如下 1.將影象進行二值化,子影象值為0,背景為255 2.利用maskl從左向右,從上到下掃瞄,p點是當前畫素點,q點是maskl中鄰域的點,d 為距離計算,包括棋盤距離 城市距離和歐式距離。f p 為p點的畫素值,計算f ...