在二值圖像處理特别是OCR識别與比對中,都要通過對字元進行細化以便獲得圖像的骨架,通過zhang-suen細化算法獲得圖像,作為圖像的特征之一,常用來作為識别或者模式比對。
一:算法介紹
Zhang-Suen細化算法通常是一個疊代算法,整個疊代過程分為兩步:
Step One:循環所有前景像素點,對符合如下條件的像素點标記為删除:
1. 2 <= N(p1) <=6
2. S(P1) = 1
3. P2 * P4 * P6 = 0
4. P4 * P6 * P8 = 0
其中N(p1)表示跟P1相鄰的8個像素點中,為前景像素點的個數
S(P1)表示從P2 ~ P9 ~ P2像素中出現0~1的累計次數,其中0表示背景,1表示前景
完整的P1 ~P9的像素位置與舉例如下:
其中 N(p1) = 4, S(P1) = 3, P2*P4*P6=0*0*0=0, P4*P6*P8=0*0*1=0, 不符合條件,無需标記為删除。
Step Two:跟Step One很類似,條件1、2完全一緻,隻是條件3、4稍微不同,滿足如下條件的像素P1則标記為删除,條件如下:
3. P2 * P4 * P8 = 0
4. P2 * P6 * P8 = 0
循環上述兩步驟,直到兩步中都沒有像素被标記為删除為止,輸出的結果即為二值圖像細化後的骨架。
二:代碼實作步驟
1. 二值化輸入圖像,初始化圖像像素對應的标記映射數組
2. 疊代細化算法(Zhang-Suen)
a. Step One
b. Step Two
c. 檢查如果上述兩部沒有任何像素被标記,則停止疊代,否則繼續執行a, b
3. 傳回細化後的圖像,并顯示
三:運作效果

四:完整的Zhang-suen算法代碼實作:
覺得不錯請支援一下!