图像处理与计算机视觉--第五章--图像分割--重要知识点总结

5.图像分割

5.1.经典聚类模型原理与实现

5.1.1.经典聚类模型原理介绍

  聚类一般就是将向量分成若干组,而这些组的一般都具有相似的值。在图像处理领域,这些向量主要代表的是像素,有时回会去代表像素周围的领域,这些向量的元素主要包括:
     ∙ \bullet 灰度值/强度值
     ∙ \bullet RGB以及其推导出的颜色特征
     ∙ \bullet 计算出特征值
     ∙ \bullet 纹理度量值

5.1.2.经典聚类模型算法关键

  在传统聚类中,假设有K个类别 C 1 , C 2 , . . . . . . . . . . , C K , \mathrm{C_{1},C_{2},..........,C_{K},} C1,C2,..........,CK,,并且均值为 m 1 , m 2 , . . . . . . . . . . , m K , \mathrm{m_{1},m_{2},..........,m_{K},} m1,m2,..........,mK,那么我们定义最小二乘测度(Least Squre Error Measure)定义为:
D 1 = ∑ k = 1 K ∑ x i ∈ C k ∥ x i − m k ∥ 2 D_1=\sum_{k=1}^{K}\sum_{x_i\in C_k}\lVert x_i-m_k\rVert^2 D1=k=1KxiCkximk2
  上述LSEM的值越小,就代表检验数据与指定类别更加接近,最小二乘聚类过程考虑所有K个类别的可能划分,选择D最小的一种。
  我们可以发现,经典聚类方法就是一个纯粹暴力求解的方法,随着样本点的增多,计算量的增加是不可预测的,所以我们只能在样本比较小的时候考虑这样的求解方法。

5.2.迭代K均值聚类模型介绍

  K-means算法是一种简单的迭代爬山算法的,算法的描述如下所示:
     ∙ \bullet 令iteration为1。
     ∙ \bullet 从样本中选取K个均值 m 1 ( 1 ) , m 2 ( 1 ) , . . . . . . . . . . , m k ( 1 ) \mathrm{m_{1}(1),m_{2}(1),..........,m_{k}(1)} m1(1),m2(1),..........,mk(1),作为聚类中心。
     ∙ \bullet 对于每一个样本计算其到达每一个聚类中心的欧式距离 D ( x i , m k ( i c ) ) D(x_{i},m_{k}(i_{c})) D(xi,mk(ic)),将x_{i}分配给 D ( x i , m k ( i c ) ) D(x_{i},m_{k}(i_{c})) D(xi,mk(ic))最小的簇 C j C_{j} Cj
     ∙ \bullet 令Ic=iteration+1后,继续更新均值得到的新的集合 m 1 ( I c ) , m 2 ( I c ) , . . . . . . . . . . , m k ( I c ) \mathrm{m_{1}(Ic),m_{2}(Ic),..........,m_{k}(Ic)} m1(Ic),m2(Ic),..........,mk(Ic)
     ∙ \bullet 继续重复上述过程,直到对于所有的k,都有 C k ( i c ) = C k ( i c + 1 ) C_{k}(i_{c})=C_{k}(i_{c}+1) Ck(ic)=Ck(ic+1)
    如下所示,下图显示的是对于图像在RGB空间中应用K-means均值聚类的算法结果:
在这里插入图片描述

5.3.直方图聚类模型介绍

  直方图模式搜索是一种度量空间聚类的过程,其中假设图像中的同类目标是度量空间(直方图)的聚类,然后将聚类结果映射回图像区域就能实现图像分割。
  对于灰度图像,首先确定直方图的波谷,谷与谷之间的间隔就是各个类别的聚类,这就实现了度量空间的聚类。
在这里插入图片描述

5.4.经典区域增长算法

  假设R中的所有像素与测试像素y都是相互独立的,并且具有相同的分布态,下面统计量服从 T N − 1 T_{N-1} TN1分布:
T = [ ( N − 1 ) N ( N + 1 ) ( y − X ‾ ) 2 / S 2 ] 1 2 T=\left[\frac{(N-1)N}{(N+1)}\left(y-\overline{X}\right)^2\left/S^2\right]^{\frac{1}{2}}\right. T=[(N+1)(N1)N(yX)2/S2]21
     ∙ \bullet 如果T足够小,y就加入区域R,利用y对均值和散度进行更新。新的均值和散度如下所示:
