姚立權(quán),張 萌,史立峰,朱 虹
(遼寧裝備制造職業(yè)技術(shù)學(xué)院,遼寧沈陽 110161)
西林瓶作為疫苗、凍干等藥品的容器在醫(yī)藥衛(wèi)生行業(yè)被廣泛使用。受制于生產(chǎn)工藝及加工設(shè)備精度的影響,西林瓶標簽易出現(xiàn)傾斜、重疊、錯印及漏印等質(zhì)量問題[1],既不符合國家對于藥品監(jiān)管的法律法規(guī),又嚴重影響了藥品的銷售與推廣,因此西林瓶柱面標簽的質(zhì)量檢測就顯得至關(guān)重要。我國醫(yī)藥企業(yè)目前所采用的半自動檢測設(shè)備甚至人工檢測已經(jīng)難以滿足日益增長的生產(chǎn)需求[2-3]。同時,伴隨著機器視覺技術(shù)在工業(yè)自動化領(lǐng)域的快速發(fā)展,機器視覺已經(jīng)廣泛應(yīng)用于普通醫(yī)藥產(chǎn)品的質(zhì)量檢測中[4-5],但與傳統(tǒng)的平面標簽檢測方法不同,西林瓶標簽為類圓柱體,標簽的邊緣位置會出現(xiàn)圖像失真及壓縮變形[6],相機不能提取到有效信息,從而難以直接進行西林瓶標簽的質(zhì)量檢測[7]。
若將西林瓶柱面標簽平面展開,獲得一幅連續(xù)的柱面標簽平面展開圖,既可以解決因柱面畸變導(dǎo)致的標簽信息丟失,又可以應(yīng)用成熟的平面標簽檢測技術(shù),從而降低研發(fā)成本,滿足企業(yè)的實際需要。為解決西林瓶等類圓柱體側(cè)面的平面展開問題,國內(nèi)外的研究機構(gòu)做了大量的研究。汪軍等[8]使用相機與旋轉(zhuǎn)機構(gòu)相配合,利用圖像拼接算法拼接柱體圖像序列,得到柱體360°全景圖像。該方法生成的圖像分辨率較高,但拼接速度較慢且需要相機與旋轉(zhuǎn)機構(gòu)的高精度標定和配合,難以工業(yè)化應(yīng)用。吳曉軍等[9]使用反射相機對類圓柱體側(cè)面進行成像,也可以獲得類圓柱體側(cè)面的平面展開圖。該方法獲得的平面展開圖像存在變形且圖像分辨率差異較大。曹繼英等[10]通過柱面反投影算法實現(xiàn)柱面圖像的反投影變換,得到校正后的柱面標簽側(cè)面展開圖。但該方法僅適用于類圓柱體小范圍移動的場合,若標簽圓柱體半徑改變,則需要再次重新標定,不滿足企業(yè)柔性化生產(chǎn)的要求。楊海明等[11]使用多相機環(huán)繞飲料瓶標簽成像,也取得了較好的效果,但該方法光路設(shè)計復(fù)雜,對設(shè)備安裝及位置精度要求較高。
針對柱面標簽平面展開的實際問題,提出基于邊緣的西林瓶標簽的平面展開算法,該算法通過多相機采集柱面標簽圖像,基于邊緣點對西林瓶標簽進行定位,結(jié)合相機的透視成像模型提取像素值,校正西林瓶標簽的柱面畸變,得到連續(xù)且歸一化的西林瓶標簽平面展開圖。該方法僅依賴于柱面標簽的邊緣點進行定位,不需要復(fù)雜的設(shè)備相配合,對于西林瓶標簽的位置變化也具有魯棒性,柱面標簽平面展開的速度滿足工業(yè)生產(chǎn)的要求。
為了獲取西林瓶標簽的全表面圖像,本系統(tǒng)由以90°間隔環(huán)繞柱面標簽放置的4臺工業(yè)相機、工控機及LED光源組成,實驗系統(tǒng)結(jié)構(gòu)示意圖如圖1所示。在工作過程中,4臺相機對西林瓶柱面標簽進行同步圖像采集,并傳送到工控機中進行處理。為獲得良好的西林瓶柱面標簽表面光照條件,采用在西林瓶底部放置平面光源,頂部布置環(huán)形光源的光源方案對西林瓶標簽進行打光。
圖1 實驗系統(tǒng)結(jié)構(gòu)示意圖
本文算法流程圖如圖2所示,首先對采集的柱面標簽圖像進行預(yù)處理,準確提取每個相機視野下的柱面標簽邊緣點,依據(jù)邊緣點與相機焦點的空間位置關(guān)系求解西林瓶標簽的空間位姿,采用隨機采樣一致性算法(random sample consensus,RANSAC)剔除離群的邊緣點,提高標簽位姿估計的精度。結(jié)合相機的空間位置信息確定相機的觀測范圍并提取像素值,最后通過圖像拼接算法對4幅柱面標簽圖像進行拼接融合,得到西林瓶柱面標簽的平面展開圖。
圖2 西林瓶標簽平面展開算法流程圖
實驗系統(tǒng)采集的西林瓶柱面標簽部分圖像如圖3(a)所示。由于柱面標簽沒有覆蓋整個瓶身,且西林瓶表面存在反光,背景中存在干擾等因素的影響,導(dǎo)致直接提取標簽邊緣會存在誤差。圖3(a)中2號相機所采集的圖像中,柱面標簽右側(cè)邊緣與背景灰度值差異較小,難以準確地提取邊緣。同時,若直接使用Sobel、Laplace及Canny等邊緣檢測算法也會提取到大量的標簽內(nèi)部的邊緣,檢測效果受限,使用Canny邊緣檢測算法檢測邊緣的結(jié)果如圖3(b)所示,西林瓶柱面標簽右側(cè)邊緣并未檢出。
(a)2號相機圖象
所以在預(yù)處理步驟中,引入顏色空間變換的方法,將采集的圖像由RGB顏色空間變換到HSV空間[12],對HSV空間下的S分量的圖像執(zhí)行高通濾波后再進行邊緣提取,同時依據(jù)圖像形態(tài)學(xué)處理的結(jié)果對邊緣位置進行限制,可以顯著提高邊緣檢測的準確性,消除背景噪聲的影響。
對S分量的圖像執(zhí)行高通濾波后的結(jié)果及西林瓶標簽邊緣檢測結(jié)果如圖4所示,可以準確提取出西林瓶柱面標簽的兩側(cè)邊緣。
依據(jù)相機的透視成像原理,可以建立空間中坐標為(Xw,Yw,Zw)的空間點與其在圖像坐標系上的對應(yīng)點(u,v)的數(shù)學(xué)關(guān)系,其數(shù)學(xué)表達式為
(a)S通道下高通濾波
(1)
式中:s為物體在相機坐標系中的Z向坐標;K為相機的內(nèi)參數(shù)矩陣;R、T分別為相機坐標系相對于世界坐標系的旋轉(zhuǎn)矩陣和平移矩陣,構(gòu)成了相機的外參數(shù)矩陣。
所有相機均通過張正友標定算法進行標定[13],得到相機的內(nèi)外參數(shù)矩陣。
(2)
式中:i為相機的編號,i∈1,2,3,4;j為在相機i下的邊緣點序號,j∈1,2,3,…,n。
圖5 西林瓶柱面標簽的空間定位
根據(jù)空間中兩異面直線的距離公式,射線OiPw與西林瓶標簽圓柱體中心軸的距離為
(3)
兩條異面直線之間的距離Dij應(yīng)該等于西林瓶標簽圓柱體的半徑R,據(jù)此構(gòu)建誤差函數(shù):
(4)
由于環(huán)境光線的變化,柱面標簽紋理邊緣不明顯等因素的影響,導(dǎo)致所提取的邊緣可能存在顯著的“離群點”,直接使用最小二乘法求解西林瓶標簽的空間位姿會出現(xiàn)較大誤差。因此,應(yīng)用隨機采樣一致性算法[14]對西林瓶標簽位姿進行優(yōu)化。從西林瓶標簽邊緣點中隨機選擇部分邊緣點組成邊緣點子集,基于該子集對西林瓶標簽位姿進行求解,確定參數(shù)估計模型。然后將所有標簽邊緣點帶入估計模型中進行驗證,計算其誤差損失作為衡量標準。選擇不同子集迭代求解,得到一個全局最優(yōu)的模型。從而達到剔除邊緣點中的“離群點”,提高西林瓶標簽位姿估計準確度的目的。
由2.1所得到的西林瓶柱面標簽圓柱體中心軸上的定點及方向向量,建立標簽圓柱體的空間模型[15],如圖6所示。其空間模型的高度及每層的像素點數(shù)目決定了柱面標簽平面展開圖的分辨率。
依據(jù)西林瓶標簽三維點與4個相機焦點的空間相對位置,確定每個相機的觀測范圍。西林瓶標簽為類圓柱體,每層僅有Z坐標不同,為簡化計算,僅提取西林瓶標簽三維模型中間一層進行計算,并應(yīng)用到三維模型中的其他像素點,確定空間模型中每個三維像素點的最優(yōu)觀測相機。
(a)西林瓶空間模型
(5)
式中:Zk為標簽圓柱體中心軸上選取的第z=k層對應(yīng)的圓柱體中心軸上的點;Ci為相機i焦點的空間坐標;Pj指三維模型上的空間點;y為4個相機焦點所組成的夾角中余弦最小值。
對于每個空間點Pj求取其與4個相機焦點夾角的余弦值,余弦值取最大時所對應(yīng)的相機即是該點的最優(yōu)觀測相機,即∠ZkPjCi余弦值取得最大值時,函數(shù)值y所對應(yīng)的相機序號即為該空間點Pj的最優(yōu)觀測相機。
由相機標定結(jié)果得到各相機的內(nèi)外參數(shù),結(jié)合2.2所確定的最優(yōu)觀測相機,將標簽圓柱體空間模型中的三維點變換到各自相機下的像素坐標系中,采用插值算法計算該點所對應(yīng)的像素值,即完成了單相機視野下的柱面標簽畸變校正,其校正結(jié)果如圖7所示。
(a)西林瓶標簽圖像
最后將相機所觀測到所有空間點按順序在平面展開,即完成了單相機下的西林瓶標簽的校正,循環(huán)處理所有相機后即可以獲得一幅連續(xù)且歸一化的西林瓶柱面標簽展開圖,西林瓶標簽柱面畸變校正并展開后的圖像如圖8所示。
圖8 西林瓶柱面標簽平面展開
由于西林瓶位姿估計時誤差不可避免,因此直接通過相機透視成像模型得到的平面圖像中必然存在瑕疵,如拼接接縫處的錯位等缺陷。為獲得更高質(zhì)量的西林瓶柱面標簽展開圖,需要擴展每個相機的成像區(qū)域,使相鄰兩個相機成像區(qū)域之間有重合區(qū)域,如圖9所示。
(a)原始相機的可視區(qū)域
分別校正各個相機視野下的柱面標簽畸變,得到具有重合區(qū)域的西林瓶標簽部分圖像,如圖10 (a)所示。再利用圖像拼接算法拼接相鄰相機下的柱面標簽展開圖像,使用漸入漸出融合算法消除拼接縫隙,最終獲得一幅完整且擁有較高質(zhì)量的西林瓶柱面標簽展開圖,圖10 (b)為西林瓶柱面標簽的完整展開圖。
圖10 西林瓶標簽完整展開圖
實驗平臺由映美精工業(yè)相機、LED光源、工控機(CPU:Core i7,16 GB內(nèi)存)及顯示器組成,4臺相機靜態(tài)采集西林瓶標簽全表面圖像,應(yīng)用西林瓶柱面標簽展開算法對柱面標簽平面展開,獲得連續(xù)且歸一化的西林瓶標簽的平面展開圖。為驗證算法對于西林瓶柱面標簽位置的魯棒性,將西林瓶放置在實驗臺的不同位置上分別采集150組實驗圖像作為樣本,記錄并分析實驗數(shù)據(jù)。
實驗所采集的一組西林瓶柱面標簽圖像如圖11(a)所示,經(jīng)西林瓶柱面標簽平面展開算法對柱面標簽平面展開,其標簽平面展開圖像如圖11(b)所示。
圖11 西林瓶柱面標簽實驗結(jié)果圖
圖12為使用基于特征點的圖像拼接算法直接拼接西林瓶標簽部分圖像后的結(jié)果,因標簽并未完整覆蓋西林瓶瓶身,在無標簽區(qū)域,圖像紋理信息較弱,難以檢測及匹配特征點,從而無法完成圖像拼接工作。該圖像中的西林瓶標簽邊緣存在信息壓縮,且標簽上下邊緣為弧形,與實際標簽圖像差異較大。
圖12 基于特征點的柱面標簽拼接算法
西林瓶標簽展開算法運行時間如圖13所示。當(dāng)標簽平面展開圖的分辨率為850×250,柱面標簽平面展開算法所消耗的平均時間為345.6 ms?;谔卣鼽c檢測算法僅拼接相鄰兩幅西林瓶柱面標簽圖像所耗費的平均時間為432 ms。若改變西林瓶標簽空間模型中每層像素點之間的采樣間隔,標簽平面展開圖分辨率為425×125,算法所消耗的平均時間為289.7 ms。雖然算法運行效率提高,但由于圖像分辨率降低,導(dǎo)致了圖像質(zhì)量的下降,所以需要根據(jù)實際的應(yīng)用環(huán)境做出調(diào)整。在150組不同位置采集的西林瓶的標簽圖像中,有147組可以獲得連續(xù)且無畸變的西林瓶標簽平面展開圖,成功率達98%。圖13中有3組圖像在不同分辨率下均耗時較長,以至于不能將柱面標簽平面展開。其主要原因為光照條件的變化及背景紋理的影響導(dǎo)致西林瓶標簽位姿估計不精確,在位姿的優(yōu)化算法部分消耗了大量的時間。
圖13 算法執(zhí)行時間對比圖
針對西林瓶標簽成像過程中的柱面標簽邊緣信息壓縮的問題,提出基于邊緣定位的西林瓶標簽的平面展開算法。該算法不依賴額外的設(shè)備及復(fù)雜的標定,僅通過邊緣點及相機焦點的位置對西林瓶標簽進行空間定位,建立柱面標簽的空間模型并確定各相機的可視范圍,校正柱面畸變后拼接融合相鄰標簽圖像,最終獲得連續(xù)且無畸變的西林瓶標簽平面展開圖。實驗結(jié)果表明,該算法可以校正西林瓶標簽的柱面畸變,對西林瓶的位置變化具有魯棒性,且拼接速度快,為下一步的標簽質(zhì)量檢測奠定了基礎(chǔ)。