陶鏞澤,郭天太,胡佳成,吳曉康,王雅婷
(中國計量大學計量測試工程學院,杭州 310018)
隨著自動化行業的發展和人工智能的崛起,計算機視覺實驗教學成為高校理工科專業必不可缺的一部分,它對學生編程及創造能力的提高起著重要的作用。在實際中,計算機視覺實驗資源無序分布、多元異構、沒有統一標準的特點使實驗抽象難懂,不利于達到預期的教學效果[1]。如果單純從數字圖像處理角度出發優化實驗內容,很難提高學生的興趣、調動學生的積極性,可以說是治標而不治本。
隨著虛擬現實技術的發展,在教育領域,利用虛擬現實技術可降低實驗器材所需的成本,并將教學過程與多媒體技術相融合,創造出動靜結合的三維環境[2],甚至在現實中危險性較大或難以實現的環境。虛擬實驗室的可移植性使學生不受時空限制,充分利用虛擬實驗軟件提供的便利,在自主學習中開拓思維[3],故虛擬實驗室被稱為“沒有圍墻的實驗室”[4]。
目前,虛擬實驗室在醫學圖像處理方面的應用較為成熟。研發人員開發了基于VTK和ITK的VolView系統[5],建立了虛擬仿真實驗教學中心,以實現醫學圖像濾波、分割和三維可視化等功能[6],模擬真實工業環境,對機械零件和電子元件進行檢測[7]。通過在LabVIEW中嵌入Matlab 圖像處理程序[8]的方式建立計算機視覺虛擬實驗室。由于此類仿真的動態效果往往不及靜態效果,故有的高校開發了基于Unity3D 和3ds max的計算機視覺虛擬實驗室,創建可漫游的虛擬環境。
由于目前計算機視覺實驗側重于利用計算機對圖像進行處理,對計算機視覺中的“視覺”的關注度不及前者,提出了基于OpenCV 和OpenGL 的計算機視覺虛擬實驗室。其使用流程如圖1 所示,學生在圖形用戶界面中發出指令,進入虛擬環境,以虛擬相機的視角在虛擬環境中移動,獲取圖像,并通過數字圖像處理程序得到實驗結果,最后將其保存。

圖1 計算機視覺虛擬實驗室操作流程
計算機視覺虛擬實驗室開發包括5 個步驟:虛擬環境的創建、數字圖像處理模塊的設計、圖形用戶界面的開發、模塊聯立和系統測試。開發的虛擬實驗室結構圖如圖2所示,其中,虛擬環境、圖形用戶界面和數字圖像處理模塊構成了該實驗室的3 大組成模塊,與其對應的第3 方庫分別為OpenGL、Qt 和OpenCV,開發環境為Pycharm+Anaconda。

圖2 計算機視覺虛擬實驗室結構圖
虛擬環境創建的重點在于理解相機是如何實現人的雙目功能以及如何將真實相機轉換為虛擬相機。利用OpenGL對3D模型創建和渲染,將虛擬場景轉化為虛擬相機里的三維世界,再將虛擬相機里的三維世界轉化為平面圖形。
計算機視覺就是讓機器跟人一樣,通過視覺獲取信息,感知外部場景,此處的機器可以理解為相機。對于計算機視覺虛擬實驗室而言,相機和相機觀察到的事物都是虛擬的,即利用OpenGL 創建虛擬相機和虛擬場景,以模擬真實相機觀察外界事物,達到逼真的效果。在虛擬環境中,虛擬場景保持靜止;虛擬相機不斷運動,通過鼠標/鍵盤控制虛擬相機,實現移動、旋轉和鏡頭縮放等功能。
OpenGL是開源的圖形庫,用戶可通過OpenGL創建交互式程序產生運動的三維圖形對象,如使用計算機圖形學技術產生真實圖像,或通過虛構的方式產生虛擬圖像[9]。同時,OpenGL 允許用戶直接使用現有模型,較為有效地節省了建模時間[10]。
OpenGL具有豐富的圖形加工功能,能實現模型繪制、顏色模式指定、光照、圖像效果增強、紋理映射、實時動畫及人機交互。OpenGL 被廣泛應用于工業、建筑等領域的靜態和動態仿真。
相機生成圖像時,將穿過鏡頭的光線投射到圖像傳感器上來捕捉場景,使三維場景投影到二維平面上。場景和它的圖像之間以及同一場景的不同圖像之間都有著重要的關聯。
如圖3 所示,光線從被攝場景發出后穿過前置孔徑,被相機捕獲,捕獲到的光線觸發相機后面的成像平面(即圖像傳感器)。

