图像处理是计算机视觉的一个子集。计算机视觉系统利用图像处理算法对人体视觉进行仿真。例如,如果目标是增强图像以便以后使用,那么这可以称为图像处理。如果目标是识别物体、汽车自动驾驶,那么它可以被称为计算机视觉。
ImageProcessing更多的是图形图像的一些处理,图像像素级别的一些处理,包括3D的处理,更多的会理解为是一个图像的处理;而机器视觉呢,更多的是它还结合到了硬件层面的处理,就是软硬件结合的图形计算的能力,跟图形智能化的能力,我们一般会理解为他就是所谓的机器视觉。
而我们今天所说的计算机视觉,更多的是偏向于软件层面的计算机处理,而且不是说做图像的识别这么简单,更多的还包括了对图像的理解,甚至是对图像的一些变换处理,当前我们涉及到的一些图像的生成,也是可以归类到这个计算机视觉领域里面的。
所以说计算机视觉它本身的也是一个很基础的学科,可以跟各个学科做交叉,同时,它自己内部也会分的比较细,包括机器视觉、图像处理。
图像分割技术之图像边缘检测:
我对图像边缘检测的理解:人的视觉上就是把图像中的一座房子的边缘给画出来,大多数是房子的线条,这是宏观上的理解。让我们抽象到微观世界中,为什么能够检测出一条线呢?那是因为存在灰度级间断,就是说这条线两边的像素点都处于一个阶跃跳变状态(一部分显示黑,一部分显示白色,可以想象成一个台阶吧),那是理想模型,往往是因为物理硬件问题是无法达到骤变的效果,而是一个斜坡式的上升。那么我们可以对它进行求导了。一阶导数:可以判断是否是边界 二阶导数:可以判断是在黑的那部分还是白的那部分。
明白了抽象状态的边缘组成状况,那么可以去拿算子来对图片进行检测了。简单说一下算子吧,可以理解为一个模(mu)子,也就是个模型,你拿着这个模子从图像的左上角,从左往右,一行一行的进行匹配,中间会进行一个计算,算出的值如果大于阈值的话那么就会报警说:“我是边缘“,然后把那个像素的值改成256,如果不是边缘的话,那就把值设置成0。基本的理解是这样吧。
Roberts,Prewitt,Sobel算子都是比较传统的算子相对来说比较好理解,课本上讲的比较详细。提供一下matlab实现的基本方法吧:
1.读入图片数据
2.实现图像矩阵的归一化操作mat2gray(img)
3.设置一个图像的边缘像素
4.经过roberts算子得到的每个像素的值
5.设置阈值
进入双层for循环,让3*3算子一行一行进行遍历 ,遍历之后执行算子,然后将数值对阈值进行比对,如果超过那么为白 ,如果没有超过为黑。最后输出在图像处理中噪声的影响其实是很大的,对于loG算子和canny算子都先进行了高斯滤波,目的是让图像变得更平滑(实现的话可以采用edge算法(edge算法只能处理double的图形,找到的方法是先对图像进行二值变化(im2bw),然后再去对图形进行double转换然后再使用edge方法)edge方法封装了这些算子,方便实用。
图像分割:2.基于边缘检测的图像分割方法:
一、图像边缘检测原理
基本思路:基于边缘检测的图像分割方法的基本思路是先确定图像中的边缘像素,然后再把这些像素连接在一起就构成所需的区域边界。
图像边缘:图像边缘,即表示图像中一个区域的终结和另一个区域的开始,图像中相邻区域之间的像素集合构成了图像的边缘。所以,图像边缘可以理解为图像灰度发生空间突变的像素的集合。图像边缘有两个要素,即:方向和幅度。沿着边缘走向的像素值变化比较平缓;而沿着垂直于边缘的走向,像素值则变化得比较大。因此,根据这一变化特点,通常会采用一阶和二阶导数来描述和检测边缘。
综上,图像中的边缘检测可以通过对灰度值求导数来确定,而导数可以通过微分算子计算来实现。在数字图像处理中,通常是利用差分计算来近似代替微分运算。
二、微分算子
常用的一阶微分算子有Roberts、Prewitt、Sobel等算子,常用的二阶微分算子有Laplace和Kirsh等算子。在实际处理操作中常用模板矩阵与图像像素值矩阵卷积来实现微分运算。
由于垂直边缘的方向上的像素点和噪声都是灰度不连续点,所以变换到频域时,在频域均为高频分量,直接采用微分运算不可避免地会受到噪声的很大影响。因此,微分算子只适用于图像噪声比较少的简单图像。针对此问题,LoG算子(Laplace
of Gaussian)和Canny算子采取的方法是,先对图像进行平滑滤波,然后再用微分算子与图像进行卷积操作,这样处理会得到比较好的边缘检测结果。其中,LoG算子是采用Laplacian算子计算高斯函数的二阶导数,Canny算子是高斯函数的一阶导数,两种算子在抑制噪声和检测边缘之间取得了比较好的平衡。
[if !vml]
[endif]
LoG算子的特点:
1. 图像与高斯滤波器进行卷积,既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除。
2. 在边缘检测时则仅考虑那些具有局部梯度最大值的点为边缘点,用拉普拉斯算子将边缘点转换成零交叉点,通过零交叉点的检测来实现边缘检测。
3. 缺点是在过滤噪声的同时使得原有的边缘一定程度上被平滑了。
5、canny算子
Canny算子检测边缘点的方法基本思想是寻找图像梯度的局部最大值。
评价一个边缘检测算子的,一般考虑如下三个指标:
1. 低失误概率:在尽可能把所有边缘检测到的同时,减少将非边缘误判为边缘;
2. 高位置精度:检测出的边缘是真正的边界,检测到的边缘位置足够精确;
3. 检测得到的边界是单像素宽。
针对这三个指标,Canny在设计检测算子时提出了边缘检测算子的三个准则:
1. 信噪比准则;
2. 定义精度准则;
3. 单边缘响应准则。
遵循这三个准则,Canny算子设计实现的步骤如下:
(1)首先用高斯滤波模板进行卷积以平滑图像;
(2)利用微分算子,计算梯度的幅值和方向;
(3)对梯度幅值进行非极大值抑制。即遍历图像,若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大,那么这个像素值置为0,即不是边缘;
(4)使用双阈值算法检测和连接边缘。即使用累计直方图计算两个阈值,凡是大于高阈值的一定是边缘;凡是小于低阈值的一定不是边缘。如果检测结果大于低阈值但又小于高阈值,那就要看这个像素的邻接像素中有没有超过高阈值的边缘像素,如果有,则该像素就是边缘,否则就不是边缘。
[if !vml]
[endif]
从左到右依次是原图、roberts、prewitt、sobel、LoG、canny
结论:边缘检测还是比较适用于噪声比较小的图像中,对于复杂图像不是很合适,二阶微分算子对噪声十分的敏感。
Sobel边缘检测和边缘细化
在对图像进行边缘检测处理时,得到的结果并不是理想的边缘,而是一幅灰度图像。有时在进行图像识别的时候需要获得图像的单点宽边缘,这就需要对边缘检测的结果进行细化增强。
Sobel边缘细化的原理
图像的边缘检测处理可以简单理解为提取图像中区域的轮廓。图像中区域的划分以像素灰度为依据,每个区域中的像素灰度大致相同,而区域之间的边界就称为边缘,寻找这些边缘就是图像边缘检测的目的。图像边缘检测的结果直观地看类似图像的骨架,对图像边缘检测结果的细化是图像边缘细化很好的示例,如图11-27所示,其中a为原始图像,b为a图像的Sobel边缘检测结果。
[if !vml]
[endif]
从图11-27中可以看出,Sobel边缘检测的结果能用线条较好地描述图像,源图像中对比度较高的区域在结果图中体现为高灰度的像素,简单地说就是对源图像进行了“描边”操作。在进行图像细化时,最直接的思路就是对线条宽度进行缩减,然而图像中的线条往往是不规则的,这使得直接对线条进行处理的方法很难实现。
换一种思路,如果把Sobel边缘检测结果中的轮廓线条看作一个高灰度区域,那么如果能够对这个区域的边缘进行某种切割,使这个区域收缩,就可以实现图像线条的细化。考虑对Sobel边缘检测的结果S1再次进行Sobel边缘检测,则可以得到一幅双线条的边缘图像S2,而S2中双线条所覆盖的区域正好是S1中高灰度区域的边缘,如果用从S1中去除S2中的高灰度部分,得到的结果就恰好是S1的一个细化结果。这样的细化过程可以进行多次,进行次数越多,得到的细化图像线条就越细,但同时图像的信号强度也就越弱。图11-28中a、b显示了对图11-27中a分别进行一次和两次边缘检测的结果,c显示了对a、b进行减法运算的结果。[if !vml]
[endif]
从图中不难看出,虽然通过两次边缘检测和减法运算可以使边缘图像被很大程度地细化,然而代价却是图像信息的大量丢失。为了弥补这一缺陷,可以对图像进行多次边缘检测,然后得到多组减法结果,并将这些结果相加。通过这样的方法可以在一定程度上对细化结果进行增强,然而也很容易为细化结果引入杂点。
图像的细化同样可以利用邻域分析的方法来完成,考虑在图像的3×3邻域中,如果邻域内有5个以上的可见像素,那么此邻域中一定包含宽度超过1像素的线条,而如果此邻域中仅有3个或3个以下的可见像素,那么此邻域中一定只包含单点宽度的线条。图11-29中列举了几种不同邻域像素的情况,其中1表示可见像素,0表示背景,分析可知a中邻域可见像素只有3个,所以一定不包含宽度超过1的线条,而b中邻域的可见像素数目大于5个,所以b中一定包含宽度超过1的线条,c、d中邻域的可见像素数目都在3~5之间,c中邻域包含宽度超过1的线条,而d中邻域却不包含。
[if !vml]
[endif]
在图像细化中,如果能够根据邻域内像素灰度情况,判定邻域的中心像素存在的必要性,那么基于邻域分析的图像细化处理就不难实现。在灰度图像的处理中,像素不能简单地用存在或不存在来描述,这为图像细化的邻域带来了一定的麻烦。在灰度图像中,若定义背景色为0灰度,那么灰度越高的像素越容易被人眼感知,对图像也就越重要,在图像细化中应优先保留。
不妨借助统计排序滤波器的思想,在决定中心像素是否保留的时候,先对邻域内像素按灰度进行排序,设定阈值K,若邻域的中心像素在序列中的次序小于K,则说明中心像素在邻域内较为重要需要被保留,否则就对中心像素进行删除。这样处理就限制了处理结果中每个邻域内仅包含的可见像素数目,对于3×3邻域,若设定K为3,则可限制图像细化的结果中尽可能只包含宽度为1的线条。在实践中可以通过调整K的值来控制细化的程度。如图11-30所示,其中a为图像的Sobel边缘检测结果,b、c为利用邻域分析的方法分别选取K=3、K=5对a进行细化的结果。
[if !vml]
[endif]
经过边缘细化的图像常常存在低灰度的杂点干扰,同时,为了提高图像边缘细化结果的对比度,可以对图像进行二值化处理,最终得到清晰的边缘细化结果。