數碼相機成像時的噪聲模型與標定

點擊下方AI算法與圖像處理”,一起進步!

重磅乾貨,第一時間送達


如果你對攝影有一點基礎的瞭解,可能你經常知道的常識是拍照時,在保證圖像曝光合適的情況下要儘量用低ISO,因爲高ISO會帶來高噪聲,就像下圖所示

另外,現代單反的傳感器一般具有一定的動態範圍,很多單反都可以達到2000:1的動態範圍(參見27. HDR - 高動態範圍成像),當我們獲取RAW圖像後,可以自己來做想要的色調映射,而不是讓相機內的圖像處理器來做。但此時我們通常會發現,如果把圖像的亮度映射的更亮時,圖像上的噪聲也加強了,如下圖所示,左上角是相機不開HDR時拍攝並保存的一張圖像,左下是做某種色調映射或亮度拉伸後得到的圖像。右圖則是局部細節,可以看到噪聲非常明顯。

這就讓我們不得不問幾個問題:

  1. 爲什麼高ISO時圖像通常會有更大的噪聲呢?

  2. 爲什麼對單幀圖像做色調映射會帶來更大的噪聲呢?

  3. 爲什麼我們之前看到的多幀融合來做HDR時,不會有這麼明顯的噪聲呢?

今天我想通過這篇文章,爲你介紹一種基礎的成像過程中的噪聲模型,以及獲取這個模型中的各項參數的方法。通過這些介紹,我們能部分回答這些問題。

一. 回顧圖像的生成過程

在2. 從入射光到JPEG相片-數碼相機內部的祕密中,我們看到了成像系統是如何把入射光變成最終的JPEG圖像的:

那麼在這個過程中,噪聲是哪些地方引入的呢?

實際上,真正引入噪聲的地方就是上面的綠色框的部分

讓我們將這一部分進一步拆開看看,噪聲到底是如何引入的,如下圖所示

這裏面場景的光輻射通量是Φ,它照射到傳感器上通過光電效應產生電子,與此同時,傳感器自身因爲溫度等因素的影響會釋放出一些電子,它們構成了暗電流D。光輻射和暗電流共同作用到像素上,產生了模擬電壓L。這些電壓在模擬放大器的作用下會變成模擬電壓G,後者進入到模數轉換器後,最終變成了數字信號。

Tips: 輻射通量與光源的光亮度正相關,而光亮度是表示發光面明亮程度的,指發光表面在指定方向的發光強度與垂直且指定方向的發光面的面積之比,單位是坎德拉/平方米(見27. HDR - 高動態範圍成像)

如上圖所示,這裏面有3處都會引入噪聲,首先是在傳感器部分會有光子噪聲和暗噪聲,接着在模擬放大器部分會產生讀出噪聲,最後在模數轉換器部分會有所謂的ADC噪聲。你可能會問這些噪聲是什麼意思,它們又是如何產生的。不着急,我們一個個的來介紹。

二. 圖像生成過程中的噪聲

2.1 光子噪聲

在對光電效應和傳感器特性不瞭解的人看來,當傳感器像素受到恆定亮度的光源照射時,每個單位時間接收到的光子的數量是恆定的,因此其通過光電效應激發出的電子也是恆定的。

然而,像素接受到光子,就像下雨天你站在室外淋雨一樣,滴到你身上的雨滴的數量以及像素捕獲到的光子數量都是隨機量。

這種隨機量圍繞着某個均值波動,並符合泊松分佈。傳感器像素在單位時間接受的光子數量的這種波動性在圖像上表現爲可見的噪聲,也因此它被稱爲光子散粒噪聲,或泊松噪聲

泊松分佈隨機量有一個有趣的特點,即其平均值和方差是一致的,下面是這種隨機量在不同的均值情況下的概率函數示意圖,我們可以看到當它的均值λ越大時,其方差越大,表現爲曲線覆蓋寬度越寬。

回到光子噪聲,我們可以認爲單個像素在曝光期間接收的光子平均數量與曝光時間及光輻射通量φ成正比,因此可以表示爲下面的公式,其中α是一個比例常數, t是曝光時間

光子噪聲有兩個典型的特點:

  • 曝光時間越長,或者場景輻照度越強,平均來說捕獲到的光子數量總體越大,其波動也越大,即光子噪聲絕對值越大

  • 光子數量越多,噪聲絕對值越大,但在圖像中反而越不明顯。這一點在我們後面講信噪比時還會再仔細說明,但現在可以通過下圖得到一個直觀的印象,我們可以看到,當畫面較暗時單個像素捕獲的光子平均數量較少,其波動也較少。隨着圖像變亮,光子噪聲增加變得明顯。但當圖像繼續變亮時,雖然光子噪聲的幅值變大了,但從肉眼上看卻變得不明顯了。你現在可以在心中留一個問題,我們稍後來看看怎麼回事。

2.2 暗噪聲

我們都知道光電效應會導致傳感器激發出光電子,然而傳感器即便在沒有接受到光子時,因爲溫度的影響也會釋放出電子。在曝光時間內,這種電子的數量也是一個符合泊松分佈的隨機量,我們可以將其表示爲下面的公式,其中t是曝光時間,D是當前溫度下單位時間內的熱電子的數量):

