王 葉,謝 雷
(1. 上海大學 理學院 物理系,上海 200444;2. 上海大學 通信與信息工程學院 通信工程系,上海 200444)
機器視覺(Robot Vision)顧名思義就是視覺感知機器的意思,現在屬于人工智能的一大技術發展方向,而某些計算機圖像分析系統定義為計算機視覺(Computer Vision).霍恩[1]描述的機器視覺系統架構如圖1所示.

圖1 機器視覺系統架構
圖1中的場景位于圓形光照區域內,成像儀器完成對場景的成像,機器視覺(軟件部分)對圖像進行理解和解釋,這種理解和解釋都是基于符號和算法程序的.
機器視覺的核心問題是:從一張或多張圖像中生成一個符號描述,該描述顯然和場景有關,并且包含完成指定任務所需的全部信息.
機器視覺的基本任務是:1)建立起對成像過程的基本理解;2)探討對成像過程求逆的方法.具體實現時,機器視覺系統有專用和通用的(指提供一般化的二次開發環境)之分,當然還沒有一個能夠處理所有機器視覺問題的通用系統.
OpenMV是一種機器視覺系統,開發者的目標是要構建機器視覺的類似“Arduino”的開發環境,這種系統為用戶和開發者提供友好簡便的界面和封裝對一般用戶而言難度較大的算法.該系統自定義MicroPython語言并成為標準CPython實現的子集;硬件方面,系統基于STM32的嵌入式系統設計以及可擴充的外圍和相應底層封裝,最大限度內嵌軟硬件一體化解決方案,這樣就為用戶提供了一個十分緊湊且通用的機器視覺開發平臺或環境.
本文采用的實際系統為OpenMV4(STM32H7),主頻達480 MHz,板載的光學傳感器(CMOS Camera VGA)型號是OV7725,最高幀速60 fps.
干涉條紋的成像不同于一般光照條件下的成像,尤其對于單純的邁克耳孫干涉儀的干涉條紋成像,本文把這種成像稱為“光源性”成像,原因在于成像過程及圖像特征主要由光源特性(光波),且為相干性決定,而將主要由非相干性的光強(照度)和場景變換決定的成像稱為“光場性”成像.這里的干涉條紋“場景”可以理解為在光源性的“相干場”的作用下形成的“景”.機器視覺的任務就如下面的過程描述:基于光源的成像過程的基本理解→光學圖像特性→圖像形態特征→符號描述,圖2給出了本文設計的干涉條紋機器視覺實現路線圖.

圖2 機器視覺實現路線圖
干涉是光波動性的結果,時間相干性告訴我們,某一時刻兩束光的疊加是兩個有限長波列(或一個有限長波列的分振幅波列)的疊加,不同時刻的光波波列是隨機的,即空間某個位置的疊加光波的相位差可以認為是恒定的,但是疊加幅度會有起伏,邁克耳孫干涉儀干涉條紋圖像具有如下特點:
1) 在激光(如He-Ne激光)邁克耳孫干涉儀中,假設雙點源球面波干涉的理想情況下(虛光源都位于中心軸上),圖像的形狀特征為同心圓[2],在一些情況下偏離為橢圓或其它形狀[2,3],以灰度圖描述,指圖像中的等灰度軌跡為圓或橢圓;
2) 由于干涉儀的“點源”成像特性,光源中心(源點)容易在干涉圖像中心形成灰度飽和,干涉圖像視場的中心坐標難以測定;
3) 由于共軸性偏離,在光程差變化時,干涉圖像中心會發生漂移,即干涉條紋會發生整體漂移[4](或偏心);
4) 條紋可見度存在起伏,主要原因為:擴展光束形成的光斑強度不均勻和不對稱;光源的量子和相干特性增加了全局和局域性灰度噪聲.
如果認為隨機變量是遍歷的,則對某處干涉強度采取統計平均是可行的(它們的強度是相關的,會影響相位精度),相當于作低通濾波,然而可能最好的辦法是使用中值濾波,它既能衰減隨機噪聲又不會使邊界模糊,故這里采用3×3格子的中值濾波作為圖像預處理,下面給出進一步的算法.
如圖3,設視場坐標系xOy,c代表以中心O為圓心的圓環(并不代表實際的干涉環),在c上取P1、P2、P3和P44個坐標點,分別位于坐標軸上對稱位置,設它們的圖像灰度值為g1、g2、g3和g4,從P1、P2、P3和P4出發沿各自徑向存在長度為ld的線段,命名為灰度采樣線L.