圖3 相機成像原理圖
在圖3 中:do為透鏡到被攝物體的距離;di為透鏡到成像平面的距離;f 為透鏡焦距。這些數據的關系就是透鏡成像公式:

因為大多數情況下do?di,故可通過成像平面處于焦點位置來簡化這一相機模型。根據成像原理,成像平面上的圖像是反轉的。因此,只要把成像平面放在鏡頭前面,就能得到跟原來幾乎一樣但未反轉的圖像。該簡化模型即為針孔照相機模型,如圖4 所示。

圖4 針孔照相機模型
圖中:ho為物體高度;hi為圖像高度;do為物體到相機的距離。由該模型和相似三角形的性質,可得出表示場景和圖像關系的投影方程:

式(2)表明:hi與do成反比,這個關系決定了三維坐標在成像平面上的投影位置。若坐標系位于透鏡焦點上,則點(X,Y,Z)處的三維坐標在成像平面的投影點(x,y)=(fX/Z,fY/Z)。Z 方向的值取決于點的深度,即式(2)中的do。引入齊次坐標后,上述關系可用矩陣表示(即二維坐標用3 個向量表示,三維坐標用4 個向量表示):

式中:s為可任意縮放的因子;3 ×4 矩陣為投影矩陣。若坐標系未與焦點對齊,則需引入旋轉量r 和偏移量t。引入后即可把被投影的三維點表示為一個以相機為中心的坐標系:

式(4)中的3 ×3 矩陣中含有相機焦距等內部參量,3 ×4 矩陣中含有相機位置等外部參量,即相機與外部環境相關的參量。
在同一設備上安裝兩臺相機,讓它們觀察同一場景,并且二者間有固定的基線(相機中心點的連線),就構成了一個立體視覺裝置,如圖5 所示。

圖5 兩臺相機觀察同一個場景
沿三維坐標X和相機中心點的連線,可在成像平面上得到對應坐標x。為從成像平面中的坐標找到另一個成像平面中的對應坐標,需對第2 個成像平面上虛線的投影進行搜索,虛線的投影即x的對極線。
在雙目系統幾何形狀中,所有對極線的公共點即為極點。極點是一個相機中心點在另一個相機上的投影(圖5 中的e和e′)。
記點x的坐標為(x,y),X在另一成像平面的對應坐標為(x′,y′)。成像平面上的坐標和其對極線之間的關系,可以用3 ×3 矩陣F表示:

式(5)中的l′1、l′2和l′3滿足約束條件:

因為式(6)為x 的對極線方程,且二維直線可由三維向量表示,故式(5)中的F 相當于把一個視圖上的坐標映射到另一個視圖上的對極線上。當F 確定后,由兩個成像平面上的坐標可得三維坐標的深度。
虛擬圖形加工使圖形在視覺上呈現立體化,產生逼真的效果,包括正方體貼圖和光照渲染等環節。
正方體貼圖等價于對紋理對象投影,如同“木板”將紋理對象包圍,最終在視覺上形成“木箱”,如圖6(a)、(b)所示。

圖6 木箱的“2D”和“3D”圖形
根據光照和反射原理,分別如圖7(a)、(b)所示,對“木板”和“木箱”進行光照渲染。

圖7 光照渲染后的“木箱”和“木板”
用戶通過鍵盤控制虛擬相機平移,更新相機位置。平移前后效果分別如圖8(a)、(b)所示。

圖8 相機平移前后的效果圖
用戶通過鼠標按鍵控制虛擬相機自由旋轉,更新相機視角。旋轉前后的效果分別如圖9(a)、(b)所示。

圖9 相機旋轉前后的效果圖
用戶通過鼠標滾輪控制虛擬相機鏡頭縮放,改變虛擬場景在相機中所成像的大小。縮放前后的效果分別如圖10(a)、(b)所示。

