OpenCV實現最大最小距離聚類演算法

2021-08-19 20:08:37 字數 2209 閱讀 8650

【尊重

】本部落格提供多版本的最大最小距離聚類演算法:《

聚類演算法-最大最小距離演算法(例項+**)

》,提供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 ...