本文相关
Paper Summary
:https://github.com/FDU-VTS/CVPaperCode
:https://github.com/FDU-VTS/CVCode
原文链接
基础知识
- 一张图是由不同的像素点构成的,本文的计算和构建都是基于像素点的运算,即
(RGB)
值 - 高斯模糊/拉普拉斯变换:用于转换图像,减少图像噪声的平滑算法
- 最小生成树
(Minimum Spanning Tree | MST)
指的是,在图中建立一个连通图并且没有回路是生成树,而最小生成树指的是构成结果权值最小 - 不同像素点之间的差:即
RGB
值之间的欧氏距离- ( R 1 − R 2 ) 2 + ( G 1 − G 2 ) 2 + ( B 1 − B 2 ) 2 \sqrt{(R_1-R_2)^2+(G_1-G_2)^2+(B_1-B_2)^2} (R1−R2)2+(G1−G2)2+(B1−B2)2
- 并查集算法(union find set)以及克鲁斯卡尔算法(Kruskal),使用边建立并查集,并且使用kruskal进行搜索合并
早期的分割方法
- Zahn提出了一种*基于图的最小生成树(MST)*的分割方法,用来进行点聚类以及图像分割,前者权值是点间距离,后者权值是像素差异。
- 不足:根据阈值不同,会导致高可变性(大约是色彩对比强的一个区域)区域划分为多个区域;将ramp和constant region合并到一起。
- Urquhart提出用边相连的点中边权值最小的进行归一化,找周围相似的。
- 根据各个区域是否符合某种均匀性标准来分割,找均匀强度或梯度的区域,不适用于某个变化很大的区域。
- 使用特征空间聚类:通过平滑数据——给定半径的超球面对各个点扩张其连通分量,找到簇,来保持该区域的边界,并对数据进行转换。
基于图的分割
定义
G
:将图像由像素点转化为图V
:每一个像素点都是图中的点E
:任意两个相邻像素点之间边C
:被划分的Segmentation
,一个C
中有至少1个像素点Int(C)
:区域内最小生成树权值最大的边,表示的是,记为- I n t ( C ) = max w ( e ) , e ∈ M S T ( C , E ) Int(C) = \max{w(e)} , e∈MST(C,E) Int(C)=maxw(e),e∈MST(C,E)
Dif(C1,C2)
:表示C1和C2之间的距离,记为- D i f ( C 1 , C 2 ) = min w ( v i , v j ) , v i ∈ C 1 , v j ∈ C 2 , ( v i , v j ) ∈ E Dif(C1,C2) = \min{w(vi,vj)} ,vi∈C1,vj∈C2,(vi,vj)∈E Dif(C1,C2)=minw(vi,vj),vi∈C1,vj∈C2,(vi,vj)∈E
- 最后要形成的分组要求是(表示了所有区域之间的最小距离都比区域内的最大距离和权值的和要大)
- D ( C 1 , C 2 ) = { t r u e , i f D i f ( C 1 , C 2 ) > M I n t ( C 1 , C 2 ) f a l s e , o t h e r w i s e D(C1,C2)=\left\{ \begin{aligned} true, & & \ if Dif(C1,C2)>MInt(C1,C2) \\ false, & & \ otherwise \end{aligned} \right. D(C1,C2)={true,false, ifDif(C1,C2)>MInt(C1,C2) otherwise
- 其中
MInt(C1,C2)
的值为:- M I n t ( C 1 , C 2 ) = ( I n t ( C 1 ) + τ ( C 1 ) , I n t ( C 2 ) + τ ( C 2 ) ) MInt(C1,C2) = (Int(C1)+τ(C1),Int(C2)+τ(C2)) MInt(C1,C2)=(Int(C1)+τ(C1),Int(C2)+τ(C2))
- 阈值设定的原因是为了在开始时,因为只有单个像素点,那么点内的距离为0,而点之间的距离还存在,那么导致无法合并。所以加入阈值。
- τ ( C ) = k / ∣ C ∣ τ(C) = k/|C| τ(C)=k/∣C∣
分割算法(与克鲁斯卡尔算法构建最小生成树有密切关系。)
- 输入是一个有n个节点和m条边的图G,输出是一系列区域。步骤如下:
- 0.将边按照权重值以非递减方式排序
- 1.最初的分割记为S(0),即每一个节点属于一个区域。
- 2.按照以下的方式由S(q-1)构造S(q):记第q条边连接的两个节点为vi和vj,如果在S(q-1)中vi和vj是分别属于两个区域并且第q条边的权重小于两个区域的区域内间距,则合并两个区域。否则令S(q) = S(q-1)。
- 3.从q=1到q=m,重复步骤2。
- 4.返回S(m)即为所求分割区域集合。
补充
高斯滤波器
- 高斯变换就是用高斯函数对图像进行卷积,高斯滤波器是一种线性滤波器,能够有效抑制噪声,并平滑图像。其实质是取滤波器窗口内像素的均值作为输出。
- 高斯函数公式如下:
-
f
(
x
)
=
1
σ
2
π
e
−
(
x
−
μ
)
2
2
σ
2
f(x) = \frac{1}{\sigma\sqrt{2\pi}}e^{ -\frac{(x-\mu)^2}{2\sigma^2}}
f(x)=σ2π1e−2σ2(x−μ)2
其中,u
是x
的均值,σ
是方差。
-
f
(
x
)
=
1
σ
2
π
e
−
(
x
−
μ
)
2
2
σ
2
f(x) = \frac{1}{\sigma\sqrt{2\pi}}e^{ -\frac{(x-\mu)^2}{2\sigma^2}}
f(x)=σ2π1e−2σ2(x−μ)2
- 由一维函数,我们可以推导出二维函数的公式如下:
- f ( x , y ) = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 f(x,y) = \frac{1}{2\pi \sigma^2} e^{-\frac{(x^2+y^2)}{2\sigma^2} } f(x,y)=2πσ21e−2σ2(x2+y2)
- 高斯函数在图像处理中的使用,实际上就是对每个像素点的周边像素取平均值,从而达到平滑的效果,在取值(周边半径)时,周围像素点的半径越大,则图像的模糊度就越强。在实际计算时,利用高斯模糊按正态曲线分配周边像素的权重,从而求中心点的加权平均值。
- 高斯模糊的具体计算方式如下:
- 1.将中心点周围的八个点带入到高斯函数中,从而得到权重矩阵A1;
- 2.为使归一化,将矩阵A1中的各个点除以所有点(9个点)的权重和,得到归一化后的权重矩阵A2;
- 3.图片原始的像素矩阵分别乘以A2中各自的权重值,将得到的所有点的值加起来求平均,便得到中心点的高斯模糊值。图像中其余点相同求法。
- 注:1.彩色图片,可对RGB三通道分别作高斯模糊。
- 2.
σ
代表数据的离散程度,σ
越大,中心系数越小,图像越平滑;反之,反之。
拉普拉斯变换:是为解决傅立叶变换等幅振荡的缺点。
- 首先了解一下傅立叶变换:傅立叶变换是一种物理上探究频谱的方法,三角公式是:
- f ( t ) = ∑ n = 1 ∞ A n c o s ( n w 0 t + φ n ) + B f(t) = \sum_{n=1}^\infty A_ncos(nw_0t+\varphi_n)+B f(t)=∑n=1∞Ancos(nw0t+φn)+B
- 其中,
w0
表示基波。
- 由欧拉公式:
- { e i x = c o s x + i s i n x , e − i x = c o s x − i s i n x , \left\{ \begin{aligned} e^{ix} =cosx+isinx, \\ e^{-ix} =cosx -isinx, \end{aligned} \right. {eix=cosx+isinx,e−ix=cosx−isinx,
- 将傅立叶三角形式公式中的正余弦函数用指数函数表示,改写为用复指数表示的公式,如下:
- f ( t ) = ∑ − ∞ ∞ F ( n w 0 ) e j w 0 t f(t) = \sum_{-\infty}^\infty F(nw_0)e^{jw_0t} f(t)=∑−∞∞F(nw0)ejw0t
- 将上述公式改为积分形式,即得到复指数形式公式为:
- F ( w ) = ∫ − ∞ ∞ f ( t ) e − j w t d t F(w) =\int_{-\infty}^\infty f(t)e^{-jwt}dt F(w)=∫−∞∞f(t)e−jwtdt
- 但由于傅立叶变换是等幅振荡的正弦波,故当f(t)不断趋向无穷时,此时函数将不再收敛,这时候便不再适合使用傅立叶变换。于是,我们引入一个衰减因子,对其作变换。对函数y=f(t)乘上一个
e
σ
t
e^{\sigma t}
eσt,其中,
σ
>0。- F ( w ) = ∫ − ∞ ∞ f ( t ) e − σ t e − j w t d t F(w) =\int_{-\infty}^\infty f(t)e^{-\sigma t}e^{-jwt}dt F(w)=∫−∞∞f(t)e−σte−jwtdt
- 对上式进行合并同类项,可得到 F ( w ) = ∫ − ∞ ∞ f ( t ) e − t ( σ + j w ) d t F(w) =\int_{-\infty}^\infty f(t)e^{-t(\sigma+jw)}dt F(w)=∫−∞∞f(t)e−t(σ+jw)dt
- 我们将指数中的
σ+jw
最初的分割记为S,于是得到拉普拉斯公式:- ⇒ \Rightarrow ⇒ F ( w ) = ∫ − ∞ ∞ f ( t ) e − s t d t F(w) =\int_{-\infty}^\infty f(t)e^{-st}dt F(w)=∫−∞∞f(t)e−stdt
- 由上式推导,很清楚的知道,当s=jw时,拉普拉斯函数就变成了傅立叶函数,也就相当于拉氏不再具有衰减功能。
- 又由上述公式可以很直观地看到当取值 σ 0 \sigma_0 σ0刚好收敛时,则 σ \sigma σ> σ 0 \sigma_0 σ0的区域全都收敛。