李向輝,張菲菲,鄒浩然,曾鈺琦,李杰倫,林偉龍,黃譽(yù)戈,楊振宇,李俊賢,王明謙
(廣東第二師范學(xué)院計(jì)算機(jī)學(xué)院,廣州 510303)
隨著智能手機(jī)的普及,人們對(duì)手機(jī)上獲取圖像的成像質(zhì)量和成像速度提出越來越高的要求,因此在移動(dòng)互聯(lián)網(wǎng)應(yīng)用中,面向移動(dòng)終端的圖像處理技術(shù)越來越重要[1]。當(dāng)前大多數(shù)智能手機(jī)在夜視環(huán)境下拍攝的圖像存在信噪比低、對(duì)比度差等問題,拍攝的圖像不能滿足用戶需求。目前,國內(nèi)外針對(duì)夜間圖像的增強(qiáng)算法主要包括三種:直方圖均衡化的方法、Retinex理論的方法以及深度學(xué)習(xí)的方法。其中Retinex理論的方法由于其優(yōu)異的處理效果,得到最多的關(guān)注和研究。本文采用帶色彩恢復(fù)的多尺度Retinex(multi-scale retinex with color restoration,MSRCR)算法[2-3]來對(duì)夜間圖像進(jìn)行增強(qiáng)。目前Android系統(tǒng)雖是主要的手機(jī)操作系統(tǒng),但在Android平臺(tái)上實(shí)現(xiàn)夜間圖像的增強(qiáng)技術(shù)并不多。因此,基于Android的夜間圖像增強(qiáng)軟件未來社會(huì)發(fā)展具有很高的應(yīng)用價(jià)值。鑒于此,本文結(jié)合MSRCR算法和專業(yè)的開源圖像處理庫OpenCV,研究在Android平臺(tái)開發(fā)一款夜視圖像增強(qiáng)軟件來滿足夜視場景的清晰化成像。
本系統(tǒng)的邏輯流程如圖1所示。
圖1 系統(tǒng)邏輯流程
首先,啟動(dòng)軟件之后,會(huì)進(jìn)入首頁面,首頁面具備兩個(gè)功能:登錄、注冊。其中在登錄框輸入的賬號(hào)密碼與數(shù)據(jù)庫匹配,則點(diǎn)擊登錄將成功進(jìn)入拍照相冊頁;另外,用戶可點(diǎn)擊注冊進(jìn)入注冊賬號(hào)頁面填寫信息,系統(tǒng)會(huì)將符合要求的注冊信息寫入到數(shù)據(jù)庫中。
然后在拍照相冊頁面中首次點(diǎn)擊會(huì)申請權(quán)限,點(diǎn)擊拍照按鈕會(huì)調(diào)用相機(jī)拍照,拍照按鈕按下后則會(huì)在處理圖像頁面顯示拍下的照片;點(diǎn)擊相冊按鈕則會(huì)打開相冊,當(dāng)用戶選擇照片后,則會(huì)在圖像頁面顯示選擇后的圖片。
在處理圖像頁面中,點(diǎn)擊處理圖像按鈕則會(huì)對(duì)圖像進(jìn)行增強(qiáng)處理,點(diǎn)擊保存按鈕則會(huì)將圖像保存至本地相冊然后跳轉(zhuǎn)到拍照相冊頁面。
本軟件的架構(gòu)關(guān)系如圖2所示。
圖2 軟件架構(gòu)關(guān)系
在該軟件的交互開發(fā)中,通過調(diào)用Android平臺(tái)提供的SQLite數(shù)據(jù)庫實(shí)現(xiàn)了用戶的注冊和登錄,通過Android平臺(tái)的XML文件進(jìn)行布局,實(shí)現(xiàn)各個(gè)界面的交互。最后通過常用的相冊相機(jī)調(diào)用方式,實(shí)現(xiàn)所需增強(qiáng)的圖像導(dǎo)入功能。
在圖像增強(qiáng)的開發(fā)中,通過Android平臺(tái)的JNI方式去調(diào)用CMake,CMake執(zhí)行圖像處理算法,同時(shí)該算法調(diào)用OpenCV庫所提供的方法,實(shí)現(xiàn)圖像增強(qiáng)后再通過JNI返回結(jié)果[4]。
本項(xiàng)目不直接使用OpenCV庫的原因是由于C語言在算法中具有高效的優(yōu)勢,同時(shí)OpenCV庫的底層語言亦為C語言,因此通過CMake方式能夠提高軟件執(zhí)行效率。
已有賬戶的用戶可通過輸入賬號(hào)與密碼,點(diǎn)擊登錄進(jìn)入圖像獲取頁面。點(diǎn)擊登錄時(shí),軟件會(huì)匹配數(shù)據(jù)庫中的內(nèi)容,若輸入的賬號(hào)密碼不正確,則彈出提示賬號(hào)密碼不正確,正確則進(jìn)入下一個(gè)活動(dòng)頁。
首次使用的用戶可點(diǎn)擊注冊按鈕進(jìn)入注冊頁面,填寫賬號(hào)與密碼進(jìn)行注冊。其中,登錄頁面的密碼出錯(cuò)。注冊頁面主要有兩個(gè)按鈕,一個(gè)是注冊,一個(gè)是返回主頁面。注冊按鈕通過獲取輸入框的string值,判斷三個(gè)輸入框密碼是否為空,以及兩個(gè)密碼框輸入的密碼是否一致,如果其中一項(xiàng)不符合標(biāo)準(zhǔn)則彈出錯(cuò)誤提示,如果成功,則寫入數(shù)據(jù)庫。
2.2.1 通過拍照獲得照片
首先活動(dòng)頁處創(chuàng)建一個(gè)file對(duì)象,然后根據(jù)安卓的版本大小,執(zhí)行相應(yīng)的拍照獲取圖片操作。如果安卓版本小于7.0則將file對(duì)象封裝Uri,如果大于7.0則file對(duì)象轉(zhuǎn)換成Uri對(duì)象再從這個(gè)對(duì)象獲得圖片的真實(shí)路徑,然后進(jìn)行動(dòng)態(tài)權(quán)限申請。最后要在AndroidManif.xml中申請相應(yīng)的權(quán)限。
2.2.2 通過相冊獲得照片
相冊獲取圖像是在調(diào)用的部分重寫startAc?tivityForResult()方法開啟Intent的回調(diào)實(shí)現(xiàn)。方法根據(jù)不同類型的圖像使用不同的處理。Docu?ment類型的uri通過document id處理;content類型的uri使用普通方式處理,F(xiàn)ile類型的uri則直接獲取圖片路徑。最后在界面上的顯示框呈現(xiàn)。
本軟件采用的夜視圖像增強(qiáng)算法是帶色彩恢復(fù) 的 多 尺 度Retinex算 法[3-4](multi-scale retinex with color restoration,MSRCR)。根據(jù)Retinex理論,圖像上某一像素點(diǎn)的觀測值為該點(diǎn)的光照分量與反射分量的乘積,即:
式中,(x,y)表示像素點(diǎn)的位置;I(x,y)表示觀測值;L(x,y)表示該點(diǎn)鄰域的亮度,并且與材質(zhì)無關(guān);R(x,y)表示反射分量,表示材質(zhì)的反射系數(shù),與物體的本身的材質(zhì)相關(guān),而與鄰域的光量無關(guān)。因此為而獲得反映物體真實(shí)面貌的反射分量R(x,y),可通過Retinex的圖像增強(qiáng)算法排除光照分量L(x,y)的影響。同時(shí)根據(jù)人的視覺觀感的特點(diǎn),對(duì)數(shù)形式更接近人眼觀感的舒適區(qū),因此基于Retinex算法的圖像增強(qiáng)算法都是將圖像轉(zhuǎn)到對(duì)數(shù)域進(jìn)行處理,Jobson等人運(yùn)用高斯環(huán)繞函數(shù)對(duì)觀測圖像進(jìn)行卷積估算得到光照分量,由此提出了經(jīng)典的單尺度Retinex(single-scale retinex,SSR)算法,其計(jì)算公式如下所示
式中,F(xiàn)(x,y)表示高斯環(huán)繞函數(shù);*表示卷積運(yùn)算;I i(x,y)為第i個(gè)顏色通道的輸入圖像;Ri(x,y)為第i個(gè)顏色通道的輸出圖像。由于SSR算法在細(xì)節(jié)增強(qiáng)與色彩保真之間難以達(dá)到平衡,Jobson等人提出將多個(gè)不同尺度的SSR處理結(jié)果進(jìn)行簡單加權(quán)得到多尺度Retinex(multi-scale ret?inex,MSR)算法:
式中R M i(x,y)表示第i個(gè)顏色通道經(jīng)過MSR處理而得到的輸出圖像,n表示尺度個(gè)數(shù),W n為第n個(gè)尺度的權(quán)重,滿足,一般情況下,取大、中、小三個(gè)尺度,即N=3,W1=W2=W3=1/3。
由于SSR算法和MSR算法在處理RGB彩色圖像時(shí),都是分別對(duì)R、G、B通道進(jìn)行單獨(dú)地增強(qiáng),導(dǎo)致增強(qiáng)過程可能會(huì)改變各像素點(diǎn)在各顏色通道中的像素值比例,從而淡化圖像的全局或者特定區(qū)域物體的真實(shí)顏色。為此,Jobson等人又提出帶色彩恢復(fù)的多尺度Retinex(MSRCR)算法。MSRCR算法的基本原理是:將原始圖像中的比例關(guān)系引入三個(gè)顏色通道來對(duì)MSR結(jié)果進(jìn)行后處理,從而優(yōu)化圖像的顏色,避免顏色不飽和及失真,使圖像具有更好的顏色呈現(xiàn)[5]。
式中,C i(x,y)表示第i個(gè)顏色通道的色彩恢復(fù)系數(shù),作用是對(duì)3個(gè)顏色通道的比例進(jìn)行調(diào)節(jié)。C i(x,y)中參數(shù)β為增益常量,α控制非線性的程度。
圖像增強(qiáng)的實(shí)現(xiàn)是在點(diǎn)擊按鈕中創(chuàng)建一個(gè)方法,這個(gè)方法通過JNI接口調(diào)用CMake,CMake執(zhí)行算法處理圖像,并且返回結(jié)果。當(dāng)用戶選取圖像之后,圖像將會(huì)在圖像控件上呈現(xiàn)。點(diǎn)擊增強(qiáng)按鈕之后,會(huì)對(duì)圖像進(jìn)行算法處理呈現(xiàn),并將圖像覆蓋原來的在圖像控件中的圖像。在Android中通過CMake的方式調(diào)用OpenCV庫實(shí)現(xiàn)MSRCR算法來增強(qiáng)圖像,MSRCR算法實(shí)現(xiàn)分為五步,其中流程如圖3所示。
圖3 MSRCR方法的實(shí)現(xiàn)流程
創(chuàng)建一維的高斯核。然后把該高斯核封裝成一個(gè)類浮點(diǎn)類型的整數(shù)類型高速高斯核。實(shí)現(xiàn)對(duì)目標(biāo)圖像的核計(jì)算高斯卷積,接著使用圖像金字塔對(duì)圖像進(jìn)行多尺度表達(dá),從而與分離濾波器連續(xù)對(duì)使用高斯卷積濾波。最后將原圖像和一系列被濾波的圖像轉(zhuǎn)換到對(duì)數(shù)域,并與帶權(quán)重的原圖像做減法運(yùn)算,同時(shí)加入顏色修復(fù)。
圖4顯示了經(jīng)本軟件處理前的夜視圖像以及處理后的結(jié)果圖像,對(duì)圖像進(jìn)行增強(qiáng)處理后,點(diǎn)擊保存圖像將使用數(shù)據(jù)輸入輸出流,將增強(qiáng)處理后的圖像寫入相冊,同時(shí)申請權(quán)限。根據(jù)結(jié)果圖像顯示,本軟件能夠?qū)σ归g低照度圖像進(jìn)行增強(qiáng),能夠高保真地恢復(fù)原圖像中的細(xì)節(jié)和色彩,提高了圖像的清晰度。
圖4 圖像處理
本文開發(fā)了一款低成本的夜間圖像增強(qiáng)軟件,軟件提供了用戶登錄與注冊的功能,通過CMake調(diào)用OpenCV庫的方式實(shí)現(xiàn)MSRCR算法來對(duì)夜視圖像進(jìn)行增強(qiáng)。通過對(duì)該軟件的圖像采集、夜視圖像增強(qiáng)處理等功能進(jìn)行測試,結(jié)果表明軟件功能易用、有效,能夠?qū)σ挂晥D像進(jìn)行較好的增強(qiáng)處理。未來的工作考慮增加多曝光圖像融合的功能來對(duì)夜視圖像進(jìn)行增強(qiáng),進(jìn)一步提升軟件的性能。