天天看點

深入了解去噪論文——FFDNet和CBDNet中noise level與噪聲方差之間的關系探索問題來源一、基礎知識和生成AWGN步驟二、從MATLAB生成含AWGN的noisy image入手分析三、小結

知乎同名賬号同步釋出。如有錯誤,歡迎指正。

目錄

  • 問題來源
  • 一、基礎知識和生成AWGN步驟
  • 二、從MATLAB生成含AWGN的noisy image入手分析
    • 二.0、先放結論
  • 三、小結

問題來源

讀這兩篇文章的時候,發現文中AWGN(加性高斯白噪聲)的方差用σ²表示,noise level用σ表示,符号使用似乎出現了沖突;

又發現作者預設已知噪聲模型 N ( 0 , σ 2 ) N(0, \sigma^2) N(0,σ2),生成的含噪聲圖像的ground-truth的noise level似乎也随之确定,一切都在暗示AWGN的方差和其noise level有千絲萬縷的關系。

一、基礎知識和生成AWGN步驟

引用這篇文章對matlab生成AWGN的講解,補充一些基礎知識:

awgn(x,snr,’measured’,'linear’)

的作用是向x加入信噪比為

snr

的AWGN。所謂信噪比,公式如下:

s n r = s i g P o w e r / n o i s e P o w e r snr = sigPower/noisePower snr=sigPower/noisePower

即信号的強度/噪聲的強度,或者信号功率/噪聲功率。

sigPower的計算方法隻需要看matlab代碼就一目了然:

sigPower = sum(abs(sig(: )).^2)/length(sig(: ))

.^2

指的是對矩陣每個元素都求平方,上述分母起到規範化的作用,

sig(: )

表示信号)

awgn()

函數的第一步,就是估計信号x的強度sigPower,然後計算出noisePower:

n o i s e P o w e r = s i g P o w e r / s n r noisePower = sigPower / snr noisePower=sigPower/snr

假如說要生成的噪聲的size是[1000, 1],那麼最終要添加的噪聲信号就是:

sqrt(noisePower) * randn(n, 1)

其中randn生成的是 N ( 0 , 1 ) N(0, 1) N(0,1)的噪聲,那麼這個噪聲信号服從的分布就是:

N ( 0 , n o i s e P o w e r ) N(0, noisePower) N(0,noisePower)

是以網上有篇文章,文中一句話說:

對于高斯噪聲,其方差和功率(噪聲強度)是一樣的

二、從MATLAB生成含AWGN的noisy image入手分析

二.0、先放結論

noisePower就是方差σ²,σ就是paper中的noise level。

取自FFDNet paper:對于clean image x,生成noise level為σ的noisy y:

imnoise(x, ’gaussian’, 0, (σ/255)²)

作用就是向x中加入高斯噪聲,這個噪聲服從的分布為:

N ( 0 , ( σ / 255 ) 2 ) N(0, (\sigma/255)^2) N(0,(σ/255)2)

當然,分母的255可能是因為将原始圖檔的像素值縮放到了0-1之間,是以noise level也需要除以255。如果沒有這樣做,那麼顯然噪聲服從的分布就是:

N ( 0 , σ 2 ) N(0, \sigma^2) N(0,σ2)

那麼顯然,結合目前搜集到的資訊,noisePower就是方差σ²,σ就是paper中的noise level。再看一個FFDNet中的片段佐證這個觀點:

To synthesize spatially variant AWGN, we first generate an AWGN image v1 with unit standard deviation and a noise level map M of the same size. Then, element-wise multiplication is applied on v1 and M to produce the spatially variant AWGN, i.e., v = v1 ⊙ M.

上述noise level map M就是由不同位置的noise level σ組合而成的map。先生成v1,它擁有機關标準差,然後讓M(M中元素為noise level σ)和它做element-wise的相乘,顯然得到的v就擁有方差σ²,而論文稱σ為noise level,不就和上面的觀點對應上了麼。

再看CBDNet中所提到:

For a batch of real images, due to the unavailability of ground-truth noise level map, only Lrec and LT V are considered in training.

對于真實資料,是無法得到ground-truth的noise level map的,我當時很疑惑的點在于:對于合成資料,也沒有辦法得到ground-truth的noise level map,為什麼paper似乎在預設這個是能夠得到的?然而實際上,paper中提到了合成資料中噪聲服從的分布:

N ( 0 , σ 2 ( L ) ) N(0, \sigma^2(L)) N(0,σ2(L))

其中 σ 2 ( L ) = L ⋅ σ s 2 + σ c 2 \sigma^2(L) = L · \sigma^2_s+\sigma^2_c σ2(L)=L⋅σs2​+σc2​,(L是irradiance image)。

這樣,合成資料的ground-truth的noise level map不就直接是 σ ( L ) \sigma(L) σ(L)了麼(如果本文之前的推斷都沒問題的話)。

三、小結

  • 确定的事情:

    對于高斯噪聲,方差σ²就是噪聲強度noisePower;

    如果已知噪聲服從的高斯分布,那麼對于根據這個分布+clean image合成的noisy image,可以直接得出其ground-truth的noise level or noise level map。

  • 不太确定的事情:

    另外讀到這裡你肯定發現了論文中的noise level和本文中的noisePower不是一個東西,網上沒有找到兩者特别明顯的概念差別,是以noise level可能是作者對σ起的專門的稱謂,這個稱謂是否為圖像去噪領域預設叫法,我還不太清楚。

深入了解去噪論文——FFDNet和CBDNet中noise level與噪聲方差之間的關系探索問題來源一、基礎知識和生成AWGN步驟二、從MATLAB生成含AWGN的noisy image入手分析三、小結

繼續閱讀