張鑫鑫,梁俊毅
(1.廣西工業(yè)職業(yè)技術學院,廣西南寧,530000;2.北海職業(yè)學院,廣西北海,536000)
近幾年,在國家的高度重視下,人工智能技術得到了快速的發(fā)展與應用。計算機視覺技術是人工智能的重要核心技術之一,也是計算機專業(yè)學生畢業(yè)后就業(yè)的重要方向。作為計算機視覺技術中的基礎內容,圖形圖像處理的相關課程已在全國各大高校廣泛開設,并被作為專業(yè)建設的重點方向。圖形圖像處理是用計算機對圖像進行達到所需結果的處理的技術,主要內容包括圖像編碼、圖像增強、圖像復原、圖像分割和圖像分析等內容。在人工智能的應用中,通常需要大量數據來訓練深度學習模型,目的在于避免過擬合。因此,圖像增強在人工智能技術中不可或缺。
相對于其他專業(yè)基礎課程而言,圖形圖像處理課程涉及的知識面較廣,對學生的數學水平要求較高。特別是一些經典的圖像處理算法,教師在介紹過程中雖然通過公式、文字、程序實現等各種方法進行講解,但還是過于抽象,很多概念容易混淆不清,會使學生在理論學習過程中覺得課程難度很大,對具體的圖像處理算法理解不深刻,不能工程化相關的圖像處理技術,逐漸產生厭學心理。例如在人臉校正的處理中,要通過計算眼睛的旋轉角度來矯正人臉,該算法涉及大量的數學公式,如果只通過講授的方法,學生很難掌握。
針對本課程的教學難度以及偏重于編程實踐的專業(yè)特點,本文以OpenCV為實驗教學的工具軟件,以PhotoShop為輔助軟件。在OpenCV功能實現過程中,PhotoShop可以將旋轉角度、顏色通道等相關概念和過程以更加生動、直觀的方式呈現給學生。[1]數字圖像處理課程理論教學的核心內容包括直方圖、點運算、濾波器、形態(tài)學運算、幾何變換及彩色顏色空間等。其中,很多內容可以結合PhotoShop進行講解,本文以直方圖均衡化來為例,詳細講解實驗設計方法,通過兩種軟件的對比達到最好的課堂效果。教師首先講解理論原理,再通過PhotoShop進行效果展示,最后讓學生可以在OpenCV中編程并給出最終的實驗結果。[2]第一,實驗設計降低了理論內容講解的枯燥感。通過該軟件不同參數下不同效果的演示和課堂互動,教師可以將理論教學上某些算法的效果以更加生動的方式呈現給學生,提高學生對原理的理解以及對圖像處理算法的感性認識,調動學生學習的積極性。第二,實驗設計消除學生對于課程實用性的疑慮,清楚本次課程學習的內容可以具體應用到什么環(huán)境中,可以解決哪些問題。第三,實驗設計提高學生對于程序編寫重要性的認識。通過編程的方式,程序員可以封裝用戶所需的各類功能,從而讓用戶在使用過程中直接調用開發(fā)好的軟件,達到一個良好的用戶體驗,這才是軟件開發(fā)的意義。因此,實驗對比的教學方法可以啟發(fā)學生將理論知識應用于實踐,對于培養(yǎng)學生解決復雜工程技術問題、給出合理解決方案有直接作用。
計算機記錄數字圖像的方式有兩種:一種是用像素點陣方法記錄,即位圖;另一種是通過數學方法記錄,即矢量圖。
位圖圖像是由許許多多的被稱為像素的點組成。這些不同顏色的點按照一定的次序排列,組成圖像。圖像的大小取決于像素的多少,圖形的顏色取決于像素的顏色。位圖圖像可以很容易地在不同軟件之間交換文件,而缺點是在縮放和旋轉時會產生圖像失真現象。
矢量圖形是以線條和顏色塊為主構成的圖形。矢量圖形與分辨率無關,可以任意改變大小以進行輸出,圖片的觀看質量也不會受到影響。這主要是因為其線條的形狀、位置、曲率等屬性都是通過數學公式進行描述和記錄的。矢量圖所占磁盤空間較小,但色彩較位圖相對單調。
分辨率對于數字圖像的顯示及打印都起著至關重要的作用,一般情況下會分為圖像分辨率及屏幕分辨率等。圖像分辨率通常以“像素/英寸”來表示,指圖像中每單位長度含有的像素數目。屏幕分辨率指顯示器分辨率,即顯示器上每單位長度顯示的像素或點的數量,通常以“點/英寸”表示。
OpenCV是一個開源的跨平臺計算機視覺庫。[3]該庫是以C/C++語言開發(fā)的,進行了大量優(yōu)化,運行高效,實現了計算機視覺方面的很多通用算法,同時提供了C,C++,Python,Ruby,MATLAB等語言接口。在眾多編程語言中,Python的最大優(yōu)點是比其他語言更簡單易學,功能強大的解釋型編程語言。它有簡潔明了的語法和高效率的高層數據結構,能夠簡單而有效地實現面向對象編程。除了 Google 的 AlphaGo 應用 Python 語言而大獲成功以外,在 Facebook 開源了人工智能編程工具箱 PyTorch 后,更是奠定了其作為人工智能時代首選語言的地位。在選擇開發(fā)軟件及程序時,教師應以市場需求為主導,選擇較為前沿的編程技術,真正實現學校教學內容對接企業(yè)生產過程。所以,本實驗開發(fā)環(huán)境,操作系統(tǒng)為64位Windows系統(tǒng),并選擇OpenCV 3.4.1,Python3.6.5作為開發(fā)工具。
PhotoShop是一款圖形圖像處理軟件,是平面、三維、建筑、影視后期等領域的設計師必備的一款圖像處理軟件。它可以精確完成圖像編輯任務,可以對圖像進行縮放、旋轉或透視等操作,也可以進行修補、修飾圖像的殘缺等編輯,還可以將幾幅圖通過圖層操作、工具應用等編輯手法,合成完整的、意義明確的設計作品。目前,Photoshop已是圖像編輯領域眾所周知的著名軟件。在本實驗中,本研究選擇PhotoShop cc 2018作為輔助軟件。
1.直方圖的概念講解
直方圖也被稱為柱狀圖。在直方圖中,橫軸代表著照片亮度的等級,從左到右是暗色調到亮色調的漸變,將亮度分為256個等級;縱軸則表示像素個數,每個亮度等級都有相對應的像素個數。直方圖波形將連續(xù)的像素值點連接,并將照片的曝光精度客觀、全面地反映出來。
如果只是從理論上來講直方圖,非藝術專業(yè)的學生很難理解“亮度等級”等相關概念,更無法掌握什么是直方圖。因此,教師可以在課堂中以PhotoShop為輔助軟件,以圖像的形式來講解直方圖的含義。
2.PhotoShop中的直方圖展示
在 PhotoShop 中,通過單擊“圖像—調整—色階”就可以看到該圖片的直方圖。[4]教師在此選擇一張較為模糊的圖片,進行對比分析,以便學生可以更好地理解直方圖的概念。
如圖1所示,在直方圖中水平方向從左到右是從暗到亮的像素分布,黑色三角代表黑場,灰色三角代表灰場,白色三角代表白場,而垂直方向上的高度是代表著像素的數量。該圖像的直方圖中,像素大多集中在極暗區(qū)和中間區(qū)域,在極亮區(qū)沒有像素分布,所以可以通過直方圖發(fā)現整張圖片色彩偏暗,從而對圖像影調的正常與否作出初步的判斷。從這一點可以對圖片的亮度情況作出初步判斷,該圖像中最暗的部分尚未達到黑色,最亮的部分也尚未達到白色。整個圖片看起來就是灰沉沉的,色調不夠鮮艷,照片效果不好。
圖1 Photoshop展示直方圖
相比較于單純的講解,通過Photoshop的展示可以清晰地將直方圖呈現出來,讓學生更直觀地看到直方圖中像素出現的頻率與圖像質量的關系,更簡單地掌握直方圖以及理解亮度、色階、通道等基本概念,并通過直方圖的形狀判斷出圖像的問題。在此基礎上,再來學習OpenCV繪制直方圖會更簡單易懂。
3.OpenCV繪制直方圖實驗
在講解原理并用PS展示之后,就可以讓學生自己動手,采用OpenCV+Python的方法繪制直方圖。[5]在實驗環(huán)節(jié),教師先開源代碼,讓學生按照實驗要求,首先導入所需要的庫,如 OpenCV、matplotlib,然后再讀入原始圖像并顯示出來,對原始圖片繪制直方圖。在這種實現方法中,需要特別注意hist函數在調用過程中,它的語法格式是hist(數據源,像素級),包含兩個參數,其中像素級的范圍是[0,255],而數據源必須是一維數組,但是原始圖片往往是二維的,那么此時就需要用.ravel()將原始圖片處理成為一維數組。
圖2 OpenCV繪制直方圖代碼
圖3 OpenCV繪制直方圖
由圖可以看出,當圖片不夠清晰的時候,直方圖的分布集會中在較窄的范圍內,從黑到白的漸變層次很少,也就是對比度很低,所以在這種情況下,教師就要引入直方圖均衡化的方法,使圖像清晰度提高。
1.直方圖均衡化的概念講解
由前文可知,清晰度不高的圖像直方圖的分布會比較集中,如果可以使直方圖的灰度值覆蓋了整個橫軸的取值范圍,那么這幅圖像就具有較大的灰度動態(tài)范圍和較高的對比度,同時圖像的細節(jié)更為豐富。因此,直方圖均衡化的基本思想是把原始圖的直方圖變換為均勻分布的形式,這樣就增加了像素灰度值的動態(tài)范圍,從而達到增強圖像整體對比度的效果。為了形象理解直方圖均衡化的概念,教師可以先使用PhotoShop動態(tài)的演示出直方圖均衡化的效果,在灰度值分布變得均勻后,圖像的對比度增強,細節(jié)變得清晰可見。
2.PhotoShop直方圖均衡化展示
從圖1可以看出,直方圖像素集中在左側,右側幾乎沒有像素。此時教師可通過色階對照片亮度進行調節(jié),先將白場滑標慢慢向左移動,使之超過峰值起始點;或是將灰色滑標向左移動,減小灰色滑標與白色滑標的間距,從而將照片的亮度提高,并再進行進一步修正。同時,教師也可以在通道中,選擇紅、綠、藍通道分別來調整,以實現直方圖的均衡化。
圖4 通過Photoshop實現直方圖均衡化
3.OpenCV直方圖均衡化實驗
通過Photoshop中的直觀演示可以看出,直方圖均衡化的效果。在使用OpenCV處理彩色圖片時,直方圖均衡化的方法有很多種。本文以彩色通道分解法為例來講解。[6]
在Photoshop的直方圖展示中我們可以看到,彩色圖像是由紅、綠、藍三種基色堆疊而成,每一種基色的圖像都是一幅灰度圖像。因此,在彩色直方圖均衡化時可以先將彩色通道分解,也就是RGB三通道分開,對每一個通道分別均衡化之后再重新合并。在這種方法中,課題組調用了split()函數將三個通道拆分,然后使用equlizeHist()函數分別對各個通道進行均衡化,最后使用merge()函數將三個通道重新合并。
圖5 直方圖均衡化代碼
圖6 直方圖均衡化后的效果對比
圖7 均衡化后的直方圖對比
除了直方圖均衡化的實驗設計外,對于數字圖像處理課程理論教學的其他核心內容,教師也可以結合PhotoShop來講解。例如,人工智能模型在訓練的過程中需要輸入大量數據才能提高模型的準確率,當數據集較小時,教師可以通過數據增強的方法來增加數據集,常用的有圖像幾何變換、圖像色彩變化、添加噪聲等。
在幾何變換的過程中,圖像X軸方向的縮放比例為fx,Y軸方向的縮放比例為fy,那么對于原圖的(x0,y0)點,對應于縮放后的圖像(x1,y1),它們之間有如下關系:x0=x1/fx;y0=y1/fy。該算法可以通過PhotoShop進行展示,讓學生對比出幾種插值方法的不同效果??s放后的圖像會變得比較粗糙,圖像質量有所下降。因此,在進行圖像縮放時需要進行必要的插值操作,除了最近鄰插值法外,還有效果更佳的雙線性插值和高階插值等。
在圖像色彩的講解過程中,對于RGB、HSV、HLS顏色空間的概念,教師只通過公式講解學生很難理解。此時教師通過PhotoShop中色相、飽和度、明度的調整,可以讓學生直觀地看到隨著參數的變化,顏色不斷發(fā)生變化,并對比調整后的效果。這種方法可以使學生更好地掌握相關概念。
圖像噪聲是圖像在獲取或傳輸的過程中受到隨機信號的干擾,在圖像上出現的一些隨機的、離散的、孤立的像素點,這些點會干擾人眼對圖像信息的分析。因此,在圖像中增加噪聲,既可以擴大數據集,又可以提高系統(tǒng)的魯棒性。但通常圖像噪聲是比較復雜的,很多時候將其看成是多維隨機過程。因此,教師可以借助于隨機過程描述噪聲,即使用概率分布函數和概率密度函數。教師可以通過Photoshop在濾鏡中為圖像添加雜色或者在濾鏡庫中添加顆粒等操作方法,直觀地展示出添加噪聲后的圖像效果,讓學生理解添加噪聲的意義。
圖8 添加噪聲
PhotoShop是廣泛應用的圖像處理軟件,將其作為效果展示的輔助工具引入到圖形圖像處理課程中,可以讓學生更清晰地理解課程中的相關概念以及功能實現的流程。而OpenCV作為跨平臺計算機視覺庫,簡單易學,又有很多開源庫可以免費調用,可以提高學生的學習興趣。因此,兩款軟件的配合使用,從教學方式及教學內容上均可滿足圖形圖像處理教學應用的需求,使學生深入理解圖形圖像處理的基礎理論和編程的實踐能力。