X ‾ n e w ← ( N X ‾ o l d + y ) / ( N + 1 ) S n e w 2 ← S o l d 2 + ( y − X ‾ n e w ) 2 + N ( X ‾ n e w − X ‾ o l d ) 2 \begin{gathered}\overline{X}_{\mathrm{new}}\leftarrow\left(N\overline{X}_{\mathrm{old}}+y\right)/(N+1)\\S_{\mathrm{new}}^2\leftarrow S_{\mathrm{old}}^2+\left(y-\overline{X}_{\mathrm{new}}\right)^2+N{\left(\overline{X}_{\mathrm{new}}-\overline{X}_{\mathrm{old}}\right)^2}\end{gathered} Xnew(NXold+y)/(N+1)Snew2Sold2+(yXnew)2+N(XnewXold)2
     ∙ \bullet 如果T过高,y值就不太可能是R中像素,如果y与所有的领域都不相同,那么它就开辟一个新的领域。

  区域增长算法的原理非常简单,算法流程如下所示:
     ∙ \bullet 以一个种子点作为生长的起点,然后将种子周围的点(可以是四邻域也可以是八邻域)进行筛选。
     ∙ \bullet 如果满足相似性,则该像素归为和种子一类,并对这个像素进行邻域分析,直到没有新的像素为止。
  区域生长的条件:相邻象元(四通道或八通道)满足相应的阈值要求即可划分在一个图斑之中,筛选条件可以是与种子点像素值是否接近,或者像素梯度是否小于阈值等等;
  区域生长停止的条件:当所有的象元都已经划分在相应的图斑中时,算法结束。
在这里插入图片描述

5.5.区域表示的方法原理

5.5.1.覆盖图

  覆盖图是显示图像分割区域的一种方法,它在原图上覆盖一种或多种颜色,许多图像处理系统都提供这种操作,作为图像输出的一部分。
  原图是灰度图像,覆盖的颜色是与灰度明显不用的原色,如红色或者白色。
  具体的实现方法如下所示:
    $\bulletKaTeX parse error: Expected 'EOF', got '&' at position 51: …部分的像素值变成其他的颜色. &̲ensp; &ens…\bullet$d2.用图片来替换:插入一张与指定替换区域大小相同的图片,大小不符合的图片需要使用resize()函数来实现。

5.5.2.标记图像

  标记图像是一种很好的区域表示方法,其思想是为图像中符合某种特定连通规则连通的区域赋予一个唯一的标号 (一般是一个整数) ,从而建立起一幅标记图,其中区域内所有像素都用唯一的标号作为像素值。
  区域标记可以应用到计算物体形状特征中,标记图像作为选定区域像素的模板,计算出区域的特征如面积或最佳拟合椭圆的主轴长度。

5.5.3.边界编码

  区域也可用其外部特征即边界来表示,这些边界存储为某种数据结构。两种类型:
     ∙ \bullet 链码: 链码不仅节省空间,也可用于曲线自身的后续处理,如基于形状的目标识别。当一块区域不仅有一个外边界,还存在一个或多个内孔边界时,可分别用链码表示每个边界。
     ∙ \bullet 多边形逼近: 当不需要抽取边界时,边界像素可用直线段近似,用尽可能少的直线段来描述曲线边界的基本形状,形成对边界的多边形逼近。
在这里插入图片描述
  上图所示为两种边界编码方法
     ∙ \bullet 链码编码采用8个符号表示直线段的8个可能的角度,这此直线段逼近方格上的曲线。
     ∙ \bullet 多边形逼近采用直线段来拟合原始曲线,直线段的端点具有实值坐标,并不受原始方格点的限制。

5.5.4.特征表

  特征表法: 是指用区域特征来表示区域的一种算法。
     ∙ \bullet 在关系数据库的意义上它是一个表,其中行表示图像中的每块区域
     ∙ \bullet 列表示感兴趣的特征。特征可以是区域的大小、形状、亮度、颜色或者纹理
     ∙ \bullet 特征表可以增加内容,以包括或者指向区域的链码编码或四叉树表示

5.6.Hough变换原理

