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