中央大學資工系103學年度第一學期
授課教師:陳慶瀚
Unit 3實習. Segmentation I : Thresholding
影像切割(Image Segmentation)目標在於將影像分割成均勻的兩個(通常是物件和背景)或兩個以上的區域。
常用的影像切割方法有(1)Thresholding; (2)Region-Growing; (3)Morphological segmentation─Watershed Algorithm。 1. Segmentation by iterated thresholding 步驟1、假設影像f(i,j)中的物件和背景的各自灰階統計分布均為高斯分布,任意取物件和背景的各自一點像素值作為物件和背景代表灰階的初始值。在真實影像中,可假設影像四個角落的像素為背景像素,其他則屬物件,已兩者的平均值μB 、μO作為背景和物件的初始灰階平均值。 步驟2、計算T = (μB+μO)/2 步驟3、以T為threshold將影像切割為物件和背景兩個區域, 再重新計算兩個區域的灰階平均值:
步驟4、重回步驟2,3,直到μB 、μO不再改變為止。
/*-----------------------AlGORITHM---------------------------* * Compute u1,the mean grey level of the corner pixels * Compute u2,the mean grey level of all other pixels * Told<=0 * Tnew<=(u1+u2)/2 * while Tnew!=Told do * u1<=mean grey level of pixels for which f(x,y)<Tnew * u2<=mean grey level of pixels for which f(x,y)>=Tnew * Told<=Tnew * Tnew=(u1+u2)/2 * end while * Final threshold <= Tnew *-----------------------------------------------------------*/
int getOptimalThreshold(uc2D &grayimg) { double u1,u2; int Told,Tnew; int t1,t2; float Threshold; u1=u2=0; t1=t2=0; for(int i=0;i<grayimg.nr;i++) { for(int j=0;j<grayimg.nc;j++) { if((i==0)||(i==grayimg.nr-1)||(j==0)||(j==grayimg.nc-1)) { t1++; u1=u1+grayimg.m[i][j]; } else { t2++; u2=u2+grayimg.m[i][j]; } } } Told=0; u1=u1/t1; u2=u2/t2; Tnew=(u1+u2)/2; while(Tnew!=Told) { u1=0; u2=0; t1=0; t2=0; for(int i=0;i<grayimg.nr;i++) { for(int j=0;j<grayimg.nc;j++) { if(grayimg.m[i][j]<Tnew) { t1++; u1=u1+grayimg.m[i][j]; } else { t2++; u2=u2+grayimg.m[i][j]; } } } Told=Tnew; u1=u1/t1; u2=u2/t2; Tnew=(u1+u2)/2; } return int(Tnew); }
請應用iterated thresholding方法找出finger300x300影像的最佳threshold,並根據每一次迭代所得到的threshold切割影像,輸出每一次迭代的影像切割結果。
2. Otsu統計法決定影像切割的Threshold 假設T為影像切割的threshold,則T所切割出來的背景和物件區域其灰階值分布將呈現C1, C2兩個聚類(cluster)。根據Otsu,有兩個條件可判定T為最佳threshold: (1)C1和C2的其間變異數(Between-variance)最大; (2)C1和C2的內在變異數(Within-variance)總合最小。 請參考單元二的標準差計算程式碼,設計一個程式,分別以條件(1)和條件(2)找出最佳threshold,並比較影像切割結果。 |