圖10 相機鏡頭縮放前后的效果
本章將設計合理的實驗內容,完成圖像處理程序的編寫。在設計實驗內容時,結合學校實際教學情況,并充分考慮學生的能力差異。在進行數字圖像處理時,主要調用OpenCV庫,結合輸入圖像的特點完成程序設計,達到實驗預期的效果。
數字圖像處理的定義是通過計算機來處理數字圖像,其過程可大致分為圖像預處理和特征提取兩個環節。其中,圖像預處理是特征提取的基礎,對特征提取的質量和圖像分析的結果有很大的影響。
OpenCV是一個開源的計算機視覺庫。1999 年,Gary Bradski對其啟動研發工作。OpenCV庫涵蓋計算機視覺各個領域,兼容多種操作系統。它旨在提供一個簡潔而高效的接口,幫助開發人員快速構建視覺應用[11]。
OpenCV庫擁有豐富的資源,如opencv_features2d用于興趣點檢測、描述和匹配;opencv_calib3d 用于相機標定、和立體視覺[12]等。OpenCV 在計算機視覺研發人員中很流行,被用作主要開發工具[13]。
在計算機視覺教學中,側重點在于圖像預處理環節。為了適應課堂教學,在設計實驗內容時,以圖像預處理為主,同時補充少量特征提取實驗結果。圖像預處理內容分為顏色空間轉換、幾何變換、形態學轉換、直方圖、傅里葉變換、圖像濾波、自適應閾值處理和Canny邊緣檢測等部分;特征提取內容為Harris 角點檢測。
在數字圖像處理中,為減少計算機運算時間并使結果不受自然光照的影響,將彩色圖像轉換為灰度圖像,如圖11 所示。

圖11 彩色圖像轉換為灰度圖像
RGB 是一種被廣泛接受的顏色空間,也是一種在電子成像系統中采集和顯示顏色的有效方法,但它并不直觀,也不符合人對于顏色的感知方式。為直觀地描述顏色,可采用HSV顏色空間,即色調、飽和度和亮度。原始圖像的HSV圖像如圖12 所示。

圖12 彩色圖像轉換為HSV圖像
幾何變換是將一幅圖像映射到另外一幅圖像的操作,可視為矩陣的線性變換。OpenCV 提供了多個與映射相關的函數,這些函數使用起來方便靈活,能快速完成圖像的映射。如圖13、14 所示,分別為對圖像進行仿射變換和透視變換后的效果圖。

圖13 映射變換效果圖

圖14 透視變換效果圖
形態學用于分析和處理離散圖像,從圖像內提取描述圖像形狀的分量信息,通常是理解圖像時使用的本質形狀特征。形態學定義了一系列運算,用預先定義的形狀元素探測圖像,實現圖像的轉換。形狀元素與像素領域的相交方式決定了運算的結果。如圖15、16 所示,分別為對圖像進行腐蝕操作和膨脹操作后的效果圖。

圖15 腐蝕操作效果圖

圖16 膨脹操作效果圖
直方圖是數字圖像處理中典型的分析方法,從圖像灰度級的角度對圖像進行描述,包含豐富而重要的信息。從直方圖的角度對圖像進行處理,可達到增強圖像顯示效果的目的。在數字圖像處理中,一般會統計一幅圖像中具有某個值的像素的數量,產生一個簡單的圖標,如圖17 所示。

圖17 灰度圖像的直方圖
直方圖均衡化通過均衡所有像素強度值的使用頻率讓圖像的直方圖盡可能地平穩,改善圖像對比度,提高圖像質量,如圖18 所示。

圖18 直方圖均衡化后的灰度圖像
圖像平滑是在保留圖像原有信息的情況下,過濾掉圖像的噪聲。5 ×5 中值濾波獲得5 ×5 結果像素鄰域內像素值的中位數,其效果如圖19 所示。

圖19 中值濾波效果圖
傅里葉變換將圖像從時域轉換到頻域,如圖20 所示,高亮度區域表示低頻分量,低亮度區域表示高頻分量。對頻域圖像高通濾波可去除低頻分量,保留高頻分量,最后由逆傅里葉變換得到二值圖像,如圖21 所示。結果表明:高通濾波能對圖像進行邊緣檢測。

圖20 傅里葉變換后的頻域圖像

圖21 逆傅里葉變換后的二值圖像
當圖像色彩不均衡時,使用某個確定閾值的閾值化處理很難得到令人滿意的閾值處理結果,采用自適應閾值處理,處理后的效果如圖22 所示。結果表明:自適應閾值處理能對圖像進行邊緣檢測。

