学习视频:
鲁鹏-计算机视觉与深度学习
同系列往期笔记:
【学习笔记】计算机视觉与深度学习(1.线性分类器)
【学习笔记】计算机视觉与深度学习(2.全连接神经网络)
1 卷积
噪声点:该点的像素和周围像素点的差异很大,如图中左图的253。
通过以该点为中心的9个点的像素值取均值来替代该点原本的像素值。
加权的权值
1
9
\frac{1}{9}
91,我们通常存储在一个上面这样的模板当中,我们称这个模板为卷积核,也称滤波核。
下面的蓝色是输入的图像,上面的绿色是卷积后得到的输出图像。每一个像素点都有一个卷积核,通过卷积核得到输出的像素值。
令
F
F
F为图像,
H
H
H为卷积核,
F
F
F与
H
H
H的卷积即为
R
=
F
∗
H
R=F*H
R=F∗H。
R
i
j
=
∑
u
,
v
H
i
−
u
,
j
−
v
F
u
,
v
R_{ij}=\displaystyle\sum\limits_{u,v} H_{i-u,j-v}F_{u,v}
Rij=u,v∑Hi−u,j−vFu,v
进行卷积操作前,我们要先对卷积核进行180°翻转。不过通常我们使用卷积时,卷积核都是对称的,所以后续不会强调翻转操作。
公式略抽象,举例说明。令:
F
=
[
a
0
,
0
a
0
,
1
a
0
,
2
a
1
,
0
a
1
,
1
a
1
,
2
a
2
,
0
a
2
,
1
a
2
,
2
]
H
=
[
b
−
1
,
−
1
b
−
1
,
0
b
−
1
,
1
b
0
,
−
1
b
0
,
0
b
0
,
1
b
1
,
−
1
b
1
,
0
b
1
,
1
]
F= \begin{bmatrix} a_{0,0} & a_{0,1} & a_{0,2} \\ a_{1,0} & a_{1,1} & a_{1,2} \\ a_{2,0} & a_{2,1} & a_{2,2} \end{bmatrix} \ \ \ H= \begin{bmatrix} b_{-1,-1} & b_{-1,0} & b_{-1,1} \\ b_{0,-1} & b_{0,0} & b_{0,1} \\ b_{1,-1} & b_{1,0} & b_{1,1} \end{bmatrix}
F=
a0,0a1,0a2,0a0,1a1,1a2,1a0,2a1,2a2,2
H=
b−1,−1b0,−1b1,−1b−1,0b0,0b1,0b−1,1b0,1b1,1
卷积后可以得到:
R i j = a 0 , 0 b 1 , 1 + a 0 , 1 b 1 , 0 + a 0 , 2 b 1 , − 1 + a 1 , 0 b 0 , 1 + a 1 , 1 b 0 , 0 + a 1 , 2 b 0 , − 1 + a 2 , 0 b − 1 , 1 + a 2 , 1 b − 1 , 0 + a 2 , 2 b − 1 , − 1 \begin{aligned} R_{ij}&=a_{0,0}b_{1,1}+a_{0,1}b_{1,0}+a_{0,2}b_{1,-1} \\ &+a_{1,0}b_{0,1}+a_{1,1}b_{0,0}+a_{1,2}b_{0,-1} \\ &+a_{2,0}b_{-1,1}+a_{2,1}b_{-1,0}+a_{2,2}b_{-1,-1} \end{aligned} Rij=a0,0b1,1+a0,1b1,0+a0,2b1,−1+a1,0b0,1+a1,1b0,0+a1,2b0,−1+a2,0b−1,1+a2,1b−1,0+a2,2b−1,−1
综上,通过这个公式,我们就可以使用 H H H将 F F F卷积到 R R R域上去。
卷积示例
锐化原理见下图
更好地理解卷积所起到的滤波器的效果,可以参考这个网站:
Image-Kernels
卷积的性质
令
f
i
f_i
fi为卷积前的图像,
f
i
l
t
e
r
(
f
i
)
filter(f_i)
filter(fi)为卷积后的图像,
s
h
i
f
t
(
f
i
)
shift(f_i)
shift(fi)为平移后的图像。
①叠加性
f
i
l
t
e
r
(
f
1
+
f
2
)
=
f
i
l
t
e
r
(
f
1
)
+
f
i
l
t
e
r
(
f
2
)
filter(f_1+f_2)=filter(f_1)+filter(f_2)
filter(f1+f2)=filter(f1)+filter(f2)
②平移不变性(平移以后卷积和卷积以后平移结果不变)
f
i
l
t
e
r
(
s
h
i
f
t
(
f
1
)
)
=
s
h
i
f
t
(
f
i
l
t
e
r
(
f
1
)
)
filter(shift(f_1))=shift(filter(f_1))
filter(shift(f1))=shift(filter(f1))
2 边界填充
求边界位置的卷积时可以发现我们缺少像素信息,于是我们需要在周围补上一些像素。
有多种填充方式:
①常数填充(最常用,如zero padding)
②拉伸(把边界的值填到边界)
③镜像(把原图边界作为对称面,根据原图数据对称填充)
3 高斯卷积核
平均卷积核存在的问题
会发现,卷积后的图像产生了一些水平和竖直方向的条状,称为振铃。
解决方法:根据邻域像素与中心的远近程度分配权重。
G
σ
=
1
2
π
σ
2
e
−
(
x
2
+
y
2
)
2
σ
2
G_{\sigma}=\frac{1}{2\pi \sigma^2}e^{-\frac{(x^2+y^2)}{2\sigma^2}}
Gσ=2πσ21e−2σ2(x2+y2)
生成步骤
- 确定卷积核的尺寸,比如 5 × 5 5\times 5 5×5;
- 设置高斯函数的标准差,比如 σ = 1 \sigma =1 σ=1;
- 计算卷积核各个位置的权重值;
- 对权重值进行归一化(使所有权值相加为 1 1 1, G σ ( x , y ) ∑ G σ ( x , y ) \frac{G_{\sigma}(x,y)}{\sum G_{\sigma}(x,y)} ∑Gσ(x,y)Gσ(x,y))
如何设置下述参数
- 卷积核的尺寸
- 高斯函数的标准差
方差变化
标准差小→信号集中→中间值大→不平滑
方差越大,平滑效果越明显。
方差相同,则归一化前对应格子权值相同。归一化时每个小格的权值受到总格数的影响,导致格数多的归一化后权值小,平滑能力强;格数少的归一化后权值大,平滑能力弱。
模板尺寸越大,平滑能力越强。
总结
- 大方差或者大尺寸卷积核平滑能力强;
- 小方差或者小尺寸卷积核平滑能力弱;
- 经验法则:将卷积核的半窗宽度设置为 3 σ 3\sigma 3σ,最终卷积模板尺寸为 2 × 3 σ + 1 2\times 3\sigma + 1 2×3σ+1。
平均卷积核vs高斯卷积核
可以看出,高斯卷积核有效去除了振铃的效果。
高斯卷积核结论
- 去除图像中的“高频”部分(低通滤波器)
- 两个高斯卷积核卷积得到的还是高斯卷积核
①使用多次小方差卷积核连续卷积,可以得到与大方差卷积核相同的结果
②使用标准差为 σ \sigma σ的高斯核进行两次卷积与使用标准差为 2 σ \sqrt{2}\sigma 2σ的高斯核进行一次卷积相同。 - 可分离(可分解为两个一维高斯的乘积)
卷积操作运算量
问 用尺寸为
m
×
m
m\times m
m×m的卷积核卷积一个尺寸为
n
×
n
n\times n
n×n的图像,其计算复杂度是多少?
答
O
(
m
2
n
2
)
O(m^2n^2)
O(m2n2)。
此处鲁鹏老师引用的例子我没有太懂,希望有看懂的朋友指教:
例子中第一种计算方法 σ = 1 \sigma=1 σ=1,一次运算是 O ( 49 n 2 ) O(49n^2) O(49n2),要计算两次;第二种计算方法是 σ = 2 \sigma=\sqrt{2} σ=2,一次运算是 O ( 81 n 2 ) O(81n^2) O(81n2),只计算一次。从时间复杂度的角度来看,两种计算方法都是 n 2 n^2 n2级别的,那么应当比较常数。如果讨论每次计算的时间复杂度,那 σ = 1 \sigma=1 σ=1的确每一次计算需要的时间复杂度小,但从实现最终目的的角度来看,这个例子里使用 σ = 2 \sigma=\sqrt{2} σ=2应该是更加理想的?
问 如果核可分离呢?
答
O
(
m
2
n
)
O(m^2n)
O(m2n)。
小结
高斯卷积核可以有效抑制噪声(振铃)、实现图像平滑,通过分解卷积核可以降低计算复杂度。
4 图像噪声
椒盐噪声:黑色像素和白色像素随机出现。
脉冲噪声:白色像素随机出现。
高斯噪声:噪声强度变化服从高斯分布(正态分布)
高斯噪声
f
^
(
x
,
y
)
=
f
(
x
,
y
)
+
η
(
x
,
y
)
\hat{f}(x,y)=f(x,y)+\eta(x,y)
f^(x,y)=f(x,y)+η(x,y)
其中 f ( x , y ) f(x,y) f(x,y)为理想图像, η ( x , y ) \eta(x,y) η(x,y)为随机噪声,有 η ( x , y ) ∼ N ( μ , σ ) \eta(x,y)\sim\mathcal{N}(\mu,\sigma) η(x,y)∼N(μ,σ),通常 μ = 0 \mu=0 μ=0, σ \sigma σ很小。
取其中的一行画出:
高斯去噪
横轴是高斯噪声中的
σ
\sigma
σ,纵轴是使用的高斯卷积核中的
σ
\sigma
σ,不难看出,高斯噪声中的
σ
\sigma
σ越大,使用的去噪的高斯卷积核中的
σ
\sigma
σ就越大。
高斯去噪处理椒盐噪声/脉冲噪声
发现高斯去噪不能很好地解决图像中的随机黑白像素点。
中值滤波
总结
椒盐噪声与脉冲噪声应当使用中值滤波去噪;
高斯噪声应当使用高斯卷积核去噪。
5 边缘提取
边缘:图像中亮度明显而急剧变化的点
为什么要研究边缘?
- 编码图像中的语义与形状信息
- 相对于像素表示,边缘表示显然更加紧凑
5.1 边缘的种类
表面法向不连续:两个交界面的法方向不同
深度不连续:瓶身的两条侧线,实际不存在,但把物体分成了能否在图像中被表示的两个的部分
表面颜色不连续:边界两侧的颜色有突变
光照不连续:出现遮挡等情况导致相同的光照下出现的光强差异
不同的识别任务关注的边缘种类不同。如判别当前图像表征的物体,则表面颜色不连续的边界是没有用的;判别这个瓶子里装的是什么,则表面颜色不连续的边界是有用的。
5.2 边缘检测
图像求导
2D函数
f
(
x
,
y
)
f(x,y)
f(x,y)的偏导为:
∂
f
(
x
,
y
)
∂
x
=
lim
ε
→
0
f
(
x
+
ε
,
y
)
−
f
(
x
,
y
)
ε
\frac{\partial f(x,y)}{\partial x}=\displaystyle\lim\limits_{\varepsilon\rightarrow 0}\frac{f(x+\varepsilon,y)-f(x,y)}{\varepsilon}
∂x∂f(x,y)=ε→0limεf(x+ε,y)−f(x,y)
图像求导公式:
∂
f
(
x
,
y
)
∂
x
≈
f
(
x
+
1
,
y
)
−
f
(
x
,
y
)
1
\frac{\partial f(x,y)}{\partial x}\approx \frac{f(x+1,y)-f(x,y)}{1}
∂x∂f(x,y)≈1f(x+1,y)−f(x,y)
通过这个公式得到以下两种卷积核:
使用这两个卷积核对图像进行卷积即可实现对
x
,
y
x,y
x,y的偏导。
如图,左边是对
x
x
x求导得到的边界图,得到竖直方向的边界;右边是对
y
y
y求导得到的边界图,得到水平方向的边界。之所以是
x
x
x对应竖直、
y
y
y对应水平,是因为我们通过对
x
x
x求导得到的是水平方向的像素值差异,将水平方向差异分开的只能是竖直方向的边界,对
y
y
y求导同理。
5.3 图像梯度
可得梯度方向:
θ
=
tan
−
1
(
∂
f
∂
x
/
∂
f
∂
y
)
\theta=\tan^{-1}(\frac{\partial f}{\partial x} / \frac{\partial f}{\partial y})
θ=tan−1(∂x∂f/∂y∂f)
可得梯度的模:
∣
∇
f
∣
=
(
∂
f
∂
x
)
2
+
(
∂
f
∂
y
)
2
|\nabla f|=\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2}
∣∇f∣=(∂x∂f)2+(∂y∂f)2
梯度的模值越大,说明这个点所在的边是边界的可能性越大。
使用模值的效果很好,所以我们通常使用梯度的模值来反应图像的边缘信息。
噪声的影响
噪声图像的某一行或列的灰度值随位置变换得情况。
看似平滑的位置却有微小波动。我们期待这些位置的导数为0,但是当我们求导时却得到:
此时无法确定边缘位置,因此应当先使曲线平滑。这个是每个点都有噪声,是高斯噪声,因此我们要做高斯平滑。
微分是卷积,而卷积具有结合性:
d
d
x
(
f
∗
g
)
=
f
∗
d
d
x
g
\frac{d}{dx}(f*g)=f*\frac{d}{dx}g
dxd(f∗g)=f∗dxdg
我们通过变换后,仅需要一次卷积计科完成求导。
这个就被称为高斯偏导模板。
高斯偏导模板的方差变化为图像处理的影响:
通过图像可以看出,可以通过调节方差来关注不同的细节。方差较小时,我们关注细粒度的边缘细节;方差较大时,我们关注粗粒度的边缘细节。
高斯核vs高斯一阶偏导核
高斯核:
- 消除高频部分(低通滤波器)
- 卷积核中的权值不能为负数
- 权值总和为 1 1 1(恒定区域不受卷积影响,即图像光照总强度不会改变)
高斯一阶偏导核
- 是高斯的导数
- 卷积核中的权值可能为负数
- 权值总和为 0 0 0(恒定区域无响应)
- 高对比度点的响应值大
6 边缘检测
6.1 非最大值抑制
Canny边缘检测器:
放大结果图:
产生该现象的原因:在该处颜色变化较为平缓,不是突变,使得存在变化的宽度较大,从而出现粗条。
如上图中右侧所示,如果
p
p
p点的梯度强度比
q
q
q和
r
r
r都强,则保留
p
p
p点,否则删去
p
p
p点。
(
q
q
q点和
r
r
r点的坐标通常不是整数,其对应的梯度强度需要通过插值获得,插值方法如加权求和插值等)
6.2 双阈值
为了找到恰当的边缘,先使用高阈值提取梯度强度较高的边,然后使用低阈值提取梯度强度较低的边,但只保留与高阈值提取到的边有连接的边,其余的边舍弃。
6.3 总结
- 用高阶一阶偏导核卷积图像
- 计算每个点的梯度幅值和方向
- 非最大化抑制:将宽的“边缘”细化至单个像素的宽度
- 连接与阈值(滞后)
①定义两个阈值:低和高
②使用高阈值开始边缘曲线,使用低阈值继续边缘曲线
7 纹理表示
7.1 纹理
7.2 基于卷积核组的纹理表示方法
思路:利用卷积核组提取图像中的纹理基;利用基元的统计信息来表示图像中的纹理。
下面是一个卷积核组的例子:
前六个卷积核(高斯偏导核)用来检测不同方向的边缘,最后一个卷积核用来检测是否有圆形/斑状的图案。
给定一个图像,用卷积核卷积核会得到:
- 设计卷积核组
- 利用卷积核组对图像进行卷积操作获得对应的特征响应图组
- 利用特征响应图的某种统计信息来表示图像中的纹理。
图中
r
1
\mathbf{r}_1
r1表示第一个特征图展开的向量
r
1
×
n
r_{1\times n}
r1×n表示第
1
1
1个特征图上第
n
n
n个位置的响应值
这样送入神经网络学习时,假设图像是 n × m n\times m n×m,那么我们通过纹理表示一张图像时,可以变成 7 × n × m 7\times n\times m 7×n×m维的向量,但是这样的计算量过于庞大。
对于纹理分类任务,每个图像中相同的纹理出现的位置与我们的任务是无关的。在刚刚的存储方法中,我们将所有像素点变向展开成一个向量,无形之中,也存储了图像中各个纹理的位置信息。在进行学习和比较时,难免会产生相同位置的纹理对比,这是我们在纹理分类任务中所不需要的。
所以我们通常忽略基元位置,关注出现了哪种基元对应的纹理以及基元出现的频率。
图中,
r
ˉ
i
\bar{r}_i
rˉi表示第
i
i
i个特征响应图的均值。这种方法用基元信息的均值来表示图像,有效减少了维数。
尝试匹配下图中图像与纹理表示!
对应的基元均值越大,那么对应的灰度越大,就越偏向白色。
通过均值为白色的基元,不难看出——图像1对应纹理表示C(圆斑点居多),图像2对应纹理表示A(竖直边缘居多),图像3对应纹理表示B(右上至左下倾斜边缘居多)。
卷积核组设计
- 卷积核类型(边缘、条形以及点状)
- 卷积核尺度(3-6个尺度,修正卷积核的方差来调节边缘粗细颗粒程度)
- 卷积核方向(6个角度)
上图中,尺寸越大,意味着方差越大,考虑的边缘或条状的颗粒越粗。
“边缘”和“条状”的区别:
实际例子
总结
- 设计卷积核组
- 利用卷积核组对图像进行卷积操作获得对应的特征相应图组
- 利用特征响应图的某种统计信息来表示图像中的纹理
思考
我们对于每一个位置,如上图所示,用48维向量表示特征的话,那么我们得到的一定是一个稀疏矩阵,因为一个点它符合的核组中特征并不多,比如说他该是竖直的就不会是水平的,他该是从右上到左下的,就不会是从左上到右下的。一旦是稀疏矩阵,就有充分的机会去压缩内容。