這個隨機量也會導致圖像上的噪聲,我們稱其爲熱噪聲。它有以下的特點:

  • 它與溫度成指數關係,溫度每升高6攝氏度,暗噪聲的均值擴大一倍

  • 它與曝光時間成線性關係,曝光時間越長,暗噪聲越強。

在天文觀測一類的長曝光應用中,暗噪聲影響特別大。如果要消除暗噪聲,最基礎的方法是

  • 降低傳感器溫度,比如超低溫環境下放置傳感器(例如太空中)

  • 或者控制曝光時間

  • 提前測量出暗噪聲圖像,並在最終圖像中減去暗噪聲圖像,這一點我們稍後來看看如何做到

由於光子噪聲和暗噪聲的存在,傳感器像素在進入放大器之前的輸出電壓L也是一個隨機量。由於兩個泊松分佈之和也是泊松分佈,且其均值是兩個泊松分佈的均值之和,因此L可以表示爲:

2.3 讀出噪聲和ADC噪聲

如前所述,像素在光子和暗電流的影響下釋放出電子,曝光時間內累積的電子被轉換爲與其數量成比例的電壓。然後該電壓被放大成與相機中設置的ISO增益成比例的量,並在模數轉換器(ADC)中數字化。

代表所有像素的光子計數的數字信號構成圖像的原始數據(原始單元有時被稱爲模數單元ADU,或數據號DN)。我們將這個數字稱爲像素的原始值。在理想情況下,記錄在原始數據中的數字應該與光子計數成正比。在現實世界中,原始數字並不精確地反映光子計數。信號處理鏈中的每個電子電路組件--從傳感器讀出、ISO增益到ADC數字化--都會受到電壓波動的影響,導致原始值偏離與光子計數成正比的理想值。由信號處理電子設備引起的原始值波動構成了傳感器的讀取噪聲和ADC噪聲,其中ADC噪聲還包括了因爲從連續的電壓值量化爲離散的整數值的過程中的量化誤差。

三. 包含了噪聲信息的圖像生成模型

考慮到前一節講的各種噪聲的存在,我們將放大器的輸出電壓G表示爲下面的公式,其中  是讀出噪聲,而g則是一個和ISO相關的增益比例。正如你所看到的,放大器會同時放大原始電壓L,以及讀出噪聲。

而經過ADC後的輸出數字信號可以表示爲:

也就是說

這裏面讀出噪聲和ADC噪聲都符合高斯分佈,而原始電壓則符合泊松分佈:

這個數字信號I的均值和方差也很容易可以計算出來:

這裏面,由於讀出噪聲和ADC噪聲都符合高斯分佈,我們還可以將整個成像過程簡化爲下面的"仿射噪聲模型":

其中

被稱爲加性噪聲,它是兩個高斯噪聲之和,它也是高斯噪聲,因此有

我將前述所有的信息總結到下面圖中:

我們從這個模型中可以觀察到下面的信息:

  • 因爲暗噪聲的存在,像素的原始值並不絕對反映場景的亮度

  • 拍攝多幅圖像並取均值的方法可以消除讀出噪聲和ADC噪聲,但無法去掉暗噪聲

  • 爲了去除暗噪聲,需要專門測量出暗噪聲,並從最終信號中減去

關於噪聲還能看到:

  • 場景很亮時,光子噪聲起主導作用

  • 場景很暗時,加性噪聲起主導作用

  • 最重要的是,由於光子噪聲和輸入信號本身綁定在一起,所以無法消除

  • 低ISO值時,ADC噪聲會更突出,而高ISO值時,光子噪聲和讀出噪聲更突出

  • 曝光時間越長,暗噪聲影響越大

四. 信噪比

現在我們有了新的問題,由於光子噪聲和圖像的曝光時間及光輻射正相關,那豈不是意味着圖像越亮時,噪聲越大?那爲何我們在下圖中看到的不是這樣的呢?

這就牽涉到一個重要的概念——信噪比。

我們知道,信號的方差反映了它的噪聲的絕對大小(的平方)

而信噪比則反映了噪聲相比信號的相對大小,當噪聲減小時方差變小,而信噪比減大

現在回到傳感器信號,如果我們不考慮暗噪聲的話,前面講的成像模型的噪聲和信噪比可以表示爲:

觀察一下信噪比公式,我們會發現如果曝光時間t很大,或者場景很亮時,我們可以忽略掉加性噪聲部分,此時

也就是說,這種情況下像素值越大,信噪比也越大,噪聲在圖像中看起來越不明顯——這就回答了我們剛剛的疑問。

反過來講,如果曝光時間t很小,或者場景很暗時,光噪可以忽略,加性噪聲佔主導,此時

可以看到,如果圖像亮度保持不變(即SNR的分子不變時),ISO越大,g越大,SNR越低,噪聲越明顯——這就回答了我們本文開始的問題,爲什麼高ISO值通常有更大的噪聲呢,因爲讀出噪聲被放大了:

