張志浩,付東翔,閆 蕊
(上海理工大學 光電信息與計算機工程學院,上海 200093)
傳統(tǒng)鏡框輪廓尺寸測量方法為接觸式測量,雖然測量精度高,但必須與人接觸,在一些特殊場合和情況下不適用。此外,人工檢查過程緩慢,效率較低,還增加了成本[1]。隨著自動化工藝技術的飛速發(fā)展,非接觸測量方式在解決新型測量問題上取得了較大的進展。其中,圖像處理技術因其高準確率、高速率、環(huán)境適應性強、不存在對被測物體造成損傷等優(yōu)點,逐漸凸顯出優(yōu)勢[2]。目前,部分眼鏡公司已開始使用自動化系統(tǒng)進行鏡框尺寸測量。本文采用非接觸式的測量方法,通過級聯(lián)回歸樹(Ensemble of Regression Trees,ERT)和圖像處理的方法,開發(fā)了一款在線測量鏡框輪廓尺寸的應用(Application,App),可以直接對手機端中人物佩戴眼鏡的圖片進行識別和快速計算,得到圖片中人物所佩戴眼鏡的物理尺寸信息。本文所提算法的整體流程圖如圖1所示。相較于傳統(tǒng)方法,該方法降低了制作成本,對推進國內(nèi)眼鏡行業(yè)的自動化發(fā)展有一定的輔助作用[3]。
圖1 算法流程圖
圖2為68點示意圖,人臉特征點檢測的級聯(lián)回歸模型的定義為:
圖2 68點示意圖
定義1在人臉特征點檢測的級聯(lián)回歸模型中,對于給定的正整數(shù)和初始的人臉形狀,有
(1)
在實際的特征點檢測過程中,將經(jīng)過所有級聯(lián)梯度提升樹后的結果作為對人臉特征點的預測,如式(2)所示。
(2)
輸入的圖片大小存在差異,圖片過大或者過小都會對后續(xù)鏡框區(qū)域圖像提取造成影響,所以需先對輸入的圖像進行指定的縮小或者擴大,再用ERT進行人臉定位[6]。
預處理主要是對圖片進行去躁、增強等操作,從而減少后續(xù)處理過程中的干擾,突出待檢測目標[7]。由于圖片拍攝條件和背景存在較大差別,因此可能會因為背景噪聲過大導致鏡框輪廓被淹沒[8]。所以需要對輸入圖像進行預處理操作來確保原始信息不會丟失,并加強關鍵信息。
輸入的圖像是彩色圖像,具有R、G、B共3個通道,每個通道的顏色變化范圍為0~255。彩色圖像轉換成灰度圖像后可以使得圖像的運算更加簡單,加快圖像處理速度[9]。和彩色圖像一樣,灰度圖像也能夠較好地描述整幅圖像中整體和局部細節(jié)特征的變化。對圖像進行灰度化后,可更加便捷地從鏡框圖像中提取輪廓圖像。
通過攝像頭獲取的圖像存在一定的噪聲,為了確保在隨后的鏡框輪廓檢測中獲取更好的效果,需要采用中值濾波對讀取的圖像去噪[10]。
為了便于后續(xù)對鏡框圖像進行輪廓提取,需要進一步對圖像進行二值化操作,以保存鏡框條紋的形狀、位置信息。
經(jīng)過二值化后,可以獲得質量較高的鏡框條紋,但是鏡框的邊緣會存在明顯的毛刺,這些毛刺將對后續(xù)鏡框尺寸數(shù)據(jù)提取造成不利的影響[11]。通過觀察可知這些毛刺大部分集中在鏡框輪廓邊緣處,因此可采用邊緣模板匹配方法將其去除[12]:首先提取出鏡框輪廓的單個像素的連續(xù)邊緣,使用形態(tài)學開運算去除未連接的小邊緣;然后,通過膨脹運算消除毛刺;最后,采用連通域分析消除不連續(xù)的邊緣點。
圖像邊緣檢測在圖像處理和機器視覺中起著重要的作用。在圖像中,最重要的參數(shù)是邊緣,邊緣主要用于圖像分析和處理[13],邊緣檢測的目的是把目標物體與背景區(qū)分開。雖然算法各不相同,但其步驟大致可分為4步:噪聲濾波、邊緣增強、檢測和定位[14]。
邊緣檢測最常見的算子有Sobel算子和Canny算子。Canny算子可以保存更完整的檢測圖像邊緣信息,輪廓斷裂和缺失情況也較少;而采用Sobel算子檢測后,輪廓圖較模糊,也會丟失部分邊緣信息[15],因此本文使用Canny算子作為檢測算子。
傳統(tǒng)Canny算子定義了兩個閾值(一個較高的閾值和一個較低的閾值,證明了對滯后的引用),使用者可根據(jù)經(jīng)驗來輸入兩個閾值。過高的閾值會導致邊緣的斷裂,從而使原本連續(xù)的邊緣變得不連續(xù),進而導致邊緣信息丟失;過低的閾值可能導致出現(xiàn)偽邊緣[16]。當圖像的外界情況發(fā)生改變時,相機拍攝的圖片整體灰度化分布也會隨之變化,故閾值也需要進行相應的變換。由于傳統(tǒng)的Canny算子閾值是手動輸入的,并不能根據(jù)環(huán)境變化做出相應的調整,因此缺乏適用性[17]。為了彌補傳統(tǒng)Canny算子在自適應方面的不足,本文采用自適應閾值分割算法,根據(jù)圖像灰度特征變化來自適應選擇較為合適的閾值。本文采用的改進Canny算子算法流程如圖3所示。
圖3 改進Canny算子流程
當確定好鏡框輪廓線后,即可進行識別處理。實驗中鏡框的輪廓尺寸在整個圖片區(qū)域里屬于最大封閉輪廓,在經(jīng)過上述一系列步驟后會留下一些相似的小輪廓,可通過面積篩選法進行去除。去除原理為:設置一個固定的面積閾值,面積超過閾值者被保留,否則去除。
在獲取到鏡框輪廓后,需要進行標定,這樣才能得到鏡框尺寸參數(shù)的實際信息。
(3)
本文以瞳距為參照物,利用ERT特征點和最小外接矩形的4個頂點的已知坐標,只需進行簡單的幾何運算便可以得到實驗數(shù)據(jù)的真實值。
根據(jù)級聯(lián)回歸樹定位人臉特征點來定位左右瞳孔。對點37、點38、點40、點41這4個特征點的坐標求取平均值,得到左瞳孔坐標為e1(ex1,ey1);求取點43、點44、點46及點47這4個特征點坐標平均值,獲得右瞳孔的坐標為e2(ex2,ey2)。瞳距的像素尺寸e的計算如式(4)所示。
(4)
圖4中為眼鏡店制作鏡框所需要的參數(shù),本文中這些參數(shù)的計算方法如下:
圖4 鏡框參數(shù)
(2)鏡框寬度(HBOX)。長度為鏡框輪廓提取圖中最小外接矩形的寬;
(3)鏡框高度(VBOX)。長度為鏡框輪廓提取圖中最小外接矩形的高;
(4)瞳高(SEGHT)。瞳高指瞳孔中心到鏡框底部的距離,其長度為鏡框最小外接矩形的左下頂點與左瞳孔縱坐標之差;
(5)中梁(DBL)。中梁長度為級聯(lián)回歸樹特征點27的橫坐標與左瞳孔橫坐標差值的兩倍。
另外還需要得到瞳孔到鏡框邊緣的最大直徑(ED)。左瞳孔坐標為e1(xe1,ye1),設鏡框上的點坐標為c(xi,yi),則鏡框上的點到瞳孔的距離Bi如式(5)所示。
(5)
遍歷鏡框上所有的點,所求得的最大值即為需要的ED值。由于外接矩形4個頂點的坐標和級聯(lián)回歸樹特征點的坐標已知,因此可以算出以上數(shù)據(jù)的像素距離,然后根據(jù)算出的長度當量即可得到各個參數(shù)的實際值。
本文實驗算法環(huán)境如下:CPU為Intel(R)Core(TM)i5-4 210 M 2.60 GHz,內(nèi)存為16 GB,Windows 10操作系統(tǒng),編程語言為Python3.7,集成開發(fā)環(huán)境為PyCharm、Opencv3.2.0和Dlib19.15。本文采用的是經(jīng)典的面向過程編程方法,對關鍵算法函數(shù)實現(xiàn)進行了打包和優(yōu)化,從輸入圖像到輸出數(shù)據(jù)僅需0.5 s。
具體算法的實現(xiàn)步驟如下:
(1)人臉鏡框區(qū)域提取??紤]到有些鏡框的尺寸較大,為保證將鏡框區(qū)域完整的提取出來,選取特征點0、16、19、33作為裁剪矩形的4個坐標,提取效果如圖5所示;
圖5 鏡框區(qū)域提取圖
(2)自適應閾值處理。由圖6到圖8的對比可以看出,與傳統(tǒng)方法相比,采用改進后的Canny算法增強了邊緣效果且干擾部分顯著減少。由于低閾值是算法依據(jù)圖像的灰度分布計算得到的,因此也減少了偽邊緣的產(chǎn)生,保證了后續(xù)鏡框輪廓檢測和提取的準確性;
圖6 Sobel算子效果
圖7 傳統(tǒng)Canny算子效果
圖8 改進Canny算子效果
圖9 鏡框輪廓提取圖
(3)鏡框輪廓提取。鏡框識別模式采用最小外接矩形法進行校正,提高了對鏡框的計算精度,同時方便后續(xù)對鏡框輪廓的尺寸測量;
(4)根據(jù)章節(jié)4中描述的數(shù)據(jù)測量方法對鏡框輪廓尺寸進行測量。
文獻[14]中雖然設計了提取鏡框輪廓系統(tǒng),但并未設計尺寸測量系統(tǒng),同時由于數(shù)據(jù)點的提取誤差較大,采集到的鏡框輪廓存在較大誤差。文獻[13]中的實驗平臺搭建復雜,實驗流程繁瑣,對外界環(huán)境要求較高,適用性不強。本文所用方法僅需用戶提供瞳距的真實值就可以準確地測出鏡框輪廓尺寸的準確信息,與文獻[14]和文獻[13]中的方法相比,實驗環(huán)境復雜度更小。
對采集到的300張人臉圖像分別用傳統(tǒng)Canny算子和本文改進的Canny算子代入程序中進行測試,并將測試結果與實際鏡框尺寸參數(shù)進行對比,得到的誤差分布如表1、表2所示。
表1 改進Canny算子誤差分布
表2 傳統(tǒng)Canny算子誤差分布
通過對比可以看出,本文使用的改進后的Canny算子在±1.5 mm和±2 mm誤差內(nèi)的精度達到了92%以上,與傳統(tǒng)Canny算法相比提高了10%左右;在±0.5 mm誤差范圍內(nèi),本文算法的測量精度達到72%,與傳統(tǒng)Canny算法相比提高了21%。
表3 測量結果對比
對300次測量的長度結果取平均值,得到最大誤差為2.01%,最小誤差為0.20%,總體平均誤差為1.10%。從實驗結果可以看出,本文提出的鏡框輪廓測量方法可以滿足實際測量的需求。
本文提出的方法在確定鏡框輪廓尺寸時只需要一個實驗參數(shù)。通過大量測試和實際數(shù)值對比分析可知,本文測量方法可以快速準確地識別鏡框的輪廓并計算實際尺寸。在預處理、邊緣檢測等過程中,本文算法的優(yōu)化處理效果較好,計算精度較高,可被用于開發(fā)手機App。在今后的工作中,將嘗試將其他新技術引入到邊緣檢測系統(tǒng)當中,使其性能更加完善,精度越來越高,從而滿足顧客的多種需求。