基於c 的ostu演算法的實現

2022-05-08 19:45:08 字數 1019 閱讀 1244

影象二值化演算法是影象處理的基礎。一般來說,二值化演算法可以分為兩個類別:全域性二值化和區域性二值化。全域性二值化是指通過某種演算法找到乙個全域性的閾值t,對影象中座標為(x,y)的畫素值做如下處理:

ostu就是這樣一種全域性二值化演算法,又叫最大類間方差。因為該演算法會遍歷影象中任意乙個畫素值i,計算當其為閾值時,影象的前景和背景影象(並不一定是真正的前景和背景,只是我們把當前小於i的記做背景,大於i的記做前景)的方差值。當方差值達到最大時,我們認為此時的i是該影象的全域性閾值。

符號說明:

前景點數佔影象比例:w0;平均灰度:u0

背景點數佔影象比例:w1,平局灰度:u1

影象平均灰度:

前景和背景影象方差:

c++**:

int

ostu(mat image)

int pixel=0

;

for(i = 0; i < height; i++)

}//經典ostu演算法,得到前景和背景的分割

//遍歷灰度級[0,255],計算出方差最大的灰度值,為最佳閾值

deltamax=0

;

for(i = 0; i < 256; i++)

else

}mean1=ip1/is1; //

第一類畫素平均灰度值

w0=(float)is1/(float)pixelsum;//

第一類畫素佔整個影象比例

mean2=ip2/is2;

w1=1-w0;

mean=w0*mean1+w1*mean2;

deltatmp=w0*w1*(mean1-mean2)*(mean1-mean2);//

灰度值為i的閾值的類間方差

if (deltatmp>deltamax)

}

return

thres;

}

基於c 實現的幾種排序演算法

插入排序是有乙個已經有序的資料序列,在這個已經排好的資料數列中插入乙個數,要求插入後此資料序列仍然有序。這種演算法適用於少量資料的排序,時間複雜度為o n 2 void insertsort int a,int len a j 1 key 氣泡排序是相鄰的兩個元素比較,像開水冒泡一樣,每輪把最大或最...

基於c 的A star演算法

資料 一 基礎原理 1 從起點開始,向周圍八個方向擴充套件。測試新擴充套件的點的路徑代價,路徑代價由已走的路徑和距離終點的期望加和而成。這個路徑代價是選擇路徑的標準。2 有兩個表open close。close 生成並且考察過的點,存在兩種點。一種是當前選擇的路徑,是最終想要的結果。另一種是考察但沒...

基於 C 的 SQL Parser 實現

乙個函式,可以提取sql語句中查詢字段部分。雖然函式中使用了block,但是block可以很方便的轉換成純 c 的函式,而且未來 block 也很有可能成為 c 標準。import typedef struct field field const field emptyfield static in...