李华琛
摘要:数字图像边缘检测技术是信息科学中近些年来发展最为迅速的学科之一。图像边缘是图像最基本的特征之一,在图像分割、图像识别以及其他图像相关等领域中有着广泛的应用,其主要图像处理方法就是精确定位图像其边缘,同时利用高斯滤波有效地抑制噪声。边缘检测是图像处理和计算机视觉中的一个重要分支,并且它也在图像的分析中有着重要的意义,边缘检测的原理是识别图像中亮度改变较为明显的点,其本质是采用不同的算子进行边缘检测并进行修整。本文就是基于visual studio 2013和opencv通过C++综合实现编程,分别用不同的算子,例如Laplacian算子、Scharr算子和Canny算子来实现静态图像的边缘检测,并且在检测结束时进行算法运行结果的比对,在一些应用实践中选择出适合的算法。
关键词:opencv 边缘检测 算子
中图分类号:TG409 文献标识码:A 文章编号:1007-9416(2016)11-0040-01
随着数字计算机和计算机技术的发展和普及,数字图像处理也迎来了快速发展时期,而数字图像处理就是利用数字计算机以及其它的硬件设备对图像信息转换而获得电信号进行简单的数学处理,以便提升图像的实用性。随着时代的进步,边缘检测的精度和速度都在不断提高,但是在边缘较为复杂的情况下,常规的检测算子无法检测出所有类型的边缘;而现今有些产品的要求是对某些较为明显的轮廓有较高程度的要求,比如说人和景物的轮廓精确识别,其他浅显的线条可以忽略等等不同的设计要求往往需要不同的算法才能达到目的。故而如今边缘检测在某些方向的应用如检测工业检工件的边沿、摄像机人脸轮廓选定等方面仍有巨大的发展空间。
1 边缘检测原理
边缘是指图像像素进行灰度后阶跃变化或类屋顶状变化的像素集合,它经常存在于目标与背景、目标与目标、基元与基元,以及区域与区域之间。 因此它是图像处理的首要任务,同样还是图像形状特征的基础;图像的其他特征都是由边缘和区域这些基本特征推导出来的。边缘具有方向以及幅度两个特征。如果沿边缘方向,像素值变化相对平缓;而垂直与边缘方向,则像素值变化又相对剧烈。而这种程度的剧烈有可能呈现斜坡状,也可能呈现阶跃状。 边缘上像素值的一阶偏导偏大;二阶偏导在边缘处值接近于零,则结果呈现零交叉。最简单的边缘检测方法是对原始图像按像素其邻域构造边缘算子。因为初始图像包含噪声,但是边缘和噪声的空间域表现为灰度有明显的起落;在频域通常的反应为同是高频分量,这就给图像的边缘检测带来了很多麻烦。
2 算子原理和使用流程
对图像进行边缘检测需要达到两个基本条件:首先能够有效地消除噪声;再而准确确定边缘的位置。
(1)Canny边缘检测算子是根据对信噪比与定位乘积进行检测,从而得到最优化算子。它的实现流程是①平滑图像,抑制噪声;②计算梯度方向和幅值;③非极大值抑制;④滞后其阈值。
(2)Laplacian 算子是欧几里德空间中常用的二阶微分算子,它的实现步骤是①对变量进行定义;②使用高斯滤波消除噪声;③转换为灰度图;④使用Laplace函数;⑤计算绝对值,并将结果转换成8位。
(3)scharr算子在某种程度上来说,更应该算是一个滤波器,而不是算子,它在opencv中主要是配合Sobel算子而存在。它的实现流程与Sobel算法相似,但最后会进行一个有目的的滤波过程。
3 部分程序及分析
Blur(edges3, edges3, 7); // 定义滤波处理后的图像
cvtColor(frame, edges1, CV_BGR2GRAY); //颜色转换函数,彩色转为灰色
Canny(edges1, edges1, 0, 30, 3); //canny算子边缘检测,阈值为0,30
Laplacian(src1_gray,dst,CV_16S,3,1,0, BODER_DEFAULT); // Laplacian算子边缘检测
Scharr(src,grad_x,CV_16S,1,0,1,0, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
Scharr(src,grad_y,CV_16S,0,1,1,0, BORDER_DEFAULT); cvtColor(src1, src1_gray, CV_RGB2GRAY);
convertScaleAbs(grad_y,abs_grad_y); // Scharr算子边缘检测
Laplacian(src1_gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT)。
4 实验结果
因本实验的初衷是对对象按不同的算子进行边缘检测并进行修整,在试验过程中发现对人像进行的处理可以达到素描的效果。
程序在树莓派上运行:四个显示框图分别代表了source(原始)图像、Canny算子、Laplacian 算子、首先对人进行检测(即实现了美拍效果)选取了2个样本,如图1所示。
5 实验结论(表1)
Canny算子不仅可以进行抗噪处理,还可以维持弱边缘化的一种算子,在本实验中改变了边缘检测算子对边缘的敏感性,此种算子对噪声的敏感性也会相应的改变。因此,Canny算法的抗干扰能力和边缘定位能力相互矛盾,找到一个恰当的 Canny算子的阈值,可以取得理想的效果。
用scharr算子进行边缘检测,相对更加简单方便,在生产实践中被大量使用。但是,scharr算子无法将图像的主体与背景严格地区分出来,因此提取的轮廓有时效果没有其它算法精确。当对提取结果精度要求比较低时,这种检测方法得到了广泛的应用。
使用Laplacian算子只需要考虑边缘的位置而不需对其周围的象素灰度差值时效果更好。Laplacian算子对一些孤立像素的响应要比对边缘的响应要效果跟好,一般用于无噪声的图像。
不同的算子有着不同的特点和提取效果,算子的评价指标也是基于低错误率,高定位性以及其最小响应,在实际工程中,也是利用其不同特点来进行边缘检测及图像处理。
参考文献
[1]刘瑞祯,于仕琪.OpenCV教程--基础篇[M].北京航空航天出版社,2008.
[2]陈胜勇,刘盛.基于OpenCV计算机视觉技术实现[M].北京:科学技术出版社,2008.