圖3 視場坐標系
定義與圓環c相關的灰度統計量為
[g1(x0+d,0)-g3(-x0-d,0)]2+
[g1(x0+d,0)-g4(0,-y0-d)]2+
[g2(0,y0+d)-g3(-x0-d,0)]2+
[g2(0,y0+d)-g4(0,-y0-d)]2+
[g3(-x0-d,0)-g4(0,-y0-d)]2}
(1)
(ld>0的偶數),為4個方向的灰度采樣線中任意兩條之間所有對應點之間的灰度差的平方和,在理想條件下,干涉條紋中心必和圓環c的中心重合,即位于視場原點上.若圓環c存在整體漂移,則c(i=0,j=0的情況)變為某個漂移位置cij(i、j不同時為零的情況)時的灰度統計量為
(2)
(Δg)ij=[g1(x0+i+d,j)-g2(i,y0+j+d)]2+
[g1(x0+i+d,j)-g3(-x0+i-d,j)]2+
[g1(x0+i+d,j)-g4(i,-y0+j-d)]2+
[g2(i,y0+j+d)-g3(-x0+i-d,j)]2+
[g2(i,y0+j+d)-g4(i,-y0+j-d)]2+
[g3(-x0+i-d,j)-g4(i,-y0+j-d)]2
(3)

在規定的漂移范圍內的相似性判據為:(∑Δg)ij取最小值時所對應的圓環cij,此圓環可能已偏離視場中心.
又當存在縱向縮放時的表達式(干涉環發生橢圓化形變)為
(4)
(Δg)ijv=[g1(x0+i+d,j)-
g2(i,y0+j+d+v)]2+[g1(x0+i+d,j)-
g3(-x0+i-d,j)]2+[g1(x0+i+d,j)-
g4(i,-y0+j-d-v)]2+[g2(i,y0+j+d+v)-
g3(-x0+i-d,j)]2+[g2(i,y0+j+d+v)-
g4(i,-y0+j-d-v)]2+[g3(-x0+i-d,j)-
g4(i,-y0+j-d-v)]2
(5)

上述算法可以稱為干涉條紋同心形態搜索算法,依據是基于灰度采樣線的灰度統計量所給出的干涉條紋的形態相似性,此算法又是建立在“光源性”成像的干涉條紋特征及其動態變化基礎之上的.為了計算方便,實際輸出結果的描述為cij或cijv的外接矩形及其參數.
定義4個灰度采樣線形態特征模板T1—T4(用含有ld個元素的行向量表示),分別表示灰度最大,灰度最小,灰度從大到小和灰度從小到大,后兩者也稱為等差向量,模板的大小可變,但是元素總數為大于1的奇數,模板定義如表1所示.灰度形態特征模板表示為

表1 灰度形態特征模板
Ti=[tij],i=1,2,3,4;j=1,2,…,ld
(6)
T1、T2灰度模板由每幀圖像或有效區域的灰度最大值和灰度最小值構成其元素,T3、T4灰度模板由對灰度采樣線進行灰度值重整得到,在灰度最大值和最小值之間進行均勻分割,模板T3線性減小,模板T4線性增加.
定義距離
(7)
lj是灰度采樣線L的第j個元素,tij是Ti模板的第j個元素.匹配判據為(Dist.)i中最小的那個,即取最相似的模板Ti作為輸出
To=Ti→minmun of(Dist.)i
(8)
由于存在4個方向的灰度采樣線,實際計算時應對4條采樣線上對應元素求平均值后再計算模板和距離.經連續采集兩幀圖像,根據兩個輸出模板的前后相互關系可以得到精度取決于幀速和條紋移動速度的冒出陷入的條紋合計總數(為正時表示冒出,為負時表示陷入,可以有小數,即條紋細分數).
當幀速vf和條紋移動速率vfr大約滿足

