特征类型和图像分割
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征类型和图像分割相关的知识,希望对你有一定的参考价值。
参考技术A 这图里的大多数特征 或者说任意图像的大多数特征,都逃不出三大类边缘、角点和斑点。我们最想检测的就是角点,因为角点是可重复性最高的特征,也就是说因为角点是可重复性最高的特征,给出关于同一景象的两张或以上图像 我们就能很轻易地识别出这类特征。
举一个简单的例子:
看这张蒙德里安的画作 来看这三小块A、B 和 C 有了这三小块,告诉我它们位于图像的哪个矩形区域吗?
A 只是个简单的色块,能和许多这样的矩形区域匹配,由于它不是独一无二的 所以不是个好特征
B 是边缘,因为从 B 的方向来看 B 与红色矩形底部的边缘相匹配,但我们还是可以左右移动这个边缘 B 左右都能匹配,我们只能估测这个边缘在图像上的大概位置,但很难找出确切位置
C 则是个角点,实际上 C 包含了两个角点,位置也很容易确定 就在右下角,这是因为角点代表两个边缘变化的交点。所以角点是最容易匹配的 是独一无二的 因此是好特征。
图像强度变化往往也称为图像梯度,要检测角点 我们也可以靠这类梯度测量法来进行。
每个方向的梯度测量都会有一个幅值 即梯度强度的度量值和表示强度变化的方向。
这些值都能用 Sobel 算子计算出来,Sobel 算子会分别取 x 和 y 方向的强度变化或图像梯度
这里我绘制出了山峰图像的这两个梯度,分别称之为 Gx 和 Gy 其中 G 是梯度的英文首字母。
这两张图看起来和之前的卷积核有点不一样,因为它们还没有转为二进制阀值图像,这里不需要转化。
计算出这两个方向总梯度的幅值和方向,将这些值从图像空间的xy坐标系转换成以 ρ 表示幅值 θ 表示方向的极坐标系。
把 Gx 和 Gy 想象成梯度三角形两边的长,Gx 是底边的长 Gy 则是右边的长,所以梯度的总幅值 ρ 就是三角形的斜线,也就是这两个梯度和的平方根。而梯度方向 θ则是 Gy 除以 Gx 的正切的倒数
注:下图有误 rho = sqrt(Gx^2 + Gy^2)
复制图像 将其转为 RGB 颜色空间
角点检测靠的是强度变化,所以先把图像转为灰度图像,然后将值转化为浮点型,以便 Hrarris 角点检测器使用。
该函数需要输入的参数有灰度浮点值、以及检测潜在角点所需观察的相邻像素大小,2 表示 2 乘 2 像素方块(由于在这个例子中 角点很明显,所以这样的小窗口就够用了);然后输入 Sobel 算子的大小,3 也就是典型的核大小。最后输入一个常数 以便确定哪些点会被视为角点,通常设为 0.04,如果这个常数设得稍微小一些 那检测出来的角点就会多一些。
函数的输出图像命名为 dst,这个图像会把角点标亮,非角点则会标为较暗的像素,实际上我们很难看到这张图里标亮的角点,所以我要再加一步操作来处理这些角点,这一步叫角点膨胀。使用 OpenCV 的函数 dilate 将其应用到检测出来的角点上,在计算机视觉里 膨胀会放大明亮的区域,或是位于前景的区域 比如这些角点 以便我们更清楚地观察它们。
要选出最明亮的角点 我得定义一个阀值 以便角点通过,但这里我要设一个较低的阀值,也就是至少为最大角点检测值的十分之一
熟悉了一些简单的特征类型,如何通过使用这些特征将图像的不同部分组合在一起。
将图像分组或分割成不同的部分称为图像分割。
图像分割的最简单情况是背景减法。在视频和其他应用中,通常情况是人必须与静态或移动背景隔离,因此我们必须使用分割方法来区分这些区域。图像分割还用于各种复杂的识别任务,例如在对道路图像中的每个像素进行分类时。
我们将介绍几种分割图像的方法:
边缘检测算法常用于检测物体边界,但检测出来的边缘往往不仅是物体边界,还涉及一些有趣的特征和线条。而要进行图像分割,要的只是那些完整的闭合边界,因为这类边界能切实标识出特定的图像区域和物体,图像描廓就可以实现这一点。
图像轮廓就是位于已知边界上的边缘所形成的连续曲线,因此轮廓可用于图像分割,能提供大量关于物体边界形状的信息。
首先 将图像转为灰度图像,然后用逆二进制阀值 把手显示成白色,而不是像之前一样让背景显示成白色 生成二值图像
CV 的函数 findContours,该函数要输入的参数有我们的二值图像、轮廓检索模式这里用的是树模式,以及轮廓近似方法 这里我就设为简单的链近似了.
函数会输出轮廓列表和轮廓层级,如果你有诸多轮廓彼此嵌套 那这个层级就能派上大用场,层级定义了轮廓之间的关系,详情请见 文档
绘制轮廓, OpenCV 的函数 drawContours,输入的参数有图像副本,轮廓列表以及要显示的轮廓,-1 指的是所有轮廓,输入轮廓的颜色和大小。
每个轮廓都有许多可以计算的特征,包括轮廓的面积,它的方向(大部分轮廓指向的方向),它的周长,以及 OpenCV documentation, here .中概述的许多其他属性。
这些取向值以度为单位,从x轴测量。 值为零表示平直线,值为90表示轮廓指向直线!
因此,每个轮廓计算的方向角应该能够告诉我们关于手的一般位置的信息。 用拇指向上的手应该比用拇指向下的手更高(接近90度)。
有种常用的图像分割技术 叫 k 均值聚类,方法是把具相似特征的数据点聚类或分组到一起。
我们来看一个简单的例子 更具体地探讨 k 均值
这张图很小 只有 34 乘 34 像素 是彩虹的一部分,我要用 k 均值 根据颜色将这张图分为三簇
首先 我们知道这张图里的每个像素都有一个 RGB 值,将各像素值当作 RGB 颜色空间的数据点绘制出来。
如果我让 k 均值将这些图像数据分成三簇,那么 k 均值就会观察这些像素值 随机猜测三个 RGB 点 将数据分成三簇。
实际上我可以把簇标签可视化,需将他们逐一呈现 就像用掩膜一样,来看等于 1 的标签
甚至还可以利用这些信息来对这部分图像进行掩膜处理
图像分割
图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性。
1、基于阈值的分割方法
阈值法的基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值相比较,最后将像素根据比较结果分到合适的类别中。
2、基于边缘的分割方法
边缘是指图像中两个不同区域的边界线上连续的像素点的集合,是图像局部特征不连续性的反映,体现了灰度、颜色、纹理等图像特性的突变。通常情况下,基于边缘的分割方法指的是基于灰度值的边缘检测,它是建立在边缘灰度值会呈现出阶跃型或屋顶型变化这一观测基础上的方法。阶跃型边缘两边像素点的灰度值存在着明显的差异,而屋顶型边缘则位于灰度值上升或下降的转折处。正是基于这一特性,可以使用微分算子进行边缘检测,即使用一阶导数的极值与二阶导数的过零点来确定边缘,具体实现时可以使用图像与模板进行卷积来完成。
3、基于区域的分割方法
将图像按照相似性准则分成不同的区域,主要包括种子区域生长法、区域分裂合并法和分水岭法等几种类型。
种子区域生长法是从一组代表不同生长区域的种子像素开始,接下来将种子像素邻域里符合条件的像素合并到种子像素所代表的生长区域中,并将新添加的像素作为新的种子像素继续合并过程,直到找不到符合条件的新像素为止。该方法的关键是选择合适的初始种子像素以及合理的生长准则。
区域分裂合并法的基本思想是首先将图像任意分成若干互不相交的区域,然后再按照相关准则对这些区域进行分裂或者合并从而完成分割任务,该方法既适用于灰度图像分割也适用于纹理图像分割。
分水岭法是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。该算法的实现可以模拟成洪水淹没的过程,图像的最低点首先被淹没,然后水逐渐淹没整个山谷。当水位到达一定高度的时候将会溢出,这时在水溢出的地方修建堤坝,重复这个过程直到整个图像上的点全部被淹没,这时所建立的一系列堤坝就成为分开各个盆地的分水岭。分水岭算法对微弱的边缘有着良好的响应,但图像中的噪声会使分水岭算法产生过分割的现象。
4、基于图论的分割方法
此类方法把图像分割问题与图的最小割(min cut)问题相关联。首先将图像映射为带权无向图G=<V,E>,图中每个节点N∈V对应于图像中的每个像素,每条边∈E连接着一对相邻的像素,边的权值表示了相邻像素之间在灰度、颜色或纹理方面的非负相似度。而对图像的一个分割s就是对图的一个剪切,被分割的每个区域C∈S对应着图中的一个子图。而分割的最优原则就是使划分后的子图在内部保持相似度最大,而子图之间的相似度保持最小。基于图论的分割方法的本质就是移除特定的边,将图划分为若干子图从而实现分割。基于图论的方法有GraphCut,GrabCut和Random Walk等。
5、基于能量泛函的分割方法
该类方法主要指的是活动轮廓模型(active contour model)以及在其基础上发展出来的算法,其基本思想是使用连续曲线来表达目标边缘,并定义一个能量泛函使得其自变量包括边缘曲线,因此分割过程就转变为求解能量泛函的最小值的过程,一般可通过求解函数对应的欧拉方程来实现,能量达到最小时的曲线位置就是目标的轮廓所在。按照模型中曲线表达形式的不同,活动轮廓模型可以分为两大类:参数活动轮廓模型(parametric active contour model)和几何活动轮廓模型(geometric active contour model)。
参数活动轮廓模型是基于Lagrange框架,直接以曲线的参数化形式来表达曲线,最具代表性的是由Kasset a1(1987)所提出的Snake模型。该类模型在早期的生物图像分割领域得到了成功的应用,但其存在着分割结果受初始轮廓的设置影响较大以及难以处理曲线拓扑结构变化等缺点,此外其能量泛函只依赖于曲线参数的选择,与物体的几何形状无关,这也限制了其进一步的应用。
几何活动轮廓模型的曲线运动过程是基于曲线的几何度量参数而非曲线的表达参数,因此可以较好地处理拓扑结构的变化,并可以解决参数活动轮廓模型难以解决的问题。而水平集(Level Set)方法(Osher,1988)的引入,则极大地推动了几何活动轮廓模型的发展,因此几何活动轮廓模型一般也可被称为水平集方法。
以上是关于特征类型和图像分割的主要内容,如果未能解决你的问题,请参考以下文章