那麼,在我們對下面的RAW圖像進行色調映射,拉伸暗處細節時,噪聲加強也是很自然的了,因爲此時暗處噪聲的絕對值被放大了,而暗處幾乎沒有捕獲到有效的信號:

五. 各種噪聲的標定

如果我們能提前測量,或者標定出上述成像模型中的各種噪聲,就有機會在最終圖像中消除它們,從而得到乾淨的圖像。這一節我們看看如何做到這點。

首先看看,系統噪聲模型中的哪些參數是我們需要測量的

從上圖可見,暗電流D, 讀出噪聲  , ADC噪聲  , 以及增益尺度k,都是我們需要知道的。那麼,如何獲取這些量呢?

首先我們看看如何標定暗噪聲。

5.1 暗噪聲

根據仿射噪聲模型,加性噪聲的均值爲0

因此如果我們把相機鏡頭遮擋住,並在這個狀態下拍攝大量的圖像,再對這些圖像取均值,相當於在令Φ=0,於是這個均值圖像相當於:

雖然此刻我們並不知道g的具體值(它是一個跟ISO成正比的常數),但我們由此就知道了在當前ISO設定下,一定曝光時間的暗幀。

這意味着什麼?意味着我們不必求出暗電流D的具體值,只需要在同等曝光時間和ISO設定的圖像中減去這個暗幀,就可以消除圖像中的暗噪聲。爲了消除在不同的ISO設定下的暗噪聲,我們需要做的就是在相機的不同ISO設置下分別標定出當前的暗幀即可。由於曝光時間可以任意設置,我們很難針對每個不同的曝光時間去標定當前的暗幀。但可以用暗噪聲大小與曝光時長成正比的原理,來進行一定的比例補償即可。

這樣,消除掉暗噪聲的相機噪聲模型就變成了這樣

5.2 加性噪聲

接下來的問題就是如何標定加性噪聲了。

觀察一下此時的圖像噪聲式子:

這意味着:

可以看到圖像像素的方差與像素的均值呈現出來了一種線性關係。於是,我們可以在特定的增益g下,拍攝大量的灰階圖像,如下圖所示。

然後對每張圖像,我們首先減去當前的暗幀(需要按照曝光時長進行補償),然後求取每個像素的均值的方差。此時如果我們把大量像素的均值和方差畫在下面這張圖上,可以看到它們幾乎形成了一條直線,並且增益g是這條直線的斜率,而方差  則是這條直線的截距。通過採樣大量不同均值的像素點的信息,可以很容易的擬合出這條直線,並求得g和對應的加性噪聲方差  (這也是爲何要用上面的灰階圖卡的原因)

你可能會問,我們有沒有辦法分離讀出噪聲和ADC噪聲呢?當然是有辦法的,根據下式

因此,我們可以在不同的ISO設置(也即是不同的g)下,多重複幾次上述實驗,即可獲得足夠的數據,擬合出  以及 

六. 總結

今天這篇文章,我介紹了一個簡化的相機成像的噪聲模型,其中包括了

  • 暗噪聲

  • 光子噪聲

  • 讀出噪聲

  • ADC噪聲

我們看到了信噪比是如何計算的,這些噪聲又是如何影響信噪比的,對實際圖像的影響又是如何的。我們還看得,通過簡單的方式,就可以提前標定出暗噪聲、讀出噪聲以及ADC噪聲。

在這裏,我必須強調一下,前面描述的過程的前提假設是每個像素的噪聲特性以及對原始光信號的響應都是一致的。然而,事實上傳感器中各個像素因爲生產製造、材質本身的非均勻等等各方面原因,會導致傳感器各個位置上的噪聲參數都是不同的。也因此,上面介紹的噪聲模型只是一種近似,如果要精確的標定成像系統的各種噪聲,還需要更多的理解噪聲模型。在這方面,有更多的資料做了更加準確和深入的講解,我也希望之後能夠用比較清晰易懂的文字再加以詳解。先給出一些重要的參考資料:

  • Noise, Dynamic Range and Bit Depth in Digital SLRs

  • 數字圖像傳感器的噪聲模型及標定

七. 參考資料

本文基本上是對如下資料的中文講解,如果有講得不清楚的地方,也是我自己的理解不足,與原課程老師無關。

CMU 2020 Fall Computational Photography Course 15-463, Lecture 7

在這個過程中,還參考了前面說的兩份資料:

Noise, Dynamic Range and Bit Depth in Digital SLRs

數字圖像傳感器的噪聲模型及標定


努力分享優質的計算機視覺相關內容,歡迎關注:
     
        
        
        
個人微信(如果沒有備註不拉羣!
請註明: 地區+學校/企業+研究方向+暱稱



下載1:何愷明頂會分享


AI算法與圖像處理」公衆號後臺回覆:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經典工作的總結分析


下載2:終身受益的編程指南:Google編程風格指南


AI算法與圖像處理」公衆號後臺回覆:c++,即可下載。歷經十年考驗,最權威的編程規範!



   
      
      
      
下載3 CVPR2021

AI算法與圖像處公衆號後臺回覆: CVPR 即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文



本文分享自微信公衆號 - AI算法與圖像處理(AI_study)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章