龔 平,梁 菁
(1.梧州學(xué)院 電子與信息工程學(xué)院,廣西 梧州 543002;2.梧州學(xué)院 大數(shù)據(jù)與軟件工程學(xué)院,廣西 梧州 543002)
長度是纖維的重要形態(tài)參數(shù)之一,也是評價(jià)纖維品質(zhì)與特性的重要指標(biāo)之一,直接關(guān)系其加工性能和使用價(jià)值。隨著纖維測量技術(shù)的發(fā)展,結(jié)合顯微鏡成像并應(yīng)用計(jì)算機(jī)圖像處理的方法進(jìn)行纖維長度的測量已經(jīng)越來越受到關(guān)注。但是,由于纖維形態(tài)不一、細(xì)小、柔軟且容易絮聚,給基于圖像處理的纖維長度自動(dòng)測量帶來了巨大的困難和挑戰(zhàn)。點(diǎn)擊測量依靠人工用鼠標(biāo)分段點(diǎn)擊纖維的不同部位,計(jì)算機(jī)通過計(jì)算各點(diǎn)間線段的像素?cái)?shù)量自動(dòng)計(jì)算纖維長度和寬度,然后再進(jìn)行統(tǒng)計(jì),每像素代表的實(shí)際尺寸用測微尺校準(zhǔn),該方法測量準(zhǔn)確,但測量速度較慢[1]。文獻(xiàn)[2]采取人工將棉纖維單根化并進(jìn)行圖像采集,保證獲取的圖像中纖維無交叉,再通過對圖像二值化、去除噪聲、補(bǔ)斷、細(xì)化和剪枝等處理,統(tǒng)計(jì)每根纖維的像素個(gè)數(shù),實(shí)現(xiàn)測量棉纖維長度,該方法可提高棉纖維長度分布測量的準(zhǔn)確性與可靠性,但測量速度較慢。
為提高纖維長度測量的效率,針對在顯微鏡下獲取的無交叉的植物纖維圖像,本研究提出一種自動(dòng)測量長度的方法。首先對采集到的纖維圖像進(jìn)行背景和雜質(zhì)分割,得到待測量的纖維主體;然后對纖維進(jìn)行骨架化處理;最后統(tǒng)計(jì)像素個(gè)數(shù)并通過校準(zhǔn)的像素參數(shù)計(jì)算纖維長度。
針對采集到的無交叉的植物纖維圖像,本研究自動(dòng)測量纖維長度的方法流程見圖1。
圖1 自動(dòng)測量纖維長度方法的流程
先將采集到的無交叉植物纖維圖像轉(zhuǎn)換為灰度圖,再進(jìn)行Canny邊緣檢測[3-4],然后提取檢測得到的各輪廓。步驟如下。
Step 1:使用高斯濾波器平滑圖像,降低噪聲;
Step 2:使用一階的梯度算子計(jì)算圖像中每個(gè)像素點(diǎn)的梯度;
Step 3:對梯度值應(yīng)用非極大值抑制(Non-Maximum Suppression),使局部灰度變化大的像素保留下來;
Step 4:應(yīng)用雙閾值(Double-Threshold)篩選和連接邊緣。設(shè)置高閾值和低閾值的比例為3∶1。梯度值高于高閾值的像素點(diǎn)定義為強(qiáng)邊緣像素,保留該像素;刪除梯度值低于低閾值的像素點(diǎn)。對于周圍無強(qiáng)邊緣像素的像素點(diǎn),從梯度值介于雙閾值之間的像素點(diǎn)中進(jìn)行選擇,使得邊緣盡可能的閉合。
得到圖像邊緣后,借助OpenCV中Imgproc.findContours()方法得到其輪廓。
由于玻片間有氣泡、載玻片上有污點(diǎn)、纖維有細(xì)小部分等原因,采集到的纖維圖像會(huì)存在雜質(zhì),雜質(zhì)也會(huì)被檢測到輪廓(如圖2所示),因此需要對上述過程得到的各輪廓進(jìn)行篩選。
a.含有氣泡和污點(diǎn)的纖維圖像;b.含有毛細(xì)纖維和污點(diǎn)的圖像;c.對a提取的輪廓;d.對a提取的輪廓
針對每一個(gè)輪廓,本方法通過OpenCV的Imgproc.minAreaRect()方法得到包含該輪廓最小面積的斜矩形,再計(jì)算每一個(gè)矩形的面積。大量實(shí)驗(yàn)表明,相對于有效的待檢測纖維而言,“雜質(zhì)”具有較小的面積,可設(shè)置閾值移除小面積矩形對應(yīng)的輪廓。此外,有效的待檢測纖維應(yīng)具有一定的長度,即其對應(yīng)的斜矩陣應(yīng)具有較大的長寬比例?;趯Υ罅款愃朴趫D2-c,d的輪廓對應(yīng)矩形面積值的數(shù)據(jù)統(tǒng)計(jì),本研究方法設(shè)置閾值為Smax×p,其中Smax表示求取的最大的矩形面積值,p取值為0.05~0.15時(shí)準(zhǔn)確率較高;設(shè)置剔除長寬比大于4∶3的矩形對應(yīng)的輪廓。
對圖2-c,d中輪廓剔除“雜質(zhì)”后得到如圖3所示的待測纖維的輪廓。
a.剔除氣泡保留的纖維輪廓;b.剔除細(xì)小纖維保留的纖維輪廓
對纖維主體進(jìn)行骨架化處理前,先對其進(jìn)行基本的腐蝕和膨脹處理,目的是使輪廓中的斷點(diǎn)得以連續(xù)、使輪廓內(nèi)的部分得以填充。對圖3中輪廓進(jìn)行腐蝕、膨脹后的效果如圖4所示。
a.圖3-a的腐蝕膨脹結(jié)果;b.圖3-b的腐蝕膨脹結(jié)果
纖維長度自動(dòng)測量的關(guān)鍵是細(xì)化纖維得到單像素寬度的骨架。針對不同形態(tài)的纖維,一些經(jīng)典的細(xì)化算法得到的纖維骨骼會(huì)有不同程度的毛刺。本研究采用牟少敏[5]等人提出的改進(jìn)的細(xì)化算法,該算法在Zhang[6]細(xì)化算法的基礎(chǔ)上,增加了3類刪除像素的條件,能夠較好的保持骨骼和剔除毛刺。
設(shè)當(dāng)前正在處理的像素點(diǎn)為p,對其八鄰域編號為p1~p8,如圖5所示。
圖5 像素點(diǎn)p及八鄰域像素編號
細(xì)化算法具體描述為:
算法 Thinning(I,i)
輸入:待細(xì)化的二值圖像I
輸出:單像素寬度的骨架圖像Y,遍歷參數(shù)i
Step1.遍歷訪問圖像中I所有的像素點(diǎn)p
Step2.如果Ip為0則Yp=0
否則,進(jìn)行Step3-Step9
Step3.計(jì)算b=p1+p2+p3+p4+p5+p6+p7+p8
Step4.考察八鄰域中相鄰像素的關(guān)系:
t1=(p2 == 0 && p3 == 1)?1:0 t2=(p3 == 0 && p4 == 1)?1:0
t3=(p4 == 0 && p5 == 1)?1:0 t4=(p5 == 0 && p6 == 1)?1:0
t5=(p6 == 0 && p7 == 1)?1:0 t6=(p7 == 0 && p8 == 1)?1:0
t7=(p8 == 0 && p1 == 1)?1:0 t8=(p1 == 0 && p2 == 1)?1:0
Step5.計(jì)算a=t1+t2+t3+t4+t5+t6+t7+t8
Step6.計(jì)算 m1 = i==1?p2×p4×p6:p2×p4×p8
m2 = i==1?p4×p6×p8:p2×p6×p8
Step7.計(jì)算mp=p2+p3×2+p4×4+p5×8+p6×16+p7×32+p8×64+p1×128
Step8.進(jìn)行布爾計(jì)算 flag=(mp==65||mp==5||mp==20||mp==80||mp==13||mp==22||mp==52||mp==133||mp==141||mp==54)
Step9.如果(b >= 2 && b <= 6)&&(a == 1||flag)&&(m1 == 0 && m2 == 0)為true,則Yp=0
將腐蝕、膨脹后的結(jié)果進(jìn)行二值化,使用上述算法進(jìn)行纖維細(xì)化得到如圖6所示的纖維骨架。
a.含有氣泡各污點(diǎn)的纖維圖像;b.含有細(xì)小纖維和污點(diǎn)的圖像
細(xì)化后得到了纖維的單像素寬度的骨架,有p、p1~p8位置上的像素值取值非0即1。
將骨架圖像中的像素分為三類進(jìn)行處理:
(1)非骨架區(qū)域的點(diǎn),有p+p1+p2+…+p8=0;
(2)骨架的端點(diǎn)(起點(diǎn)或終點(diǎn)),有p+p1+p2+…+p8=2;
(3)骨架中的銜接點(diǎn),有p+p1+p2+…+p8≥3(對于不存在毛刺或分叉的骨架,有p+p1+p2+…+p8=3)。
(4)在骨架圖像中首先尋找骨架的端點(diǎn),記為s,然后將其八鄰域中訪問值為1的像素記為q,同時(shí)將已訪問過的s記為0;再以q作為新的起點(diǎn),記為s,重復(fù)上述操作,直至訪問到骨架的另一個(gè)端點(diǎn)。此過程中記錄像素鏈中當(dāng)前起點(diǎn)像素和后繼像素的相鄰關(guān)系,即記錄出現(xiàn)圖5所示p1-p、p3-p、p5-p或p7-p相鄰的次數(shù)k1,記錄像素鏈中出現(xiàn)p2-p、p6-p相鄰的次數(shù)k2,記錄像素鏈中出現(xiàn)p4-p、p8-p相鄰的次數(shù)k3。若該條纖維骨架的像素個(gè)數(shù)n,有n=k1+k2+k3-1。
a.含有氣泡各污點(diǎn)的纖維圖像;b.含有細(xì)小纖維和污點(diǎn)的圖像
不同的圖像采集系統(tǒng)觀測到的纖維圖像尺寸會(huì)有不同。在計(jì)算纖維長度時(shí)需要先行標(biāo)定當(dāng)前環(huán)境下的單位長度。在特定的物鏡倍數(shù)下,采集標(biāo)尺圖像(如圖8-a,b)和待測纖維圖像,使二者的圖像尺寸一致。為減少誤差,本方法并不直接標(biāo)定單個(gè)像素的長度,而是記錄1 mm對應(yīng)在水平方向、垂直方向各占多少像素,再按比例計(jì)算得到纖維的長度。
a.水平方向1 mm標(biāo)尺成像;b.垂直方向1 mm標(biāo)尺成像
假設(shè)圖像寬度為w,高度為h,1 mm在水平方向長度為tw個(gè)像素,在垂直方向?yàn)閠h個(gè)像素。對于相同標(biāo)準(zhǔn)下采集的尺寸為w*h的待測纖維圖像,其中的纖維長度len通過式(1)進(jìn)行計(jì)算。
(1)
測試不同形態(tài)的無交叉纖維圖像,驗(yàn)證本方法的魯棒性。試驗(yàn)結(jié)果表明,本方法對背景不復(fù)雜的無交叉纖維能以較高的準(zhǔn)確率得到纖維的骨架,從而計(jì)算得到纖維長度(如圖9-a,b所示);但存在有一定程度的漏檢與誤檢(如圖9-c所示),結(jié)合人工刪除誤檢的纖維骨架、點(diǎn)擊增加漏檢的纖維路徑,效果會(huì)更好。
a.準(zhǔn)確提取無交叉的機(jī)械闊葉木槳纖維;b.準(zhǔn)確提取無交叉的棉纖維;c.漏檢右上角有效纖維
經(jīng)典的人工點(diǎn)擊纖維路徑結(jié)合計(jì)算機(jī)逐段計(jì)算測量的人機(jī)交互方法具有較高的準(zhǔn)確性和可靠性,但速度較慢,對人工判斷有較大的依賴。本研究自動(dòng)測量方法計(jì)算與人機(jī)交互逐段測量方法的部分計(jì)算結(jié)果對比見表1。
表1 自動(dòng)測量與人機(jī)交互逐段測量結(jié)果的對比 mm
不考慮經(jīng)典人機(jī)交互測量的誤差,從表1中可以看出,本研究自動(dòng)測量的方法在部分結(jié)果上與人機(jī)交互測量結(jié)果平均有0.015 06的差異,此差異主要來自于對纖維骨架像素的選擇。從時(shí)間效率方面來看,該方法在速度上明顯優(yōu)于人機(jī)交互逐段測量的方法。
本研究提出并實(shí)現(xiàn)了一種基于圖像處理技術(shù)的無交叉纖維自動(dòng)測量長度的方法。測試結(jié)果表明,該方法能夠針對不同形態(tài)的無交叉纖維圖像實(shí)現(xiàn)長度的自動(dòng)測量。后續(xù)改進(jìn)的思路:一方面嘗試自適應(yīng)的閾值算法,以提高纖維主體提取的準(zhǔn)確性;另一方面改進(jìn)纖維骨架的細(xì)化算法,以便更有效地處理單像素骨架中的毛刺。