2.1 图像预处理
2.1.1 图像滤波
图像滤波的目的是消除或者抑制图像中的噪声,从而实现图像增强。噪声的产生方式有很多,可能由图像传输过程中的信号干扰、相机自身的原因和拍摄过程中的抖动等造成。噪声主要分为高斯噪声、脉冲噪声(也称为椒盐噪声)、散斑噪声等。一个好的图像滤波算法会在尽可能去除噪声的同时最大限度保留图像细节信息。最常见和最基本的图像滤波方法有均值滤波、中值滤波、高斯滤波、BM3D滤波(Block Matching and 3D filtering,三维块匹配滤波)和双边滤波等。
1. 均值滤波
均值滤波是线性滤波中最简单的一种,处理之后的图像像素值是根据要处理的像素邻域的像素值来决定的,即每一个像素值用该像素邻域中所有像素的灰度平均值来代替。均值滤波的操作可以表示为
式中,b(x,y)是均值滤波之后图像上的像素灰度值;a(r,c)是输入图像的像素灰度值,即要进行均值滤波的图像;m、n为所用模板的大小;Txy为所使用的均值滤波模板;(r,c)为均值滤波模板中的像素坐标。
常用的均值滤波模板有两种,第一种是计算模板内像素灰度值的平均值
第二种是对模板所覆盖的像素灰度值加上了权重,即每个像素值对结果的影响不一样,权重大的像素对结果的影响比较大,具体如
均值滤波在对图像进行平滑的同时会把阶跃变化的灰度值平滑为渐进变化,这就造成了图像细节信息的严重丢失,将导致边缘提取定位精确度的下降。滤波之前将图像作为二元函数绘制出来的函数图像如图2-1所示,均值滤波后的图像如图2-2a所示,均值滤波后图像的伪彩色效果如图2-2b所示。从图2-1和图2-2b可以看出图像滤波使图像变得光滑,减少了噪声。
图2-1 未滤波前的图像
图2-2 均值滤波后的图像及其伪彩色效果
a)均值滤波后的图像 b)均值滤波后图像的伪彩色效果
2. 中值滤波
图像的中值滤波是另一种用来消除图像噪声以减少其对后续处理影响的操作。它使用的也是一个模板,在图像上平移模板并对模板内的像素灰度值按照大小进行排序,然后选取排在中间位置的数值,将它赋值给图像的待处理像素。如果模板由奇数个元素组成,那么中值就取排序之后中间位置元素的灰度值。如果模板有偶数个元素,中值就取排序之后中间两个灰度值的平均值。中值滤波的模板通常采用奇数个元素,这样便于计算和编程实现。对于边界的处理,可以将原图像的像素直接复制到处理之后图像的对应位置,或者将处理之后的图像边界像素灰度值直接改为0。中值滤波可以表示为
中值滤波在去除椒盐噪声(即脉冲噪声)方面很有效,同时又能保留图像的细节特征,如边缘信息。中值滤波后的图像如图2-3a所示,中值滤波后的伪彩色效果如图2-3b所示。
图2-3 中值滤波后的图像及其伪彩色效果
a)中值滤波后的图像 b)中值滤波后的伪彩色效果
3. 高斯滤波
高斯滤波属于频域滤波,它是由高斯函数的形状来选择权值的。高斯滤波对一维的高斯分布通常表示为
二维的分布函数为
式中,σ是标准差。
对于图像处理,通常使用二维的高斯函数。图像进行高斯滤波之后的平滑程度和标准差有很大的关系:标准差越大,高斯滤波器的频带就越宽,图像就被平滑得越好。通过调节标准差可以很好地处理图像中噪声所引起的欠平滑。由于二维高斯函数的旋转对称性,高斯滤波在每个方向上的平滑程度是相同的。对于一幅图像,计算机无法事先知道图像的边缘方向信息,因此高斯滤波是无法确定在哪个方向上需要做更多平滑的。高斯函数具有可分离性,使得高斯函数卷积可以分为两步来实现,首先用一维高斯函数和图像进行卷积,然后将卷积的结果与另一个方向的一维高斯函数卷积,这样可以将算法的时间复杂度从O(n2)降低到O(n),从而大大提高计算效率。
理论上,高斯分布在任何位置都是非零值,但是如果这样的话,高斯模板将是一个无限大的模板,因此在实际应用中,高斯模板的构建只要满足取值在均值的3倍标准差之内就可以。通常高斯模板的大小为3×3或5×5,它们的权值分布为
高斯滤波后的图像如图2-4a所示,高斯滤波后的伪彩色效果如图2-4b所示。
图2-4 高斯滤波后的图像及其伪彩色效果
a)高斯滤波后的图像 b)高斯滤波后的伪彩色效果
4. BM3D滤波
BM3D滤波是一种性能优越的图像滤波算法,它包含了非局部和变换域两种思想。该方法通过与相邻图像块进行匹配,将若干相似的块整合为一个三维矩阵后在三维空间进行滤波,再将结果反变换融合到二维,得到滤波后的图像。作为一种非常有效的图像滤波算法,BM3D滤波成为其他新的滤波算法竞相比较的对象。此外,BM3D滤波还扩展到了图像处理的其他领域,如图像去模糊、压缩传感和超分辨率重构等。
BM3D滤波算法的实现分为两个步骤。
(1)第一步:基础估计
首先将图像窗口化,设定若干参考块,计算图像参考块和与其他图像块之间的距离,再根据这些距离寻找若干差异最小的块作为相似块,将相似块归入对应组,形成一个三维矩阵。得到若干个参考块的三维矩阵后,首先将每个矩阵中的二维块进行二维变换编码(可采用Wavelet变换、DCT变换等)。二维变换结束后,在矩阵的第三个维度进行一维变换。通过分组和滤波得到的每一个块的估计可能是重叠的,所以需要对这些重叠的块进行加权平均,这一过程称为聚集。
(2)第二步:最终估计
第二步与第一步类似,但在块匹配时是用第一步的结果图即基础估计进行匹配。通过块匹配,每个参考块形成两个三维矩阵:一个是通过基础估计形成的,另一个是通过本次匹配的坐标在噪声图上整合出来的。然后两个三维矩阵都进行二维、一维变换。为了获得更好的结果,通常最终估计的二维变换采用离散余弦变换。用维纳滤波对噪声图形成的三维矩阵进行缩放,缩放系数通过基础估计的三维矩阵值以及噪声强度得出。滤波后再通过反变换将噪声图的三维矩阵变换回图像估计,之后通过与第一步类似的聚集操作复原出二维图像而形成最终估计,这样就得到了BM3D滤波后的图像。
5. 双边滤波
二维图像的双边滤波算法是指利用当前待处理像素邻域内各个像素灰度值的加权平均值来代替当前像素的灰度值,加权平均过程中采用的权重因子不仅与两像素间的欧式距离有关,也与两像素的灰度值差异有关。双边滤波算法的优点是既可以对图像噪声进行抑制,又可以有效保留图像的边缘细节特征。假设p是数字图像I中的当前待处理像素,则二维图像双边滤波算法为
式中,Ib(p)是p经过双边滤波后的像素灰度值;q表示p的邻域像素点;I(q)是点q的像素灰度值;S为邻域像素的集合;GS(p,q)为空间邻近度因子;Gr(p,q)为灰度相似度因子。GS(p,q)和Gr(p,q)的表达式分别为
式中,(x,y)为图像像素坐标;(u,v)为中心点像素坐标;σS是基于高斯函数的空间距离标准差;σr是基于高斯函数的灰度标准差。
由式(2-8)和式(2-9)可见,双边滤波算法同时考虑了当前像素与周围像素的欧式距离和灰度相似性,因此邻域中与中心点距离更近、灰度更相似的像素被赋予较大的权重,反之则赋予较小的权重,这使得双边滤波算法具有距离各向异性和灰度各向异性,可以较好地保留细节特征。
2.1.2 二值化
1. 二值化基本原理
在数字图像处理中,二值图像占有非常重要的地位,在实际应用中以二值图像处理实现构成的系统是很多的。图像的二值化处理是将图像上像素的灰度值置为0或255(或者1),让整个图像呈现出明显的黑白效果,即将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值图像。
为了进行二值图像的处理与分析,首先要把灰度图像二值化。二值图像的集合性质只与灰度值为0或255的像素位置有关,而不再涉及像素的多级值,使处理变得简单。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度值大于或等于阈值的像素被判定为属于特定物体,其灰度值设为255,否则这些像素被排除在物体区域以外,灰度值设为0,表示背景或者另外的物体区域。如果某个物体内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阈值法就可以得到较好的分割效果。如果物体同背景的差别不表现在灰度值上(比如纹理不同),则可以将这个差别特征转换为灰度的差别,然后利用阈值法来分割该图像。
2. 二值化处理方法
图像二值化是图像分析与处理中最常见、最重要的处理手段之一。最常见的二值化处理方法是计算像素灰度值的平均值T,扫描图像的每个像素灰度值并与T比较,大于T时设为1(白色),否则设为0(黑色),即
公式(2-10)使用平均值作为二值化阈值可能导致部分物体像素或者背景像素丢失。为了解决此问题,可使用直方图法来寻找二值化阈值。直方图是图像的重要统计特征,用直方图法选择二值化阈值主要是先找出图像的两个最高峰,然后将阈值取为这两处之间的波谷值。
Otsu方法由日本学者大津(Otsu)提出,也叫最大类间方差法。它主要依据图像的灰度特性将图像分成背景和目标两部分。背景区域和目标区域之间的类间方差越大,其差别也越大。当部分目标被误判为背景或部分背景被误判为目标时都会导致这两部分的差别变小,因此使得类间方差最大的阈值分割意味着误判的概率最小。
设图像的灰度级为L,灰度值为i的像素数为ni,图像总像素数为N。当取灰度值T作为阈值将图像分为目标A与背景B两个区域时,这两个区域的像素数在图像中的占比分别为
如果A、B区域的平均灰度分别为uA和uB,图像的平均灰度为u,则A、B区域的类间方差为
当阈值T从0~L-1中取不同值时,类间方差σ2最大时的阈值T即为最佳阈值。
图2-5为采用Otsu方法进行图像二值化处理的结果。
图2-5 采用Otsu方法进行图像二值化处理
该方法的主程序如下。
子程序如下。
2.1.3 边缘提取
为了对目标进行识别,要对滤波后的图像进行边缘提取,为之后的特征提取做准备。边缘提取是数字图像处理和机器视觉中的基本问题。对图像进行边缘提取后可以使用边缘特征来代表整个图像,这样做可以大大减少内存中的数据量,并且去除图像中和本次应用无关的一些特征。
边缘属于图像的高频信息,是灰度值发生跳变的位置。图像可以看作关于像素坐标(x,y)的二元函数,数字图像是二元离散函数。如图2-6所示,图像的边缘反映在二元函数上,就是函数的上升沿和下降沿,因此边缘的检测提取可以通过求函数导数的方式实现。
图2-6 图像的边缘信息
a)圆环外部边缘 b)圆环内部边缘
1. 常见的边缘检测模板
数字图像的二元函数是离散函数,该函数的变量最小增量都是以一个像素为单位。因此图像的二元函数一阶导数表示为
图像的二阶导数可以表示为
在机器视觉的实际应用中,通常采集到的图像边缘部分是平滑的,即灰度值是缓慢改变而不是阶跃变化的。在这种情况下,边缘通常不是只有一个像素的宽度,而是由渐变过程中的一组像素组成的。
空间模板被用来求解图像中每个像素位置的一阶导数或者二阶导数。对于3×3的模板,处理过程通常是将模板的权值与模板所覆盖的图像像素值对应相乘再求和,即加权求和,具体公式为
式中,zi是模板所覆盖的图像像素i的灰度值。
常用的模板有Prewitt模板、Sobel模板和Laplacian模板等。Prewitt模板、Sobel模板和Laplacian模板分别为
其中,Prewitt模板和Sobel模板比较相似,都是分别对x方向和y方向求导数。对于Prewitt模板,导数可以通过将Prewitt两个方向上的模板对图像进行卷积得到
和
即第三行和第一行的差分近似等于x方向上的导数,而第三列和第一列的差分近似等于y方向上的导数。
Sobel模板是Prewitt模板的一个衍变,通过将中心位置的1变换为2,Sobel模板可以对图像进行平滑处理。Sobel的处理过程为
和
尽管Prewitt模板和Sobel模板只是在权值上有很小的差异,但就是因为权值上的这个小差异使得Sobel模板具有更好的噪声抑制作用,这也使得Sobel模板比Prewitt模板应用更广泛。还要注意到这两个模板中的所有权值之和等于0,这样对于图像中灰度值都是同一个常量的区域,进行卷积后得到的值也是0,这和微分算子是一样的。
Laplacian模板是基于二阶导数的边缘检测方法,Laplacian是最简单的一种各向同性的微分算子,对于二元函数f(x,y),即图像f(x,y),Laplacian算子可以定义为
由于任意阶的导数都是线性操作,所以Laplacian是一种线性算子。将式(2-22)转换成离散形式,在x方向可得
同样,在y方向上可得
由式(2-22)~式(2-24)可得离散Laplacian算子为
从式(2-25)便可得到Laplacian模板。
图2-7a所示为原始图像,应用Sobel模板和Laplacian模板对图像进行边缘检测的结果如图2-7b和图2-7c所示。
图2-7 边缘检测效果
a)原始图像 b)Sobel模板边缘检测的结果 c)Laplacian模板边缘检测的结果
2. Canny边缘检测
Canny边缘检测对于边缘的提取有很好的效果。Canny边缘检测方法有以下3个最基本的目标。
1)低错误率。所有的边缘都可以被检测到,没有检测到的错误边缘,即尽可能避免将不是边缘的像素点误认为是边缘。信噪比(Single-to-Noise Ratio,SNR)的数学表达式为
可见,信噪比越小,边缘的误检率就越小。式中,G(x)为边缘函数;f(x)是边界为[-ω,+ω]的滤波器的脉冲响应;σ是高斯(Gaussian)噪声的均方根。
2)边缘位置应尽可能接近真实场景中的边缘,即定位边缘的精度要高。也就是说,要求通过Canny边缘检测法检测到的边缘点和实际边缘中心的距离最小。数学表达式为
3)最终得到的边缘宽度是单个像素的宽度。Canny边缘检测得到的边缘只有一个像素的宽度,如果边缘处有一个像素的边缘存在和多个像素的边缘存在,那么Canny边缘检测将会选择最小的边缘,即一个像素宽度的边缘。也就是说Canny边缘检测的脉冲响应导数的零交叉点平均距离要满足
Canny边缘检测通过高斯函数的一阶导数去逼近求解,从而达到以上的目标。
高斯函数为
Canny检测边缘的处理过程如下。
(1)用高斯滤波器对输入图像进行平滑处理
由于图像是二维的,在对图像进行平滑滤波的时候,选用二维高斯函数,见式(2-29)。对G(x,y)和f(x,y)执行卷积操作就可以得到平滑滤波后的图像。
(2)计算梯度的模和梯度方向
式中,gx和gy分别是x方向和y方向上的一阶导数,可以通过式(2-18)和式(2-19)或者式(2-20)和式(2-21)求得;M(x,y)为梯度的模。
求得gx和gy之后可以求取梯度的方向
需要注意的是M(x,y)和α(x,y)是和所处理的图像大小一样的矩阵。
(3)对梯度的模M(x,y)应用非极大值抑制
M(x,y)是梯度的模,因此在M(x,y)图像中有很多屋脊带,为了确保得到的边缘定位准确,需要对所得到的M(x,y)进行细化,这一处理过程可以利用非极大值抑制来实现。非极大值抑制法的本质是将边缘的梯度方向划分为几个单独分离的方向区域,对于3×3的区域可以划分边缘的梯度方向为8个区域,每个区域为45°的范围,如图2-8所示。
图2-8 Canny边缘检测梯度方向的划分
在进行非极大值抑制的时候,首先要找到边缘的梯度方向在以上8个区域中的哪一个区域内,以确定M(x,y)要沿哪个方向和近邻值比较。确定梯度方向后,比较M(x,y)的值和它沿梯度方向的两个邻域值,如果邻域值中有一个比M(x,y)大,就说明该点不是局部最大值,gN(x,y)= 0;如果M(x,y)大于这两个邻域值,则gN(x,y)=M(x,y)。其中,gN(x,y)是对M(x,y)图像进行非极大值抑制后的图像。
(4)双阈值处理和连通性分析
这一操作是为了减少错误的边缘点。采用普通的单阈值处理时,如果阈值选得太小,那么一些错误的边缘仍然会被保留下来;如果阈值选得太大,那么一些真实的边缘点将会被消除。Canny边缘检测通过双阈值处理克服了这些问题。首先选取合适的高低阈值TH和TL,如果gN(x,y)≥TH,那么该点一定是边缘上的点;如果gN(x,y)≤TL,那么该点一定不是边缘上的点;如果TL≤gN(x,y)≤TH,那么就判断该点的8邻域中有没有大于高阈值TH的像素,如果有,那么该点就是边缘点,如果没有,那该点就不是边缘点。
Canny边缘检测效果如图2-9所示。
图2-9 Canny边缘检测效果
3. 霍夫变换直线检测
(1)霍夫变换基本原理
霍夫(Hough)变换是图像处理技术中从图像中识别几何形状的基本方法之一。霍夫变换的基本原理是利用点与线的对偶性,通过曲线表达形式把原图像空间的曲线变换为参数空间的一个点,这样就把原空间中的图像检测问题转化为寻找参数空间中点的峰值问题,即把检测整体特性转化为检测局部特性。
霍夫变换在两个不同空间中的点-线对偶性如图2-10所示。
图2-10 x-y空间与k-b空间的点-线对偶关系
从图2-10中可看出,x-y平面和k-b平面有点-线的对偶性。x-y坐标系中的点P1、P2对应k-b坐标系中的线L1、L2,而k-b坐标系中的点P0对应x-y坐标系中的线L0。
在实际应用中,y=kx+b形式的直线方程无法表示为x=c形式的直线(此时直线斜率为无穷大),为了使变换域有意义,采用直线的极坐标方程来解决这一问题,直角坐标系x-y中点(x,y)的极坐标方程为
式中,ρ是直线到坐标原点的距离;θ是直线垂线与x轴的夹角。
这样,原图像平面上的点就对应到了ρ-θ平面的一条曲线上,如图2-11所示,而极坐标系ρ-θ上的点(ρ,θ)对应直角坐标系x-y中的一条直线,而且它们是一一对应的。为了检测出直角坐标系x-y中由点构成的直线,可以将极坐标系ρ-θ量化成若干大小相等的小格,这个网格对应一个计数阵列。根据直角坐标系中每个点的坐标(x,y),按上面的原理在ρ-θ平面上画出它对应的曲线,凡是这条曲线所经过的小格,对应的计数阵列元素加1。当直角坐标系中全部的点都变换后,对小格进行检验,计数值最大的小格(ρ,θ)值所对应的直角坐标系中的直线即为所求直线。
图2-11 直线y=x+5上的4个点在极坐标系ρ-θ中对应的4条曲线
直线是图像的基本特征之一,对图像直线检测算法进行研究具有重要的意义。一般物体平面图像的轮廓可近似为直线及弧的组合,因此对物体轮廓的检测与识别可以转化为对这些基元的检测与提取。另外在运动图像分析和估计领域也可以采用直线对应法实现刚体旋转量和位移量的测量。
(2)利用霍夫变换进行直线检测的MATLAB程序实现
运行结果如图2-12所示。
图2-12 Hough直线检测结果
a)原始图像 b)Hough矩阵和峰值点 c)检测出的直线段