?

基于Android平臺的霧霾天圖像增強軟件的設計與實現

2023-04-27 04:05李俊賢張高菘張菲菲周曉彤林葉黃煒浩莊佳森
電腦知識與技術 2023年8期

李俊賢 張高菘 張菲菲 周曉彤 林葉 黃煒浩 莊佳森

關鍵詞:Android;OpenCV;暗原色先驗;圖像去霧

中圖分類號:TP311 文獻標識碼:A

文章編號:1009-3044(2023)08-0037-03

0 引言

隨著智能手機等移動應用設備的普及,人們對移動設備攝像技術的成像速度和成像質量提出了越來越高的要求,尤其在惡劣環境條件下,面向移動終端的圖像處理技術顯得越來越重要。當前,移動設備在惡劣環境下(霧霾天氣)獲取到的圖像存在環境隨機噪聲干擾嚴重和對比度差等問題,拍攝的圖像不能滿足用戶需求。許多學者對霧霾天圖像的增強方法展開了深入的研究,并取得了較為顯著的成果,現有的霧霾天圖像增強方法主要分為空域方法、頻域方法和混合域方法[1]三種。當前研究在各大移動終端設備平臺上的圖像增強應用技術并不多。因此,研究將圖像去霧等圖像增強方法與Android 平臺相結合的應用,在未來定會有很高的應用價值和發展前景。鑒于此,本應用結合專業的開源圖像處理庫OpenCV與暗原色先驗算法,研究了一款霧天圖像增強的移動應用軟件,以滿足霧霾場景的清晰化成像。

1 去霧圖像清晰化成像應用框架體系

如圖1所示,運行本軟件后,進入軟件的主頁面,軟件的功能清晰明了,主要針對霧霾圖像進行處理,點擊功能按鈕后,軟件會觸發監聽事件,呈現“相冊選取”與“相機拍攝”兩個選項供用戶選擇,首次點擊會申請手機內存讀寫權限與攝像頭調用權限,點擊“相冊”按鈕則會打開相冊,在用戶選擇圖片后,顯示選擇后的圖片;點擊“相機拍攝”,則會調用手機攝像頭,獲取圖片流數據。

在處理圖像頁中,會顯示進行圖像增強處理后的圖像,提供兩種保存的形式,點擊“保存至本地”,應用將圖片數據寫入至手機內存卡,保存到本地相冊中;點擊“保存到云端”,便會在線上傳到云端后臺數據庫中。

如圖2所示,在軟件的開發過程中,頁面跳轉邏輯、數據傳遞等主要采用Java代碼開發,通過Android平臺中JNI[2]本地接口使用C++語言,調用圖像處理算法,同時在算法中調用OpenCV庫所提供的視覺預訓練模型,實現圖像增強后再通過JNI返回結果。本應用中采用Cmake的形式,進行跨平臺C語言圖像處理算法編譯[3]。

完成圖片增強類型選擇后,獲取圖片的方式有兩種:一是通過拍照獲取圖片,主頁面的方法中向用戶申請權限,點擊后創建對象,用于存儲拍照后的圖片,在對圖片存儲的過程中,需要對運行設備的系統版本進行判斷,以7.0作為閾值,對不同版本的系統進行不同的圖片對象轉換;二是通過相冊獲取圖片,讀取圖片借助媒體庫的內容提供者MediaProvide,圖片列表展示采用的是RecyclerView加載列表數據,Glide框架展示圖片,借助LoadManager異步加載媒體庫中圖片的數據,通過對RecyclerView.Adapter添加相應監聽事件,實現對圖片選擇與否動態的UI變化[3]。

2 去霧圖像增強算法實現

在學術界上,對有霧圖像的定義是:

I (x) = J (x)t(x) + A(1 - t(x)) (1)

即為有霧圖像=無霧圖像*透射率+全球大氣光成分(1-透射率)[4],在公式中,I(X)是現已經有的圖像(待去霧的圖像),J(x)是要恢復的無霧的圖像,A是全球大氣光成分,t(x)為透射率,現已知有霧圖,求出無霧圖。

要實現暗通道先驗原理的去霧算法,需要實現四個步驟,算法流程如圖3所示:

2.1 暗原色先驗

