一、基础知识
分割将图像细分为构成它的子区域或物体。
多数分割算法均基于灰度值的两个基本性质:不连续性与相似性。
不连续性:以灰度突变为基础分割一副图像,比如图像边缘。
相似的灰度:根据一组预定义的准则把一副图像分割为相似的区域。
二、点、线和边缘检测
我们感兴趣的三种图像特征是孤立点、线和边缘。
一条线可视为一条边缘线段,该线两侧的背景灰度要么远亮于该线的像素灰度,要么远暗于该线的像素灰度。
孤立点可以看作长度宽度都为一个像素的线。
1、背景知识
数字函数的导数可用差分来定义,一维函数f(x)在点x处的导数近似为:
一维函数f(x)在点x处的二阶导数近似为:
a)一阶导数通常在图像中产生较粗边缘
b)二阶导数对精细细节,如 细线、孤立点和噪声又较强的响应
c)二阶导数在灰度斜坡和灰度台阶过度处会产生双边缘响应
d)二阶导数的符号可用于确定边缘是从亮变暗还是从暗变亮
2、孤立点检测
点的检测应以二阶导数为基础
拉普拉斯算子:
3、线检测
对于线检测,二阶导数将产生更强的响应,并产生比一阶导数更细的线,必须适当处理二阶导数的双线效应。
4、边缘模型
边缘检测是基于灰度突变来分割图像的常用方法。
台阶边缘:在1像素的距离上出现两个灰度级间的理想过渡。
斜坡边缘:指数字图像都存在被模糊且带有噪声的边缘,斜坡的斜度与边缘的模糊程度成正比。一个边缘点是斜坡中包含的任何点,一条边缘线段是一组已连接起来的这样的点。
屋顶边缘:屋顶模型是通过一个区域的线的模型,屋顶边缘的基底(宽度)由该线的宽度和尖锐度决定。
a) 一阶导数的幅度可用于检测图像中的某个点处是否存在一个边缘;
b) 二阶导数的符号可用于确定一个边缘像素是位于该边缘的暗侧还是位于该边缘的亮侧,为“正”在暗侧,为“负”在亮侧;
5、基本边缘检测
表现出f在(x,y)处的最大变化率方向。
任意点(x,y)处一个边缘的方向与该点处梯度向量的方向α(x,y)正交
x方向的偏导数:从底部一行的像素减去顶部一行的像素(0+0+0-0-1-1=-2)
y方向的偏导数:从右列的像素减去左列的像素(1+1+0-0-0-0=2)
梯度算子(一阶导数):
Roberts交叉梯度算子
具有对角优势的二维模板之一。
Prewitt算子
检测水平和竖直方向。
Sobel算子
与Prewitt模板类似,检测水平和竖直方向,但中心系数上使用一个权值2,中心位置处使用2可以平滑图像。
梯度的幅值可以简化为:
用于检测对角线方向边缘的Prewitt和Sobel算子
1、Roberts算子边缘定位精确度高,但易丢失一部分边缘,由于图像没经过平滑处理,故不具备抑制噪声的能力。该算子对具有陡峭边缘且含噪声少的图像效果较好。
2、Sobel算子和Prewitt算子都考虑了邻域信息,相当于对图像先做加权平滑处理,不同的是平滑部分的权值有差异,故对噪声具有一定的抑制能力,检测出的边缘容易出现多像素宽度。Prewitt模板比Sobel模板实现更简单,但Sobel模板抑制噪声能力更强。
3、当边缘检测的目的是突出主要边缘并尽可能保持连接时,实践中通常对图像先进行平滑处理,在边缘检测完之后,对边缘结果再进行阈值处理。
6、更先进的边缘检测技术
Marr-Hildreth边缘检测器
灰度变化与图像尺寸无关,因此它们的检测要求使用不同尺寸的算子;灰度的突变会在一阶导数中导致波峰或波谷,在二阶导数中引起零交叉。
二维高斯函数:
Marr-Hildreth边缘检测步骤:
1、对输入图像使用n*n高斯低通滤波器进行滤波;
2、计算滤波后图像的拉普拉斯;3、寻找g(x,y)的零交叉来确定f(x,y)中边缘的位置。
高斯低通滤波器大小的选择,即n值应是大于等于6σ的最小奇整数。
Canny边缘检测器
Canny算子力图在抗噪声干扰和精确定位之间寻求最佳这种方案。
Canny三个特点:1、低错误率2、边缘点应被很好地定位3、单一的边缘点响应
-22.5°到22.5°,-157.5°到157.5°叫水平边缘
非极大抑制:
算法步骤:
1、用一个高斯滤波器(n*n大小)平滑输入图像;
2、用一阶偏导的有限差分来计算梯度幅值图像和角度图像;
3、对梯度幅值图像应用非最大抑制;
4、用双阈值处理和连接分析来检测并连接边缘
7、边缘连接与边界检测
Hough变换
理想情况下,边缘检测应该仅产生位于边缘上的像素集合。实际上,由于噪声、不均匀照明引起的边缘间断,以及其他引入灰度值虚假的不连续的影响,这些像素并不能完全描述边缘特性。因此,一般是在边缘检测后紧跟连接算法,将边缘像素组合成有意义的边缘或区域边界。
Hough变换是一个非常重要的检测间断点边界形状的方法。通过将图像坐标空间变换到参数空间,来实现直线和曲线的拟合。
原理:
直角坐标参数空间
在x-y坐标空间中,经过点(xi,yi)的直线表示为yi = axi + b,a为斜率,b为截距。
通过点(xi,yi)的直线有无数条,对应的a和b也不尽相同。
若将xi和yi看作常数,将a和b看作变量,从x-y空间变换到a-b参数空间。则点(xi,yi)处的直线变为b = -xia + yi。x-y空间的另一点(xj,yj)处的直线变为b = -xja + yj。
x-y空间中的点在a-b空间中对应一条直线,若点(xi,yi)和(xi,yi)在x-y空间共线,则在a-b空间对应的两直线相交于一点(a’,b’)。反之,在a-b空间相交于同一点的所有直线,在x-y空间都有共线的点与之对应。
具体计算:
将a-b空间视为离散的。建立二维累加数组A(a,b),第一维是x-y空间中直线斜率的范围,第二维是直线截距范围。二维累加数组A也常被称为Hough矩阵。
初始化A(a,b)为0。
对x-y空间的每个前景点(xi,yi),将a-b空间的每个a带入b = -xia + yi,计算对应的b。
每计算出一对(a,b),对应的A(a,b) = A(a,b) + 1。
所有计算结束后,在a-b空间找最大的A(a,b),即峰值。峰值所对应的(a’,b’)参考点就是原图像中共线点数目最多的直线方程的参数。
出参考点后,整个目标的边界就可以确定了。
极坐标参考空间
使用直角坐标表示直线时,当直线为一条垂直直线或接近垂直直线时,该直线的斜率为无限大或接近无限大,故在a-b空间中无法表示,因此要在极坐标参考空间解决这一问题。
直线的法线表示为:xcosθ + ysinθ = ρ
ρ:直线到原点的垂直距离,取值范围为[-D,D],D为一幅图像中对角间的最大距离;θ:x轴到直线垂直线的角度,取值范围为[-90°,90°]。
极坐标中的Hough变换,是将图像x-y空间坐标变换到ρ-θ参数空间中。x-y空间中共线的点变换到ρ-θ空间后,都相交于一点。不同于直角坐标的是,x-y空间共线的点(xi,yi)和(xj,yj)映射到ρ-θ空间是两条正弦曲线,相交于点(ρ‘,θ’)。
具体计算时,也要在ρ-θ空间建立一个二维数组累加器A。除了ρ和θ的取值范围不同,其余与直角坐标类似,最后得到的最大的A所对应的(ρ,θ)。
Hough也能处理其他任意形状的函数。