知乎同名账号同步发布。如有错误,欢迎指正。
问题来源
读这两篇文章的时候,发现文中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可能是作者对σ起的专门的称谓,这个称谓是否为图像去噪领域默认叫法,我还不太清楚。