(9)
可以用圖4的模板變換關系確定干涉條紋的冒出和陷入的計數規則,精度為0.5個條紋,冒出加0.5,陷入減0.5.

圖4 過極值點的條紋計數規則
基于OpenMV4(STM32H7),實驗采用兩種方案進行,首先是對仿真干涉條紋進行檢測,圖5為用Matlab 編制的一段仿真干涉條紋陷入的視頻中的11幀畫面(每隔20幀取一幅),放映速度為每秒25幀,將攝像頭對準電腦顯示屏上播放的仿真干涉條紋并使部分中心級條紋位于視場區域,仿真干涉條紋存在可辨中心并易于和視場中心重合,而且仿真干涉條紋的視場亮度比較穩定且條紋不會發生漂移或抖動,本系統通過手機發送字符命令啟動測量,測量所得環數和仿真條紋的陷入環數嚴格相符.接著進行真實的邁克爾遜干涉實驗,OpenMV機器視覺集成開發環境和干涉條紋檢測系統軟件界面如圖6所示(與仿真干涉條紋檢測實驗所用系統相同),在抓圖之前,程序關閉了自動增益和白平衡,并將對比度、亮度和飽和度設為合適值.從界面視頻窗口觀察到的干涉條紋中心確實處于飽和狀態,但并不影響本算法的執行,實驗方法和步驟如下:

圖5 仿真干涉條紋
1) 按一般的激光邁克爾遜干涉儀調整步驟調整干涉條紋至圓環狀態并大致位于毛玻璃屏中央;
2) 打開OpenMV機器視覺系統應用程序(圖6),連接設備(OpenMV4)后啟動執行主程序,程序進入主循環后循環執行干涉條紋同心形態搜索算法.將攝像頭對準干涉條紋所處毛玻璃顯示屏,調整攝像頭位置(也可以細微調整干涉條紋整體平移)使視場中的方框所代表的區域取在中心區域外可辨的第一個干涉環和第二個干涉環之間,方框的大小可以預先設置,攝像頭和毛玻璃屏之間的距離和干涉條紋聚焦成像及大小也可以調整;

圖6 OpenMV機器視覺集成開發環境及干涉條紋檢測系統
3) 觀察干涉條紋同心形態搜索算法的計算結果,即步驟2的調整過程可以將式(1)給出的(∑Δg)c值變為最小時作為調整到位的判據(灰度采樣的相似性判據);
4) 發送干涉條紋測量命令,程序進入環數測量子循環,此后有三種干涉條紋同心形態搜索算法可供選擇運用,即式(1)的搜索算法對應于干涉條紋始終為圓且不發生漂移的情況,式(2)、(3)的搜索算法對應于干涉條紋始終為圓且發生微小漂移的情況,式(4)、(5)的搜索算法對應于干涉條紋發生微小漂移且存在縱向橢圓化的情況,如果干涉儀及機器視覺系統處于比較理想的狀態,則干涉條紋整體在測量過程中始終保持圓環形狀并且沒有漂移,灰度采樣線所在的圓環c(方框)固定不變,如果灰度采樣線所在的圓環(方框)既發生漂移或又存在橢圓化(變成矩形框),則圖像的cij或cijv參數發生變化.每幀圖像的基于灰度采樣線的干涉條紋形態用形態特征模板Ti描述,比較相鄰兩幀圖像的干涉條紋形態特征模板的變化即可得到干涉條紋動態變化情況.由于測量是自動進行的,只要干涉條紋發生冒出或陷入(相位差發生變化),被檢區域(方框附近)的干涉條紋形態就將發生變化,體現在極值處,冒出陷入的半環數以及總的環數將被檢出.
軟件界面視頻窗口左上角的數據表示程序處理當前幀的用時為66 ms,右下角顯示的FPS為幀速,當前為每秒15幀,它是處理時間的倒數.在式(9)的條件下實驗測得陷入的干涉條紋總數為18.5個,和仿真干涉條紋檢測相比,實際干涉條紋檢測實驗的整體光場強度和干涉條紋對比度隨時間可能發生變化,由于程序采用連續幀的兩個模板比較算法以及全域對稱多采樣線灰度統計算法,緩慢的光場強度變化以及對比度漲落就被上述算法抑制或平均掉了,另外手動測量會因為存在來回抖動等原因而產生計數誤差,如果這種抖動發生在峰頂或谷底附近且速率低于幀速,則可能的過峰或過谷過程將被正常檢測而不會遺漏,其它地方發生的抖動對當前精度下(0.5個條紋)的測量結果沒有影響.
下面通過實驗數據進一步說明測量的有效性以及進行誤差分析.表2為實際手動測得的冒出和陷入50個條紋的數據,每隔5個條紋記錄一次數據,為保證標稱環數差Δk的準確性,采用錄制視頻后復播查數據的方式記錄數據.

