js怎么做打開(kāi)網(wǎng)站就復(fù)制內(nèi)容網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣方式案例
摘要
在夜間霧霾場(chǎng)景中,可見(jiàn)性經(jīng)常受到低光照、強(qiáng)烈光暈、光散射以及多色光源等多種因素的影響而降低?,F(xiàn)有的夜間除霧方法常常難以處理光暈或低光照條件,導(dǎo)致視覺(jué)效果過(guò)暗或光暈效應(yīng)無(wú)法被有效抑制。本文通過(guò)抑制光暈和增強(qiáng)低光區(qū)域來(lái)提升單張夜間霧霾圖像的可見(jiàn)性。為了處理光暈效應(yīng),提出了一個(gè)光源感知網(wǎng)絡(luò)來(lái)檢測(cè)夜間圖像的光源,并采用APSF(大氣點(diǎn)擴(kuò)散函數(shù))引導(dǎo)的光暈渲染。該算法的框架在渲染圖像上進(jìn)行訓(xùn)練,實(shí)現(xiàn)了光暈的抑制。此外,還利用梯度自適應(yīng)卷積來(lái)捕捉霧霾場(chǎng)景中的邊緣和紋理。通過(guò)提取的邊緣和紋理,在不丟失重要結(jié)構(gòu)細(xì)節(jié)的情況下增強(qiáng)了場(chǎng)景的對(duì)比度。為了提升低光強(qiáng)度,算法的網(wǎng)絡(luò)學(xué)習(xí)了一個(gè)注意力圖,然后通過(guò)伽馬校正進(jìn)行調(diào)整。這個(gè)注意力圖在低光區(qū)域有較高的值,在霧霾和光暈區(qū)域有較低的值。通過(guò)在真實(shí)的夜間霧霾圖像上進(jìn)行廣泛的評(píng)估,算法的方法證明了其有效性。算法的實(shí)驗(yàn)表明,算法的方法在GTA5夜間霧霾數(shù)據(jù)集上達(dá)到了30.38dB的PSNR,比最先進(jìn)的方法提高了13%。
論文地址:https://arxiv.org/pdf/2308.01738.pdf
源碼地址:https://github.com/jinyeying/nighttime_dehaze
推理代碼:https://download.csdn.net/download/matt45m/89110270
1. 論文貢獻(xiàn)
夜間霧霾或霧圖像通常遭受可見(jiàn)性降低的問(wèn)題。除了夜間圖像常見(jiàn)的問(wèn)題,如低光、噪聲、不均勻的光分布和多種光顏色外,夜間霧霾或霧圖像還表現(xiàn)出強(qiáng)烈的光暈和顆粒遮蔽效應(yīng)。盡管存在這些挑戰(zhàn),解決這些問(wèn)題對(duì)于許多應(yīng)用來(lái)說(shuō)是至關(guān)重要的。這些應(yīng)用包括自動(dòng)駕駛汽車(chē)、自主無(wú)人機(jī)和監(jiān)控等,因?yàn)橐归g霧霾是自然現(xiàn)象,頻繁且不可避免。日間霧霾去除方法無(wú)法處理夜間霧霾所獨(dú)有的挑戰(zhàn)。傳統(tǒng)的非學(xué)習(xí)型日間除霧方法依賴于霧霾成像模型,但這個(gè)模型在夜間不適用,因?yàn)榇嬖谌嗽旃庠春驼彰黝伾膹?fù)雜性。因此,與日間不同,算法不能假設(shè)大氣光顏色是均勻的。此外,這個(gè)日間霧霾模型沒(méi)有考慮到光暈的視覺(jué)表現(xiàn)?,F(xiàn)有的夜間除霧方法產(chǎn)生了不令人滿意的暗視覺(jué)或未緩解的光暈效應(yīng)。非深度學(xué)習(xí)方法引入了對(duì)光暈的某些約束,但它們由于光暈和背景層的不精確分解或使用暗通道先驗(yàn)進(jìn)行除霧,導(dǎo)致結(jié)果暗淡。基于學(xué)習(xí)的方法面臨的主要挑戰(zhàn)是缺乏真實(shí)世界的成對(duì)訓(xùn)練數(shù)據(jù),因?yàn)楂@取包含光暈和多光源的夜間霧霾場(chǎng)景的清晰真實(shí)圖像是不切實(shí)際的。算法的方法通過(guò)抑制光暈和增強(qiáng)低光區(qū)域來(lái)增強(qiáng)單張夜間霧霾圖像的可見(jiàn)性。算法的光暈抑制包括兩個(gè)主要部分:APSF引導(dǎo)的光暈渲染和梯度自適應(yīng)卷積。算法的光暈渲染方法使用APSF引導(dǎo)的方法為各種光源創(chuàng)建光暈效應(yīng)。算法采用光源感知網(wǎng)絡(luò)來(lái)檢測(cè)圖像中光源的位置,然后對(duì)這些光源應(yīng)用APSF引導(dǎo)的光暈渲染。算法的框架從渲染的圖像中學(xué)習(xí),因此可以抑制不同光源中的光暈效應(yīng)。算法的梯度自適應(yīng)卷積從霧霾圖像中捕捉邊緣和紋理。具體來(lái)說(shuō),通過(guò)計(jì)算相鄰像素之間的像素差異來(lái)獲取邊緣,同時(shí)使用雙邊核來(lái)提取圖像的紋理。邊緣和紋理然后被輸入到算法的框架中以增強(qiáng)圖像細(xì)節(jié)。為了增強(qiáng)非光源區(qū)域的可見(jiàn)性,算法引入了一個(gè)新穎的注意力引導(dǎo)增強(qiáng)模塊。霧霾區(qū)域的權(quán)重較低,而暗區(qū)域的權(quán)重較高??傮w而言,算法的貢獻(xiàn)可以總結(jié)如下:
- 據(jù)算法所知,算法的方法是基于學(xué)習(xí)的網(wǎng)絡(luò),首次一站式處理夜間光暈和低光條件。
- 算法提出了一個(gè)光源感知網(wǎng)絡(luò)和APSF引導(dǎo)的光暈渲染,以模擬來(lái)自不同光源的光暈效應(yīng)。通過(guò)從APSF引導(dǎo)的光暈渲染數(shù)據(jù)中學(xué)習(xí),算法的框架有效地抑制了真實(shí)世界霧霾圖像中的光暈效應(yīng)。
- 由于夜間圖像對(duì)比度較低,算法采用梯度自適應(yīng)卷積進(jìn)行邊緣增強(qiáng)和雙邊核進(jìn)行紋理增強(qiáng)。
2. 相關(guān)工作
早期的除霧方法利用多張圖像或先驗(yàn)來(lái)估計(jì)大氣光和傳輸。隨著深度學(xué)習(xí)的出現(xiàn),提出了許多網(wǎng)絡(luò)來(lái)估計(jì)傳輸圖或端到端輸出清晰圖像。最近,已經(jīng)開(kāi)發(fā)了全監(jiān)督、半監(jiān)督、零樣本和無(wú)監(jiān)督方法。然而,這些方法在夜間霧霾方面遇到了困難,因?yàn)樗鼈兠媾R非均勻、多色的人造光和缺乏干凈的地面真實(shí)數(shù)據(jù)用于訓(xùn)練。基于優(yōu)化的夜間除霧方法遵循大氣散射模型、新的成像模型等。Pei和Lee將霧霾夜間圖像的空氣光顏色轉(zhuǎn)移到日間,并使用DCP進(jìn)行除霧。Ancuti等人引入了一種基于融合的方法和拉普拉斯金字塔分解來(lái)估計(jì)局部空氣光。Zhang等人使用照明補(bǔ)償、顏色校正和DCP進(jìn)行除霧。Zhang等人提出了最大反射率先驗(yàn)(MRP)。Tang等人使用Retinex理論和泰勒級(jí)數(shù)展開(kāi)。Liu等人使用正則化約束。Wang等人提出了灰色霧霾線先驗(yàn)和變分模型。現(xiàn)有的夜間除霧方法依賴于基于局部補(bǔ)丁的大氣光估計(jì),假設(shè)小補(bǔ)丁內(nèi)的均勻性。因此,它們的性能對(duì)補(bǔ)丁大小敏感。這些方法在優(yōu)化方面不自適應(yīng)且耗時(shí)。與它們不同,算法的方法是基于學(xué)習(xí)的,更高效、實(shí)用和快速。最近,提出了基于學(xué)習(xí)的夜間除霧方法。Zhang等人通過(guò)使用合成的夜間霧霾圖像進(jìn)行全監(jiān)督學(xué)習(xí)來(lái)訓(xùn)練網(wǎng)絡(luò)。然而,這種方法無(wú)法有效抑制光暈,因?yàn)楹铣蓴?shù)據(jù)集沒(méi)有考慮到光暈效應(yīng)。Yan等人提出了一種半監(jiān)督方法,使用高低頻分解和灰度網(wǎng)絡(luò)。然而,他們的結(jié)果往往較暗,丟失了細(xì)節(jié)。這是因?yàn)榛诖致灶l率的分解方法難以有效分離光暈,導(dǎo)致場(chǎng)景的亮度和可見(jiàn)性降低。DeGlow-DeHaze網(wǎng)絡(luò)估計(jì)傳輸,然后是DehazeNet。然而,由DeHaze網(wǎng)絡(luò)估計(jì)的大氣光是從最亮的區(qū)域獲得的,并被假定為全局均勻的,這在夜間是無(wú)效的。與它們相比,算法的結(jié)果可以抑制光暈,同時(shí)增強(qiáng)低光區(qū)域。點(diǎn)光源的光暈,稱為大氣點(diǎn)擴(kuò)散函數(shù)(APSF),已經(jīng)在各種工作中進(jìn)行了研究。Narasimhan和Nayar首先引入APSF,并為多次散射光開(kāi)發(fā)了一個(gè)基于物理的模型。Metari等人對(duì)APSF核進(jìn)行了建模。Li等人使用層分離方法從輸入圖像中分解光暈,通過(guò)其平滑屬性約束光暈,并使用DCP進(jìn)行除霧。Park等人和Yang等人遵循夜間霧霾模型,并使用加權(quán)熵和超像素來(lái)估計(jì)大氣光和傳輸圖。然而,這些方法在去除光暈后,簡(jiǎn)單地將日間除霧應(yīng)用于夜間除霧,導(dǎo)致他們的成果在可見(jiàn)性和顏色上存在失真。以前的工作主要集中在基于優(yōu)化的方法上,而算法的作品是第一個(gè)將APSF先驗(yàn)納入夜間學(xué)習(xí)網(wǎng)絡(luò)的。
3. 提出的方法
圖2展示了算法的流程,包括光暈抑制和低光增強(qiáng)。算法的光暈抑制有兩個(gè)部分:deglowing網(wǎng)絡(luò)和glow生成器。算法的deglowing網(wǎng)絡(luò)將真實(shí)的霧霾圖像轉(zhuǎn)換為清晰的圖像。算法使用一個(gè)鑒別器來(lái)判斷生成的清晰圖像和參考圖像是真實(shí)的還是偽造的。算法的創(chuàng)新點(diǎn)在于這三個(gè)想法:APSF引導(dǎo)的光暈渲染、梯度自適應(yīng)卷積和注意力引導(dǎo)增強(qiáng)。
3.1. 光源感知網(wǎng)絡(luò)
夜間場(chǎng)景經(jīng)常包含活動(dòng)光源,如路燈、車(chē)頭燈和建筑燈光。這些光源可以在霧霾夜間場(chǎng)景中造成強(qiáng)烈的光暈。夜間場(chǎng)景中的霧霾和光暈的出現(xiàn)可以建模為:
3.2 APSF引導(dǎo)的夜間光暈渲染
在獲得光源圖后,算法提出了一種基于APSF的方法來(lái)渲染夜間光暈效果。首先,算法計(jì)算APSF函數(shù),并將其轉(zhuǎn)換為2D格式,這使算法能夠在光源圖上執(zhí)行2D卷積,從而產(chǎn)生光暈圖像。然后,算法結(jié)合清晰和光暈圖像來(lái)渲染最終圖像中的逼真光暈效果。
3.3. 梯度自適應(yīng)卷積
夜間霧霾圖像通常對(duì)比度較低,缺失紋理,照明不均勻。普通的2D卷積可能不足以增強(qiáng)夜間霧霾圖像。因此,算法使用梯度自適應(yīng)卷積來(lái)捕捉霧霾圖像中的邊緣和紋理。
3.4. 網(wǎng)絡(luò)和其他損失
算法的光暈抑制是基于CycleGAN網(wǎng)絡(luò)。算法使用deglowing網(wǎng)絡(luò),它與鑒別器耦合。為了確保重建一致性,算法有另一個(gè)霧霾生成器與它的鑒別器耦合。算法的霧霾生成器將輸出圖像轉(zhuǎn)換為重構(gòu)的清晰圖像。通過(guò)施加循環(huán)一致性約束,算法的deglowing網(wǎng)絡(luò)學(xué)習(xí)去除真實(shí)世界的光暈。由于循環(huán)一致性約束,算法被允許使用未配對(duì)的數(shù)據(jù)來(lái)優(yōu)化算法的deglowing網(wǎng)絡(luò),從而減少合成數(shù)據(jù)集和真實(shí)世界光暈圖像之間的領(lǐng)域差距。除了自監(jiān)督的光源一致性損失、梯度損失和雙邊核損失外,算法按照[102]的方法,使用其他損失來(lái)訓(xùn)練算法的網(wǎng)絡(luò)。它們是對(duì)抗損失、循環(huán)一致性損失、身份損失,權(quán)重分別為{1, 10, 10}。
3.5. 低光區(qū)域增強(qiáng)
夜間除霧經(jīng)常導(dǎo)致暗結(jié)果,這是由于低光條件造成的。為了解決這個(gè)問(wèn)題,算法引入了一個(gè)低光增強(qiáng)模塊來(lái)提高對(duì)象區(qū)域的可見(jiàn)性。算法的方法包括生成一個(gè)注意力圖,突出這些區(qū)域,使算法的方法專注于增強(qiáng)它們的強(qiáng)度。然后,算法應(yīng)用一個(gè)低光圖像增強(qiáng)技術(shù)來(lái)增強(qiáng)區(qū)域,即使在場(chǎng)景光照較低的情況下。
4. 實(shí)驗(yàn)結(jié)果
4.1. 數(shù)據(jù)集
GTA5是一個(gè)由GTA5游戲引擎生成的合成夜間霧霾數(shù)據(jù)集。它包括864對(duì)配對(duì)圖像,其中787對(duì)圖像用作訓(xùn)練集,其余圖像用作測(cè)試集。RealNightHaze是一個(gè)真實(shí)世界的夜間除霧數(shù)據(jù)集。它包括440張夜間霧霾圖像,其中150張圖像來(lái)自[98],200張圖像來(lái)自[87],其余圖像從互聯(lián)網(wǎng)收集。
4.2. 在合成數(shù)據(jù)集上的比較
在本節(jié)中,將方法與現(xiàn)有的最先進(jìn)方法進(jìn)行比較,包括Yan [87]、Zhang [97]、Li [45]、Ancuti [1]、Zhang [96]、Yu [94]、Zhang [98]、Liu [51]和Wang [77]。主要區(qū)別的總結(jié)如表2所示。實(shí)驗(yàn)結(jié)果如表1所示??梢钥闯?#xff0c;該算法的方法實(shí)現(xiàn)了顯著的性能提升。采用兩個(gè)廣泛使用的指標(biāo)PSNR和SSIM。算法的方法達(dá)到了30.38dB的PSNR和0.904的SSIM,比Yan的方法[87]分別提高了14%和5%。
4.3. 在真實(shí)世界數(shù)據(jù)集上的比較
下圖顯示了不同夜間除霧方法在真實(shí)夜間霧霾場(chǎng)景上的定性結(jié)果。該算法顯著增強(qiáng)了夜間霧霾圖像的可見(jiàn)性。具體來(lái)說(shuō),大多數(shù)最先進(jìn)的方法無(wú)法充分去除霧霾,因?yàn)樗鼈兊姆椒ㄊ艿胶铣蓴?shù)據(jù)集和真實(shí)世界圖像之間領(lǐng)域差距的影響。Yan等人提出了一種半監(jiān)督框架來(lái)去除夜間霧效,可以去除大部分霧霾效果。然而,他們的方法過(guò)度抑制了霧霾圖像,因此他們的輸出結(jié)果變得太暗。相比之下,該算法處理了光暈和低光條件。如圖9(b)所示,該算法不僅去除了輸入圖像的霧霾,還增強(qiáng)了光線。例如,樹(shù)木和建筑物的細(xì)節(jié)是清晰的。這是因?yàn)樵撍惴ㄍㄟ^(guò)利用APSF來(lái)模擬光暈渲染,因此可以有效去除真實(shí)世界夜間霧霾圖像中的霧霾或光暈。此外,該算法提出了一個(gè)梯度自適應(yīng)卷積來(lái)捕捉霧霾圖像中的邊緣和紋理。捕獲的邊緣和紋理然后被用來(lái)增強(qiáng)圖像的細(xì)節(jié),從而實(shí)現(xiàn)更好的性能。此外,該算法引入了一個(gè)注意力圖來(lái)增強(qiáng)低光區(qū)域。因此,該算法的方法實(shí)現(xiàn)了顯著的性能提升。該算法還對(duì)真實(shí)世界的夜間霧霾圖像進(jìn)行了用戶研究。實(shí)驗(yàn)結(jié)果如表3所示??梢钥闯?#xff0c;該算法的方法在所有方面都獲得了最高分。
4.4. 消融研究
該算法的框架包括三個(gè)核心部分:APSF引導(dǎo)的光暈渲染、梯度自適應(yīng)卷積和注意力引導(dǎo)增強(qiáng)。為了證明每個(gè)部分的有效性,該算法在真實(shí)世界的夜間霧霾圖像上進(jìn)行了消融研究。APSF引導(dǎo)的光暈渲染如圖5(底部)所示,該算法可以看到該算法的方法可以準(zhǔn)確地檢測(cè)到光源的位置(中間)。此外,渲染結(jié)果有效地模擬了光暈效果。梯度自適應(yīng)卷積如圖6所示,顯示了梯度邊緣圖(中間)和紋理(底部)的結(jié)果。圖11(b)和(c)顯示了沒(méi)有梯度損失L𝐴?和沒(méi)有核損失L𝐴?的結(jié)果,(d)是帶有梯度捕獲卷積的。該算法可以看到該算法的梯度捕獲卷積可以有效地保留霧霾圖像的結(jié)構(gòu)細(xì)節(jié)。通過(guò)充分利用梯度圖和紋理,該算法的框架生成了更清晰的結(jié)果。低光增強(qiáng)如圖10所示,顯示了從(b)到(d)的低光增強(qiáng)結(jié)果。
5.模型部署
官方提供了預(yù)訓(xùn)練的模型,可以拿官方的模型轉(zhuǎn)onnx之后用onnxruntime進(jìn)行推理,這里使用的onnxruntime版本是1.15 。
C++代碼推理:
#include "NighttimeDehaze.h"NighttimeDehaze::NighttimeDehaze(string model_path)
{std::wstring widestr = std::wstring(model_path.begin(), model_path.end()); windows寫(xiě)法///OrtStatus* status = OrtSessionOptionsAppendExecutionProvider_CUDA(sessionOptions, 0); ///如果使用cuda加速,需要取消注釋sessionOptions.SetGraphOptimizationLevel(ORT_ENABLE_BASIC);ort_session = new Session(env, widestr.c_str(), sessionOptions); windows寫(xiě)法ort_session = new Session(env, model_path.c_str(), sessionOptions); linux寫(xiě)法size_t numInputNodes = ort_session->GetInputCount();size_t numOutputNodes = ort_session->GetOutputCount();AllocatorWithDefaultOptions allocator;for (int i = 0; i < numInputNodes; i++){input_names.push_back(ort_session->GetInputName(i, allocator));Ort::TypeInfo input_type_info = ort_session->GetInputTypeInfo(i);auto input_tensor_info = input_type_info.GetTensorTypeAndShapeInfo();auto input_dims = input_tensor_info.GetShape();input_node_dims.push_back(input_dims);}for (int i = 0; i < numOutputNodes; i++){output_names.push_back(ort_session->GetOutputName(i, allocator));Ort::TypeInfo output_type_info = ort_session->GetOutputTypeInfo(i);auto output_tensor_info = output_type_info.GetTensorTypeAndShapeInfo();auto output_dims = output_tensor_info.GetShape();output_node_dims.push_back(output_dims);}this->inpHeight = input_node_dims[0][2]; /// n, h, w, cthis->inpWidth = input_node_dims[0][3];
}void NighttimeDehaze::preprocess(Mat img)
{Mat rgbimg;cvtColor(img, rgbimg, COLOR_BGR2RGB);resize(rgbimg, rgbimg, cv::Size(this->inpWidth, this->inpHeight));vector<cv::Mat> rgbChannels(3);split(rgbimg, rgbChannels);for (int c = 0; c < 3; c++){rgbChannels[c].convertTo(rgbChannels[c], CV_32FC1, 1.0 / (255.0 * 0.5), -1.0);}const int image_area = this->inpHeight * this->inpWidth;this->input_image.resize(3 * image_area);size_t single_chn_size = image_area * sizeof(float);memcpy(this->input_image.data(), (float*)rgbChannels[0].data, single_chn_size);memcpy(this->input_image.data() + image_area, (float*)rgbChannels[1].data, single_chn_size);memcpy(this->input_image.data() + image_area * 2, (float*)rgbChannels[2].data, single_chn_size);
}Mat NighttimeDehaze::predict(Mat srcimg)
{const int srch = srcimg.rows;const int srcw = srcimg.cols;this->preprocess(srcimg);std::vector<int64_t> input_img_shape = { 1, 3, this->inpHeight, this->inpWidth };Value input_tensor_ = Value::CreateTensor<float>(memory_info_handler, this->input_image.data(), this->input_image.size(), input_img_shape.data(), input_img_shape.size());Ort::RunOptions runOptions;vector<Value> ort_outputs = this->ort_session->Run(runOptions, this->input_names.data(), &input_tensor_, 1, this->output_names.data(), output_names.size());/nighttime_dehaze_realnight_Nx3xHxW.onnx和nighttime_dehaze_realnight_1x3xHxW.onnx在run函數(shù)這里會(huì)出錯(cuò)float* pdata = ort_outputs[0].GetTensorMutableData<float>();std::vector<int64_t> outs_shape = ort_outputs[0].GetTensorTypeAndShapeInfo().GetShape();const int out_h = outs_shape[2];const int out_w = outs_shape[3];const int channel_step = out_h * out_w;Mat rmat(out_h, out_w, CV_32FC1, pdata);Mat gmat(out_h, out_w, CV_32FC1, pdata + channel_step);Mat bmat(out_h, out_w, CV_32FC1, pdata + 2 * channel_step);vector<Mat> channel_mats(3);channel_mats[0] = bmat;channel_mats[1] = gmat;channel_mats[2] = rmat;Mat dstimg;merge(channel_mats, dstimg);resize(dstimg, dstimg, cv::Size(srcw, srch));dstimg.convertTo(dstimg, CV_8UC3);return dstimg;
}
python部署:
import argparse
import cv2
import onnxruntime
import numpy as npclass nighttime_dehaze:def __init__(self, modelpath):# Initialize modelself.onnx_session = onnxruntime.InferenceSession(modelpath)self.input_name = self.onnx_session.get_inputs()[0].name_, _, self.input_height, self.input_width = self.onnx_session.get_inputs()[0].shapedef detect(self, image):input_image = cv2.resize(cv2.cvtColor(image, cv2.COLOR_BGR2RGB), dsize=(self.input_width, self.input_height))input_image = (input_image.astype(np.float32) / 255.0 - 0.5) / 0.5input_image = input_image.transpose(2, 0, 1)input_image = np.expand_dims(input_image, axis=0)result = self.onnx_session.run(None, {self.input_name: input_image})###nighttime_dehaze_realnight_Nx3xHxW.onnx和nighttime_dehaze_realnight_1x3xHxW.onnx在run函數(shù)這里會(huì)出錯(cuò)# Post process:squeeze, RGB->BGR, Transpose, uint8 castoutput_image = np.squeeze(result[0])output_image = output_image.transpose(1, 2, 0)output_image = cv2.resize(output_image, (image.shape[1], image.shape[0]))output_image = cv2.cvtColor(output_image.astype(np.uint8), cv2.COLOR_RGB2BGR)return output_imageif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--imgpath', type=str,default='n1.jpg', help="image path")parser.add_argument('--modelpath', type=str,default='models/nighttime_dehaze_720x1280.onnx', help="onnx path")args = parser.parse_args()mynet = nighttime_dehaze(args.modelpath)srcimg = cv2.imread(args.imgpath)dstimg = mynet.detect(srcimg)if srcimg.shape[0] > srcimg.shape[1]:boundimg = np.zeros((10, srcimg.shape[1], 3), dtype=srcimg.dtype)+255 ###中間分開(kāi)原圖和結(jié)果combined_img = np.vstack([srcimg, boundimg, dstimg])else:boundimg = np.zeros((srcimg.shape[0], 10, 3), dtype=srcimg.dtype)+255combined_img = np.hstack([srcimg, boundimg, dstimg])winName = 'Deep Learning in onnxruntime'cv2.namedWindow(winName, 0)cv2.imshow(winName, combined_img) ###原圖和結(jié)果圖也可以分開(kāi)窗口顯示cv2.waitKey(0)cv2.destroyAllWindows()
6. 結(jié)論
在本文中,該算法提出了一種新穎的夜間可見(jiàn)性增強(qiáng)框架,同時(shí)解決了光暈和低光條件問(wèn)題。該算法的框架包括三個(gè)核心思想:APSF引導(dǎo)的光暈渲染、梯度自適應(yīng)卷積和注意力引導(dǎo)的低光增強(qiáng)。該算法的框架通過(guò)從APSF引導(dǎo)的光暈渲染數(shù)據(jù)中學(xué)習(xí)來(lái)抑制光暈效應(yīng)。由于該算法的APSF引導(dǎo)的光暈渲染,該算法允許使用半監(jiān)督方法來(lái)優(yōu)化該算法的網(wǎng)絡(luò),從而處理不同光源中的光暈效應(yīng)。該算法提出的梯度自適應(yīng)卷積用于從夜間霧霾圖像中捕捉邊緣或紋理。得益于捕獲的邊緣或紋理,該算法的框架有效地保留了結(jié)構(gòu)細(xì)節(jié)。該算法的低光區(qū)域增強(qiáng)通過(guò)注意力圖提高了暗或過(guò)度抑制區(qū)域的強(qiáng)度。定量和定性實(shí)驗(yàn)表明,該算法的方法實(shí)現(xiàn)了顯著的性能提升。此外,消融研究證明了每個(gè)核心思想的有效性。處理具有多樣化領(lǐng)域偏移的場(chǎng)景[99]將成為該算法未來(lái)研究的焦點(diǎn)。