暗光下CMOS成像的噪聲形成模型
【前言】
以下解讀與見解均為我的個人理解,要是我有哪裡曲解了,造成了不必要的麻煩,可以聯絡我刪除文章,也可以在評論區留言,我進行修改。也歡迎大家在評論區進行交流,要是有什麼有意思的paper也可以留言,我抽空看一下也可以寫一些。正文內容中的“作者”二字,均是指paper的作者,我的個人觀點會顯式的“我”註明。而文中的圖基本都是從paper上cv過來的,我也沒本事重做這麼多的圖,況且作者的圖弄得還挺好看的。
Paper基本資訊
題目:
A Physics-based Noise Formation Model for Extreme Low-light Raw Denoising
作者:
Kaixuan Wei, Ying Fu, Jiaolong Yang, Hua Huang
連結:
https://
openaccess。thecvf。com/c
ontent_CVPR_2020/papers/Wei_A_Physics-Based_Noise_Formation_Model_for_Extreme_Low-Light_Raw_Denoising_CVPR_2020_paper。pdf
Github:
https://
github。com/Vandermode/E
LD
總結:
詳細分析了CMOS成像過程中的噪聲源並進行精確建模得到了較真實的噪聲形成模型
Paper內容介紹
【基本介紹】
暗光降噪其實跟我們以前經常寫的暗光增強其實挺像的,或者可以說是差不多。傳統的也是用連拍影象進行對齊融合增強,而深度學習工作基本上都是用合成數據來訓練網路(跟暗光增強一樣,真實的成對資料難以收集)。但這樣的話,合成數據時所用的噪聲模型的好壞,就決定了最後增強網路的好壞。目前一般用的是異方差高斯噪聲模型,但它缺點比較多,所以作者們就提出了一個不一樣的噪聲模型。
上圖是成像的時候光子經歷的幾個階段,這裡中間有很多的噪聲源,作者就提出了一種基於物理的噪聲形成模型,能夠對上述這些細粒度的噪聲進行建模,利用CMOS的特性來匹配噪聲形成的物理特性,以達到生成跟真實資料一樣的合成數據的目的。
【相關工作】
傳統演算法:研究影象先驗知識
現代演算法:深度學習
真實資料
Noise2Noise
Noise2Void
合成數據
用異方差高斯噪聲模型表徵感測器的噪聲特性
Noiseflow提出了一種新的噪聲模型,考慮了動態條紋噪聲、顏色通道異質性、裁剪影響等因素
缺點:對噪聲建模過於簡單,無法較好的描述CMOS的噪聲特性
【噪聲模型】
這裡我們用公式表示感測器的影象模型:
其中
是最後的數字影象,
是跟場景照射成正比的光電子數,
是模擬與數字增益組成的系統增益,
是所有噪聲源的總和。在極暗光下,
其實是很難準確建模表述的,因此作者們選擇使用神經網路進行隱式學習。整體分析的流程其實還是跟上圖那個流程一起,看那個圖就得了。
【感測器原始影象的形成】
作者們考慮的是CMOS,不是CCD!!!
A。 噪聲分析
1. 光子到電子的轉換
:這裡分析還挺講究,由於光的粒子性,光打到感測器,由光電效應可知能產生正比於光強的光電子,但又由於光的波動性,最後的電子數又是不確定的,作者這裡就加了個泊松分佈來描述這個不確定性:
其中
是光子散粒噪聲,
是泊松分佈。這裡一般來說還有光不均勻響應和暗電流帶來的噪聲。但現在工藝比較發達,作者假設光均勻響應,暗電流噪聲很小,就把暗電流噪聲
合併到後面的讀取噪聲
來處理了。
2. 電子到電壓的轉換
:上一步產生的光電子,會在感測器裡面進行積分、放大,在曝光結束的時候作為電荷/電壓進行讀出。所以這部分的噪聲就取決於電路的噪聲了。這裡作者們考慮了熱噪聲
、源跟隨噪聲
、帶狀噪聲
。帶狀噪聲後面再討論,這裡先合併一下提到的一些噪聲,讀取噪聲
。這個一般來說就用高斯分佈來表示了,但對實際資料分析可知,實際資料有較嚴重的長尾分佈,所以作者改用TL分佈描述:
,
和
是形狀和尺度引數。帶狀噪聲有水平和垂直兩種,實際資料垂直線噪聲比較少,就不考慮了,就從具有引數
的零均值高斯分佈隨機取樣個值來模擬水平線噪聲
。
3. 電壓到數字的轉換
:這一部分就是用ADC讀取上一步的電壓,進行離散編碼了。這裡同樣會引入量化噪聲
:
,其中
是
的均勻分佈,
是量化步長。
4. 總結
:總噪聲
,其中
、
、
、
、
分別是增益、光子散粒噪聲、讀取噪聲、行噪聲、量化噪聲。
B。 噪聲評估
噪聲引數估計
:這裡比較有意思,作者們是實際收集了兩類資料來估計
和其他噪聲引數的。
圓頂平場幀:均勻照亮感測器下拍攝的影象。用這些影象來計算
。然後將
還原回
,對
施加泊松分佈,再轉回去
,這就模擬出來了光子散粒噪聲了。
零秒暗場幀:無光環境下用最短曝光時間拍攝的影象。對這些資料混合一下,就可以得到讀取噪聲
,對資料做一下傅立葉變換,就能分析出行噪聲和列噪聲了。這裡看上面第一個圖,是兩個不同的CMOS採集資料的傅立葉變換結果,垂直方向的線很明顯,所以行噪聲較為明顯,這也就是為什麼不管列噪聲的原因了。作者這裡做了Shapiro-Wilk檢驗,確定了可以使用正態分佈來估計。這裡將原始幀減去行噪聲後,可以再用一個模型來估計剩餘的讀取噪聲的分佈。這裡看第二個圖,最左邊是高斯分佈的機率圖,但是長尾比較嚴重,因此作者們做了中間的PPCC圖來在TL分佈族裡面找模型,最後邊則是擬合後的TL分佈,這個還是比高斯分佈要好的。
2。
建模聯合引數
:作者們用不同ISO下計算出來的引數樣本推斷
和
的聯合分佈。這裡作者用線性最小二乘法來找最佳擬合線,如上圖所示。最後是從藍色的區域裡面取樣噪聲引數的,具體取樣演算法我就不寫了,大家感興趣的能去找原文看看。
3。
噪聲資料合成
:這個沒什麼特別,就是弄一堆乾淨的影象,先除一個暗光因子,模擬暗光。然後生成噪聲並施加上去,這時候再把暗光因子乘回去,把亮區突出一下,最後歸一化一下影象就完事了。
【ELD資料集】
這裡就是作者們收集了2個暗光因子、3個ISO、4個相機、10個室內場景共240張影象,這個沒什麼好說的,就是個人力活。
【實驗】
這裡要說一下,這個工作是提出的模型是造資料的模型,所以作者們就直接抄了一個以前的去噪模型來在他們的資料上進行訓練。我們先來看一組在SID的資料集上訓練的結果,SID這個工作我們以前也寫過,感興趣的可以去看看。
這裡簡單說明一下,G是同方差高斯噪聲模型的結果、G+P是異方差高斯噪聲模型的結果,Noise2Noise用的是真實的噪聲影象,paired read data就是如同名字所說的,用的是成對的真實訓練資料的結果。下面我們再來看下在作者們提出的ELD資料集上的表現:
可以看到,作者們的這個噪聲模型還是挺不錯的,基於此訓練的模型都能有真實資料的效能了。
【後話】
其實這個工作是比較早了的,20年的CVPR,估摸著是19年的工作了,工作沒有侷限在CV卷模型的領域,而且跑出去玩資料去了,整個工作其實可以說跟深度學習關係不大。但我感覺,這類工作還是不太主流,畢竟你比人家內卷模型的low level任務還要再低一點去到資料level,我估摸著可能大家現在更熱衷於去玩半監督,無監督之類的了吧。而且作者的這個工作有個特點就是需要對不同的CMOS進行校準,這個其實很大程度上侷限了他的適用性,除非真的能比普通的工作好非常多,可能大家才會選擇去用吧。