5.6.1.Hough变换检测直线

 Hough Transform是一种常用的计算机视觉图形检验方法,霍夫变换一般用于检验直线或者圆。

 霍夫变换的原理具体如下所示:
 假设图像中存在一条直线,表达式如下所示:
y = k x + b y=kx+b y=kx+b
 假设我们任意指定一个点 ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0),则对于任意穿过该点的直线,一定有如下公式成立:
b = − k x 0 + y 0 b=-kx_{0}+y_{0} b=kx0+y0
 此时我将以x,y为轴的图像变为以b,k为轴的图像,此时该直线也能够进行变化,并且如上推导可知,对应的图像也是一条直线,如图所示:
在这里插入图片描述
 进一步的,我们再从直线上取一点 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1),则必有如下公式:
b = − k x 1 + y 1 b=-kx_{1}+y_{1} b=kx1+y1
 在图像上绘制会这样的函数,我们可知,两条直线相交于一点 ( k ∗ , b ∗ ) (k^{*},b^{*}) (k,b),而这个点就是x,y轴上的 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1) ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0)两点所确定的直线。
![在这里插入图片描述](https://img-blog.csdnimg.cn/905cb7cad8ce40eaa338bde0626db96d.png
 但是我们在实际的直线检测中,我们不会用到上述的坐标系方法,上述的方法只是提供一个求解的思路,我们将使用极坐标方程来完成上述方法的求解,对于上述的直线,极坐标方程可以表示为:
ρ = x c o s θ + s i n θ \rho=xcos\theta+sin\theta ρ=xcosθ+sinθ
 其中, θ \theta θ为直线的法线向量与x轴正向的夹角,而 ρ \rho ρ为坐标系原点至直线的垂直距离,如下图所示:
在这里插入图片描述
 如下所示,我们可以发现,这条直线在极坐标下只有一个( ρ \rho ρ, θ \theta θ) 与之对应,改变一个参数大小变换到空域上的直线即会改变。而空域这条直线上的所有点都可以在极坐标为( ρ \rho ρ, θ \theta θ) 所表示的直线上 (如下图所示)
在这里插入图片描述
 空域直线上的一个点在极坐标系下具体对应多少个极坐标对,取决于 θ \theta θ的步长 ,如果设步长为 β \beta β,则极坐标对n的表示如下所示:
n = 360 β n=\frac{360}{\beta} n=β360
 对应的图片如下所示:
在这里插入图片描述
 接下来我们假设空域上的三个点对应的极坐标曲线如下图的(a)所示,极坐标曲线同时经过一个点表示空域下有一条直线经过这三个点,只要寻找交点最多的点,在空域内就是要寻找的直线。
在这里插入图片描述

5.6.2.Hough变换检测圆

  基本方法和检测直线差不多的,需要改变的是将圆方程该为:
r = r 0 + d sin ⁡ θ c = c 0 + d cos ⁡ θ \begin{aligned}r&=r_0+d\sin\theta\\c&=c_0+d\cos\theta\end{aligned} rc=r0+dsinθ=c0+dcosθ
  圆检测需要找到圆心和半径,算法流程如下所示:
     ∙ \bullet 圆心寻找:如果已知圆上的点,就将圆上的点求解梯度向量(圆内梯度向量,梯度方向指向圆内)并且沿着梯度向量进行画线,将所有的经过的点(累加器)进行投票,投票数量最多的点就是圆心。
     ∙ \bullet 半径寻找:找到圆心之后,我们求解所有边缘点与圆心的距离,还是按照投票的思想,选取投票数量最多的距离作为圆的距离。
在这里插入图片描述
在这里插入图片描述

5.7.自适应阈值分割原理

5.7.1.自适应阈值分割介绍

  在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,会使得结果不如人意:一块黑,一块白,且黑的区域的特征无法提取。这时候自适应阈值算法尤为重要。与全局阈值不同,它更加注重上下文关系,将原本图片分割成更小的区域进行判断,极大地降低了阴影对于图片本身的影响。
在这里插入图片描述

  自适应阈值用于二值化处理图像,具有比较好的处理效果,相比对全阈值处理方法,自适应阈值中的每一个像素点的阈值都不是固定相同的,而是由其领域中的图像像素点加权平均计算而得到的,这样的处理方法有如下好处:

1.每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。
2.亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。
3.不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值,这样处理出的图像效果更加明显。

5.7.2.自适应阈值函数参数解析

  在Opencv库函数中,给出了自适应阈值分割的函数如下所示:

fig1 = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

  接下来我将具体解释adaptiveThreshold()中各个参数的意义,如下所示:

"""
fig=cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
参数解释:
       1.src:原图像,就是你需要进行自适应阈值分割处理的图像
       2.maxValue:最大像素点,其含义表示如果某点的像素值大于对应的阈值,那么将像素值取为255.
       3.adaptiveMethod:计算阈值的方法,Opencv中包括了两种:1.cv.ADAPTIVE_THRESH_MEAN_C:计算出领域的平均值作为阈值。
                                                        2.DAPTIVE_THRESH_GAUSSIAN_C:计算出领域的高斯均值作为阈值。
       4.thresholdType:取值类型,只有两个取值:1.THRESH_BINARY   2.THRESH_BINARY_INV
       5.blockSize:计算单位是像素的邻域块大小选择,这是局部邻域大小,只能取奇数,如3/5/7/9/11等
       6.C:阈值偏移量,正负数都可以,所以阈值的大小=C+adaptiveMethod计算出的阈值值
"""

5.7.3.高斯概率函数介绍

  高斯分布是人工智能方面很常见的一种概率分布函数,常见的一维高斯概率密度分布函数如下所示:
p ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 p(x)=\frac1{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} p(x)=σ2π 1e2σ2(xμ)2

  在高斯分布函数中,我们可以随意调节标准差 σ \sigma σ μ \mu μ的值,来进行高斯分布的变换,如下所示:
在这里插入图片描述
  在图像处理中,我们一般用到二维的高斯概率分布函数,如下所示:
f ( x , y ) = ( 2 π σ 1 σ 2 1 − ρ 2 ) − 1 e x p [ − 1 2 ( 1 − ρ 2 ) ( ( x − μ 1 ) 2 σ 1 2 − 2 ρ ( x − μ 1 ) ( y − μ 2 ) σ 1 σ 2 + ( y − μ 2 ) 2 σ 2 2 ) ] f\left(x,y\right)=\left(2\pi\sigma_{1}\sigma_{2}\sqrt{1-\rho^{2}}\right)^{-1}exp\left[-\frac{1}{2\left(1-\rho^{2}\right)}\left(\frac{\left(x-\mu_{1}\right)^{2}}{\sigma_{1}^{2}}-\frac{2\rho\left(x-\mu_{1}\right)\left(y-\mu_{2}\right)}{\sigma_{1}\sigma_{2}}+\frac{\left(y-\mu_{2}\right)^{2}}{\sigma_{2}^{2}}\right)\right] f(x,y)=(2πσ1σ21ρ2 )1exp[2(1ρ2)1(σ12(xμ1)2σ1σ22ρ(xμ1)(yμ2)+σ22(yμ2)2)]
当我们令 σ 1 \sigma_{1} σ1= σ 2 \sigma_{2} σ2= σ \sigma σ,同时将 μ \mu μ ρ \rho ρ置为0,得出的高斯概率函数如下所示:
g ( x , y ) = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 g(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{(x^2+y^2)}{2\sigma^2}} g(x,y)=2πσ21e2σ2(x2+y2)

高斯概率函数是相对于二维坐标产生的,其中(x,y)为点坐标,要得到一个高斯滤波器模板,应先对高斯函数进行离散化,将得到的值作为模板的系数。例如:要产生一个33的高斯滤波器模板,以模板的中心位置为坐标原点进行取样,模板在各个位置的坐标,如下图所示(x轴水平向右,y轴竖直向下)
在这里插入图片描述

标准差 σ =1.3 的 33 的整数形式的高斯滤波器如下:

K = 1 16 ⋅ [ 1 2 1 2 4 2 1 2 1 ] K=\dfrac{1}{16}\cdot\begin{bmatrix}1&2&1\\2&4&2\\1&2&1\end{bmatrix} K=161 121242121
标准差σ的值可以任意选取,如果σ较小,那么生成的模板的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;反之,σ较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显,不管选择什么 σ值,我们构建3*3高斯核的时候要确保这九个点加起来为1,从而得到最终的高斯模板。

  图像处理效果对比如下所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_71819746/article/details/133956682
今日推荐