表2 干涉條紋測量數據
實驗過程符合或作如下假設:各次測量Oi或Ii互不相關;Oi或Ii符合正態分布,方差相同;過極值點的條紋計數規則(圖4)有效可靠或失效概率較低(如由極值點附近發生快速抖動導致漏檢的概率較低,而過極值點來回抖動一次如果雙向都漏檢則不會產生影響).
從表2數據看出,條紋冒出過程的檢測非常準確,條紋陷入過程的第2個記錄和第1個記錄之間出現漏檢,接著記錄數據保持準確,直到第9個記錄和第8個記錄之間又出現漏檢,說明偶然出現的漏檢將可能使數據發生整體偏移(數據2-8),如果運用逐差法處理數據,將可能使這種整體偏移得到某種程度的校準,如設:
x1i=Oi+5-Oi,
x2i=Ii+5-Ii,i=1,…,5
(10)
采用所謂的簡易算法計算A類不確定度,即將逐差后的結果x1i和x2i視為等精度測量值,則A類不確定度計算公式為
t0.95≈2.78
和
(11)


表3 數據處理
冒出25個條紋的檢測結果:
x1=25.0±0.5(個)
(12)
陷入25個條紋的檢測結果:
x2=-24.7±0.6(個)
(13)
顯然,適當增加測量次數(環數)及選擇合適的逐差間隔將提高測量可靠性和減小相對誤差,對于干涉條紋相移型檢測方法來說其實際的條紋檢測精度(條紋細分度)一般不高(裸眼檢測原則上有1個環的視覺誤差),因此產生的B類不確定度相對于A類數值上可能較大.
本文就干涉條紋檢測技術提出了一種基于機器視覺的解決方案,發現研究過程對于光干涉及其干涉條紋有了更深的理解,技術上需要指出的是,本文只是基于OpenMV的軟硬件一體化架構,運用其內嵌的一些基本的圖像采集和處理函數結合MicroPython或Python語言來對自己提出的核心算法進行編程,主要考慮的是效率、魯棒和實時性,從實現路線圖來看,也可以采用其他方法,比如基于開源的OpenCV圖像處理以及計算機視覺算法,組件自己的攝像頭和嵌入式系統等,最后形成的都是某種意義上專用的干涉條紋檢測系統.另一方面,從干涉條
紋檢測技術的歷史來看,此類干涉條紋的檢測經歷了從模擬方式(包括裸眼)到數字化[5-8],從一維光電信號到二維圖像處理的過程[9],并且和現代光電子及通信技術進行了融合[10,11],隨著人工智能時代的到來,干涉條紋的檢測技術會得到很大發展.