圖22 自適應閾值處理效果圖
Canny邊緣檢測能有效消除檢測結果中邊緣厚度過大的問題,并且檢測到重要邊緣,排除無關邊緣。Canny邊緣檢測分為去噪、計算梯度、非極大值抑制和確定邊緣4 個步驟,效果如圖23 所示。

圖23 Canny邊緣檢測效果圖
在提取圖像的局部特征時,可選擇角點作為局部特征。角點很容易被精確地檢測到。Harris角點檢測將灰度圖像轉換為浮點數型輸出圖像,輸出圖像中的每個像素值表示角點強度。之后對輸出圖像閾值處理,獲得角點,如圖24 所示。

圖24 Harris角點檢測效果圖
圖形用戶界面的開發主要調用Qt,在設計上應滿足人性化、易于上手等條件,并充分考慮用戶的特點和實驗教學的需要。
Qt是GUI設計類庫和可視化應用程序開發類庫,它提供了設計現代GUI 和開發應用程序的API。Qt由許多模塊組成,如Qt Charts 用于二維圖表顯示;Qt Data Visualization 用于數據三維顯示等[14]。Qt 在國防、移動設備、后端管理系統等領域廣泛應用[15]。
初始化后圖形用戶界面將顯示文本框,如圖25 所示。文本框顯示和圖像顯示之間的切換通過交替調用setParent函數和addWidget函數實現。

圖25 初始化的圖形用戶界面
在圖形用戶界面中,第1 行的按鍵實現基礎功能,點擊“原始圖像”將實驗結果與輸入圖像進行對比;點擊“保存圖像”按鍵保存實驗結果,如圖26 所示。第2~5 行的按鍵用于數字圖像處理。在第6 行的按鍵中,點擊“使用說明”獲取軟件使用說明書;點擊“數字圖像處理程序”查看實現代碼和原理。

圖26 保存圖像
程序的編譯環境使用Pycharm,并選用Anaconda作為Python語言,以調用各種第3 方庫。在開發圖形用戶界面時,采用clicked.connect 函數將按鍵與實現功能的函數連接。從圖形用戶界面進入虛擬環境時,采用subprocess.run 函數啟動虛擬環境程序;從虛擬環境提取圖像時,使用glReadBuffer 函數和glReadPixels函數獲取虛擬環境的窗口信息。
由于不同第3 方庫采用的標準不同,如OpenCV對圖像采用BGR格式,OpenGL和Qt對圖像采用RGB格式;OpenCV 采用標準像素大小,OpenGL 和Qt 采用相對像素大小,因此,在編寫程序時,采取了必要的優化,從而排除此類問題對最終效果的影響。
模塊聯立完成后,采用pyinstaller 打包工具將編寫好的.py文件轉化為.exe 文件,并將.exe 文件移植到多臺計算機上進行測試。在檢測.exe 文件是否能正常啟動時發現,該軟件適用于64 bit Windows 操作系統。
測試過程中,計算機視覺虛擬實驗室運行過程流暢,在按下按鍵時均能迅速生成相應結果,不會因為點擊按鍵頻率過高而導致程序崩潰。為獲得數字圖像處理程序執行時間,在代碼中使用getTickCount 函數進行測試,測試結果見表1。

表1 數字圖像處理程序執行時間測試結果
表1 結果表明:數字圖像處理程序執行速度較快,處于ms 量級。當執行時間小于100ms 時,用戶會認為顯示實驗結果和按下按鍵是同時發生的。但是,第7、9、10 組的實驗執行時間均超過100ms,相比于其他組而言慢了很多,原因是這3 組實驗的程序中調用了matplotlib,在圖片格式轉換上較為復雜。
因此,該計算機視覺虛擬實驗室可以投入到實際教學中,滿足目前計算機視覺實驗教學需求。
本文結合虛擬現實技術和計算機視覺技術,進行了基于OpenCV和OpenGL的計算機視覺虛擬實驗室的開發。計算機視覺虛擬實驗室建立后,學生可以不受臺套數和時空的限制,隨時、多次、全方位地進行計算機視覺實驗,深刻理解計算機視覺的內涵,掌握數字圖像處理的過程和原理;教師則可以通過這一渠道降低計算機視覺實驗的教學難度,讓學生輕松地學習計算機視覺,把原來乏味的實驗變得生動有趣,從而改善課堂氛圍。