何愷明[4]通過大量的研究實驗發現,在海量的沒有霧且干凈的圖片中,絕大多數的圖像某些局部區域內,存在著某一些像素點在R、G、B三個通道中總會有一個或者多個顏色通道的灰度值具有很低的值甚至趨近于0,因而把J,即為晴朗天空下的圖像進行分塊,并進行最小分量的求解,對各個像素便有了暗原色通道的定義表達。

其中J表示彩色圖像的每個通道,Ω(x)表示以像素為中心的一個正方形鄰域,對圖像進行RGB分解,取得局部塊中的最小值,根據暗通道理論得到,暗通道最小值趨近于0,即Jdark趨于0。在此公式的表達中,實現的就是將圖像置于以像素為中心的窗口中,求得該圖像在這個鄰域的暗原色,在帶霧的圖像中,這些暗原色的值會升高。

2.2 計算透射率

對上述公式稍做處理,變形為下公式:

其中c 表示的是RGB三通道,再進一步假設,在暗通道推算中的局部區域,即所規定的正方形鄰域中,鄰域塊Ω(x)是連續的且恒定不變的[4],對上述公式做出兩邊求兩次最小值的運算后,結合暗原色先驗的理論,得到透射率的粗估值:

由上述公式中所獲取到的透射率僅為預估值,要獲取更為精細的透射率圖,何愷明博士在文章中提出了soft matting方法,可以得到非常細膩的結果,出于對速度的考慮,最終采用引導濾波的方式來獲得較好的透射率圖[5]。

何愷明博士的算法認為,在清晰的目標圖像上,相鄰的點總是線性相關的,待處理圖不清晰是因為圖像上存在的噪聲,導致部分不相關[5]。故在進行濾波時,可以設置與待處理圖有著相同梯度的引導圖,求取能使待處理圖與目標圖無限接近的線性相關核W。

2.3 估計大氣光

求取全局大氣光強A,根據上述公式中求得的暗通道,然后進行以下操作:

1) 通過霧濃度最大的地方進行選取,即暗通道中前0.1%中最亮的像素,求原圖像暗通道的前千分之一最亮(灰度值最大)的像素點。

2) 在原圖中找到這些像素點,取其中最大亮度值(在此認為是三個通道灰度值的和)作為大氣光A。

綜合以上從而得到了最終J的求解公式:

2.4 去霧算法在Android平臺上的實現

在安卓平臺上,圖像增強是在點擊霧霾圖像處理按鈕后,觸發后臺所設定的監聽事件,調用函數獲取圖片的真實路徑,選擇需要處理的圖片后,所選的圖片便會在圖片控件上呈現。并顯示“正在處理,請稍等片刻”的字樣[6]。此時,在Android中,通過函數接口中的請求,利用個人的加密令牌請求到指定url上的圖片增強處理接口,通過暗通道先驗算法來增強圖像,并將最終的圖片覆蓋到原圖片上,暗通道先驗算法分為五步,其流程如圖4所示。

如圖4所示,在圖片傳入API中后,在接口中完成對圖片暗通道的獲取方法,并得到圖像的透射率以及大氣光照,接著對圖像回代公式處理時,考慮到大氣中的實際情況,總會不可以避免地包含一些雜質分子,因而在去霧的同時,會實現遠處霧的保留,引進一個常數ω(0<ω≤ 1)[4] ,有針對性地保留一部分覆蓋遙遠景物的霧,完善圖像的深度感與真實感。

圖5顯示了圖像處理前以及圖像處理后的效果對比,在整個調用過程中,需要對Android進行內存、相機的權限請求,能夠提供兩種保存的形式,讓圖片在Android頁面跳轉過程中,不因Intent傳輸大小的限制而導致圖像質量的壓縮,能夠高保真地恢復原圖像中的細節和色彩,提高了圖像的清晰度。

3 結論

本文開發了一款兼備實用性以及普適性的霧天圖像增強軟件,軟件中向用戶提供了圖像去霧的功能,通過CMake調用OpenCV 庫的方式[6],調用外部接口,實現暗通道先驗去霧算法來對霧天圖像進行增強,經過多次對圖片讀取、采集以及處理前后對比的驗證,結果表明,軟件實用且有效,能夠對霧天圖像進行較好的處理。未來將繼續對算法進行改進,達成透射率的空間自適應估計,整體降低算法的時間復雜度,進一步提升軟件的性能。

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合