陸安琴,秦嬋嬋,2*,胡圣波,2,李國慶,郭子義,2,李凌云
(1.貴州師范大學(xué)智能信息處理研究所,貴州 貴陽 550001;2.貴州省教育廳射頻識(shí)別與傳感網(wǎng)絡(luò)工程中心,貴州 貴陽 550001;3. 華中師范大學(xué)物理科學(xué)與技術(shù)學(xué)院,湖北 武漢 430079)
《數(shù)字圖像處理》是初學(xué)者學(xué)習(xí)計(jì)算機(jī)視覺和圖像處理的入門教程,是模式識(shí)別和機(jī)器視覺研究方向的核心課程。對(duì)于該門課程,教師授課難點(diǎn)是只能通過課本向?qū)W生講述數(shù)字圖像處理的基本原理和理論知識(shí)。學(xué)生如果只借助課本去學(xué)習(xí),內(nèi)容太抽象,對(duì)于課本中具體內(nèi)容的理解還存在一定的欠缺[1-3]。
基于上述的分析,本文開發(fā)了一個(gè)基于PyQt5的數(shù)字圖像處理實(shí)驗(yàn)平臺(tái),該實(shí)驗(yàn)平臺(tái)是數(shù)字圖像處理的輔助學(xué)習(xí)工具,簡(jiǎn)單易操作,便于學(xué)生系統(tǒng)、全面地掌握數(shù)字圖像處理的基本原理和經(jīng)典算法。實(shí)驗(yàn)平臺(tái)界面分為菜單欄、工具欄、工作區(qū)和狀態(tài)欄為四個(gè)功能模塊,菜單欄是放置一些主要操作,工具欄放置一些圖像、文字等內(nèi)容,細(xì)節(jié)操作和快捷操作,工作區(qū)是用于顯示,狀態(tài)欄顯示頁面提示內(nèi)容。該平臺(tái)是集良好的實(shí)用性、交互性、移植性于一體,便于教學(xué)的數(shù)字圖像處理實(shí)驗(yàn)平臺(tái)。
基于PyQt5的數(shù)字圖像處理實(shí)驗(yàn)平臺(tái)是以《數(shù)字圖像處理》課程理論為基礎(chǔ),在實(shí)驗(yàn)平臺(tái)界面加入實(shí)踐教學(xué)的內(nèi)容,實(shí)驗(yàn)平臺(tái)系統(tǒng)架構(gòu)如圖1所示。主要包括五個(gè)模塊,即邊緣檢測(cè)與分割、圖像變換、圖像濾波、圖像改善和綜合實(shí)例。該實(shí)驗(yàn)平臺(tái)將課本中復(fù)雜的理論內(nèi)容通過不同模塊來展示。
實(shí)驗(yàn)平臺(tái)包含了5個(gè)模塊的實(shí)踐教學(xué)內(nèi)容,通過PyQt5中的Qt Designer來創(chuàng)建GUI主界面,在主界面創(chuàng)建一個(gè)Qmainwindow主窗口,分別在主窗口上創(chuàng)建菜單欄、工具欄、工作區(qū)、狀態(tài)欄等部件,在工作區(qū)創(chuàng)建控件QGraphicsView和QLabel,用于顯示圖片信息。窗口界面創(chuàng)建好后保存到文件夾下,會(huì)生成一個(gè)后綴為.ui的文件,然后使用pyui5將.ui轉(zhuǎn)化為.py文件。在命令行編輯指令$File Name $ -o $FileName Without Extension$.py -x,運(yùn)行后就會(huì)生成一個(gè).py的文件。然后將.py文件打包成.exe文件,用戶通過雙擊.exe程序可執(zhí)行文件,進(jìn)入到實(shí)驗(yàn)平臺(tái)的主界面進(jìn)行相應(yīng)的操作。實(shí)驗(yàn)平臺(tái)GUI主界面如圖2所示:
圖1 實(shí)驗(yàn)平臺(tái)系統(tǒng)架構(gòu)圖
圖2 主界面
本實(shí)驗(yàn)平臺(tái)從圖像改善、圖像變換、圖像濾波、邊緣檢測(cè)與分割和綜合實(shí)例五個(gè)方面進(jìn)行界面布局。每個(gè)模塊分別詳細(xì)向?qū)W生展示了圖像處理過程和結(jié)果,學(xué)生通過選擇某一模塊的功能,就會(huì)跳轉(zhuǎn)到相應(yīng)的子界面,然后進(jìn)行對(duì)應(yīng)的操作。通過這種方式,可以幫助學(xué)生真正掌握?qǐng)D像處理的內(nèi)容和原理。教師通過實(shí)驗(yàn)平臺(tái)的輔助,在講授理論基礎(chǔ)和基本原理的時(shí)候,可以通過實(shí)際操作,更直觀的向?qū)W生闡述算法處理的結(jié)果,提升教學(xué)效果和質(zhì)量。
2.1.1 圖像改善
圖像增強(qiáng)[4]是將圖像中不感興趣的區(qū)域弱化,突顯出目標(biāo)區(qū)域,改善圖像質(zhì)量,增強(qiáng)識(shí)別效果。圖像增強(qiáng)結(jié)果如圖3所示。
圖3 圖像增強(qiáng)結(jié)果
圖像復(fù)原是將受損的圖像盡可能恢復(fù)成接近原始圖像的過程,實(shí)現(xiàn)圖像的最優(yōu)化。由于受損的圖像存在噪聲[5,6]和干擾等未知因素,所以圖像復(fù)原過程中會(huì)存在很多未知性。通過inpaint()函數(shù)實(shí)現(xiàn)圖像復(fù)原,圖4是復(fù)原的結(jié)果。
圖4 圖像復(fù)原結(jié)果
部分代碼如下:
thresh=cv2.inRange(self.im, np.array([240, 240, 240]), np .array ([255, 255, 255])) #圖片二值化處理
kernel = np.ones((3, 3), np.uint8)
hi_mask=cv2.dilate(thresh, kernel, iterations=1)
self.im=cv2.inpaint(self.im,hi_mask,5,flags= cv2.INPAINT_TELEA) #圖像擴(kuò)張和復(fù)原
2.1.2 圖像變換
圖像變換是指圖像由一種狀態(tài)轉(zhuǎn)換為另一種狀態(tài)的過程,具體內(nèi)容包括圖像旋轉(zhuǎn)、圖像鏡像和圖像縮放等基本內(nèi)容。圖像變換可用于數(shù)據(jù)增強(qiáng),制作訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集,解決了圖片數(shù)據(jù)量不足導(dǎo)致圖像分割、目標(biāo)追蹤等圖像處理結(jié)果準(zhǔn)確率不高的問題。
圖像旋轉(zhuǎn)通過將圖像以某一點(diǎn)為中心旋轉(zhuǎn)一定的角度,得到一張新的圖像。圖像旋轉(zhuǎn)具有的屬性是旋轉(zhuǎn)前和旋轉(zhuǎn)后的點(diǎn)離中心的位置不變。通過flip()函數(shù)實(shí)現(xiàn)圖像的旋轉(zhuǎn)。
水平鏡像是選取目標(biāo)圖像的垂直中軸線作為中心線,將圖像左右兩邊的圖像調(diào)換,得到一張新的圖像。垂直鏡像是選取目標(biāo)圖像的水平中軸線為中心線,將圖像上下的圖像調(diào)換,得到一張新的圖像。通過transpose()函數(shù)實(shí)現(xiàn)圖像位置的調(diào)換,達(dá)到鏡像效果。
圖像縮放是通過改變圖像的大小來進(jìn)而圖像中像素的質(zhì)量,滿足用戶需求。當(dāng)圖像放大時(shí),圖像中的像素的識(shí)別度也會(huì)提高;當(dāng)圖像縮小時(shí),圖像的平滑度和清晰度會(huì)增強(qiáng)。通過scale()函數(shù)控制圖片的縮放,調(diào)整圖圖像縮放片的大小。圖5是圖像變換的結(jié)果。
圖5 圖像變換結(jié)果
部分代碼如下:
self.text11 = float(self.text1)
M=cv2.getRotationMatrix2D((cols/2,rows/2),self.text11, 1)
self.text33 = float(self.text3)
sfwidth1 = sfwidth * self.text33
sfheight1 = sfheight * self.text33
self.re_bh_lb.resize(sfwidth1,sfheight1)
2.1.3 圖像濾波
圖像濾波指的是在保留目標(biāo)圖像的細(xì)節(jié)特征的同時(shí)對(duì)其包含的噪聲進(jìn)行處理。主要內(nèi)容包括均值濾波、中值濾波和高斯濾波等。
均值濾波是指選中某一目標(biāo)像素,然后求出目標(biāo)像素相鄰的像素的平均值,用該平均值來代替目標(biāo)像素的值,通過blur()函數(shù)實(shí)現(xiàn)均值濾波。圖6是均值濾波結(jié)果。
中值濾波是指求出圖像中每個(gè)像素領(lǐng)域的像素的中值,然后用該中代替圖像中每個(gè)像素的值通過medianBlur()函數(shù)實(shí)現(xiàn)濾波過程。
高斯濾波是指求出圖像中每個(gè)點(diǎn)以及領(lǐng)域內(nèi)其他點(diǎn)的像素值,然后進(jìn)行加權(quán)平均,通過GaussianBlur()函數(shù)實(shí)現(xiàn)高斯濾波,圖7是高斯濾波結(jié)果。
圖6 均值濾波結(jié)果
部分代碼如下:
self.text11 = float(self.text1)
M=cv2.getRotationMatrix2D((cols/2,rows/2),self.text11, 1)
self.text33 = float(self.text3)
sfwidth1 = sfwidth * self.text33
sfheight1 = sfheight * self.text33
self.re_bh_lb.resize(sfwidth1,sfheight1)
圖7 高斯濾波結(jié)果
2.1.4 邊緣檢測(cè)與分割
邊緣檢測(cè)利用不同的邊緣檢測(cè)算子實(shí)現(xiàn)對(duì)圖像邊緣的提取,所用的算子包括Robert、Sobel算子和Canny算子。通過算子將圖像中亮度對(duì)比明顯的像素點(diǎn)標(biāo)注出來,常用edge()函數(shù)來實(shí)現(xiàn)該過程。此功能可對(duì)灰度圖像進(jìn)行處理,根據(jù)不同的算子,在函數(shù)調(diào)用中分別選擇Robel、Sobel、Canny實(shí)現(xiàn)不同算子的處理結(jié)果。圖8是邊緣檢測(cè)結(jié)果。
圖8 邊緣檢測(cè)結(jié)果
部分代碼如下:
img1 = cv2.imread(self.img)
a = cv2.Sobel(img1, cv2.CV_16S, 1, 0)
a = cv2.Sobel(img1, cv2.CV_16S, 0, 1)
s_a = cv2.convertScaleAbs(a)
s_b = cv2.convertScaleAbs(b)
self.im = cv2.addWeighted(s_a, 0.5, s_b, 0.5, 0)
自動(dòng)圖像分割是指向計(jì)算機(jī)輸入算法,計(jì)算機(jī)根據(jù)算法分割出滿足約束條件的目標(biāo)區(qū)域。具體包括閾值分割[7,8]、超像素分割、基于區(qū)域的分割等。圖9是閾值分割結(jié)果。
圖9 閾值分割結(jié)果
交互式圖像分割[9,10]是指向圖像中加入用戶交互信息,即先驗(yàn)知識(shí),幫助計(jì)算機(jī)更好地分割目標(biāo)區(qū)域。實(shí)驗(yàn)平臺(tái)展示了以一種基于深度學(xué)習(xí)的交互式圖像分割方法,通過融入極值點(diǎn)特征,將RGB圖像和極值點(diǎn)特征級(jí)聯(lián)輸入到神經(jīng)網(wǎng)絡(luò),經(jīng)過神經(jīng)網(wǎng)絡(luò)進(jìn)行卷積、池化等操作,提取出目標(biāo)的特征,通過輸出層輸出。相對(duì)于傳統(tǒng)的自動(dòng)分割方法,該方法特征提取更高效、精確、完整。圖10是交互式分割結(jié)果。
圖10 交互式分割結(jié)果
主要代碼如下:
dmap=cv2.distanceTransform(tmp,cv2.DIST_L2,cv2.DIST_MASK_PRECISE)
merge_input=np.concatenate((img3,dismap),ax is=2).
inputs = inputs.to(device)
outputs = net.forward(inputs)
2.1.5 綜合案例
車牌識(shí)別是圖像識(shí)別技術(shù)在車輛牌照識(shí)別中的關(guān)鍵技術(shù),該技術(shù)有利于車輛管理,電子收費(fèi),車輛違章監(jiān)控,還能通過融合DSRC技術(shù)識(shí)別車輛身份,本實(shí)驗(yàn)平臺(tái)首先讀取圖像數(shù)據(jù),對(duì)圖像進(jìn)行濾波、二值化等預(yù)處理,然后通過OpenCV和Canny算子對(duì)預(yù)處理后的圖像進(jìn)行輪廓查找,根據(jù)一些參數(shù)來判斷查找到輪廓是否為車牌輪廓。車牌識(shí)別結(jié)果如圖11、圖12所示:
圖11 車牌識(shí)別結(jié)果
圖12 車牌識(shí)別結(jié)果
本文利用Python強(qiáng)大的數(shù)值計(jì)算、數(shù)據(jù)分析和圖像處理的能力,基于PyQt5設(shè)計(jì)了一款圖形用戶界面圖像處理實(shí)驗(yàn)平臺(tái),實(shí)驗(yàn)平臺(tái)集成五大模塊,通過實(shí)現(xiàn)圖像改善、圖像變換、圖像濾波、邊緣檢測(cè)與分割等功能,涵蓋了數(shù)字圖像處理基礎(chǔ)及進(jìn)階技術(shù),并通過綜合實(shí)例闡述了本系統(tǒng)在圖像識(shí)別中的應(yīng)用,使圖像處理可視化更加直觀,便捷。實(shí)驗(yàn)平臺(tái)操作簡(jiǎn)單、界面友好,具有良好的實(shí)用性、交互性、移植性。用戶可以通過自行添加模塊設(shè)置,修改對(duì)應(yīng)的參數(shù),編寫回調(diào)函數(shù),即可讓實(shí)驗(yàn)平臺(tái)發(fā)揮更多的功能操作,讓圖像處理更豐富多彩?,F(xiàn)今,數(shù)字圖像處理呈現(xiàn)出高靈活、廣適用、通用強(qiáng)、高精度的特點(diǎn),應(yīng)用領(lǐng)域涉及人類生活各個(gè)方面,通過設(shè)計(jì)這一圖像處理系統(tǒng),不僅方便教學(xué),也為圖像領(lǐng)域的研究人員提供了分析和解決問題的工具。