opencv閾值法分割影象
阿新 • • 發佈:2019-01-01
1 /*============================================================================
2 = 程式碼內容:基本全域性閾值法
3 ==============================================================================*/ 4 int BasicGlobalThreshold(int*pg,int start,int end)
5 { // 基本全域性閾值法 6 int i,t,t1,t2,k1,k2;
7 double u,u1,u2;
8 t=0;
9 u=0;
10 for (i=start;i<end;i++)
11 {
12 t+=pg[i];
13 u+=i*pg[i];
14 }
15 k2=(int) (u/t); // 計算此範圍灰度的平均值 16 do17 {
18 k1=k2;
19 t1=0;
20 u1=0;
21 for (i=start;i<=k1;i++)
22 { // 計算低灰度組的累加和23 t1+=pg[i];
24 u1+=i*pg[i];
25 }
26 t2=t-t1;
27 u2=u-u1;
28 if (t1)
29 u1=u1/t1; // 計算低灰度組的平均值30 else31 u1=0;
32 if (t2)
33 u2=u2/t2; // 計算高灰度組的平均值34 else35 u2=0;
36 k2=(int) ((u1+u2)/2); // 得到新的閾值估計值37 }
38 while(k1!=k2); // 資料未穩定,繼續
39 //cout<<"The Threshold of this Image in BasicGlobalThreshold is:"<<k1<<endl;40 return(k1); // 返回閾值41 }