全局阈值算法分析
因?yàn)樽罱谧鰯?shù)字識(shí)別,需要用到自動(dòng)閾值,重新看了看全局閾值算法,分析寫在這里
(學(xué)習(xí)了清風(fēng)似水流的CSDN博客:http://blog.csdn.net/ilyhlf5201314/article/details/8525695)
1. ?處理流程:
? ? ? ? ? ? ?1.為全局閾值選擇一個(gè)初始估計(jì)值T(圖像的平均灰度)。
? ? ? ? ? ? ?2.用T分割圖像。產(chǎn)生兩組像素:G1有灰度值大于T的像素組成,G2有小于等于T像素組成。
? ? ? ? ? ? ?3.計(jì)算G1和G2像素的平均灰度值m1和m2;
? ? ? ? ? ? ?4.計(jì)算一個(gè)新的閾值:T = (m1 + m2) / 2;
? ? ? ? ? ? ?5.重復(fù)步驟2和4,直到連續(xù)迭代中的T值間的差為零。
? ? ? ? ? ? ?此種方法主要適用于圖像直方圖有明顯波谷。
2.程序代碼:
1 //全局閾值函數(shù) 2 //給定一個(gè)初始閾值T,在T兩邊分別計(jì)算平均閾值T1和T2,不等,T=(T1+T2)/2,知道兩邊的平均閾值相等 3 u8 GlobalThreshold(u8 **img, u16 height, u16 width) 4 { 5 u8 pg[256] = {0}; //直方圖數(shù)組 6 u16 i,j,t=0,t1,t2,k1,k2; 7 double u=0,u1,u2; 8 9 //for (i = 0; i<256; i++) pg[i]=0; 10 for (i = 0; i<height; i++) //直方圖統(tǒng)計(jì) 11 { 12 for (j = 0; j<width; j++) 13 { 14 pg[ img[i][j] ]++; 15 } 16 } 17 18 19 20 for (i=0;i<256;i++) 21 { 22 t += pg[i]; //計(jì)算被統(tǒng)計(jì)的像素點(diǎn)數(shù)目 23 u += i * pg[i]; //第i階灰度值*第i階像素?cái)?shù)目 24 } 25 k2 = (u16 )( u/t); //計(jì)算被統(tǒng)計(jì)像素點(diǎn)灰度的平均值,初始灰度值 26 27 do { 28 k1 = k2; 29 t1 = 0; u1 = 0; 30 for (i = 0; i<=k1; i++) //類似前面,計(jì)算低灰度組的累加值 31 { 32 t1 += pg[i]; //計(jì)算低灰度組被統(tǒng)計(jì)的像素點(diǎn)數(shù)目 33 u1 += i * pg[i]; 34 } 35 36 t2 = t - t1; //得到高灰度組的像素點(diǎn)數(shù)目 37 u2 = u - u1; //得到高灰度組的加權(quán)灰度 38 39 if (t1) 40 u1=u1/t1; //計(jì)算低灰度組的平均值 41 else 42 u1=0; 43 44 if (t2) 45 u2=u2/t2; //計(jì)算高灰度組的平均值 46 else 47 u2=0; 48 49 k2 = (u16 )((u1 + u2)/2 ); //計(jì)算新的閾值 50 }while( k1 != k2); //如果數(shù)值未穩(wěn)定,繼續(xù) 51 52 return k1; 53 }?
轉(zhuǎn)載于:https://www.cnblogs.com/rongfangliu/p/3575898.html
總結(jié)
- 上一篇: CPU亲和力
- 下一篇: 网络时代:我只是一个用户