1. 程式人生 > >opencv閾值法分割影象

opencv閾值法分割影象

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 }