⑵ OpenCV 视觉库
OpenCV 的全称是 Open Source Computer Vision Library,是开源发行的跨平台计算机视觉 库,可运行于 Windows、Linux 和 Mac OS 操作系统。由一系列的 C 函数和少量的 C++类构 成的,实现了计算机视觉和图像处理的许多算法,同时提供了面向 MATLAB、Ruby 和 Python 等语言的接口,高效且轻量级,且具有良好的可移植性。同时,其代码都经过了优化,可以 用于实时处理图像。
OpenCV 的模块主要包括:cv—核心函数库,cvaux——辅助函数库,cxcore—数据结构与 线性代数库,highgui—GUI 函数库,ml——机器学习函数库。其能实现的功能众多,如:图 像/视频的输入输出、图像数据的操作、基本图像处理、矩阵/向量数据操作及线性代数运算、 摄像头标定、运动分析、结构分析、目标识别、多种动态数据结构、基本的 GUI 和图像标注 等。
2。2。2 系统设计
在确定了各部分所需要使用的工具之后,可以根据具体功能需求确定系统的主要模块工 作流程图,如下图 2。3 所示。
图 2。3 模块工作流程图
3 主要算法介绍
瑕疵检测过程中采用的关键技术可以总结为以下几个方面:特征点的提取及其匹配,单 应,RANSAC 方法获取鲁棒单应,配准,边缘检测和自适应滤波。下面分别对这六个方面作 简要的技术介绍。
3。1 特征点提取及匹配
3。1。1 特征提取
在计算机视觉和图像处理中,常使用的特征点提取算法主要有以下三种:SIFT,SURF 和
ORB。
SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)[23]是一种检测局部特征的算 法,通过求取图像中的特征点及其相关尺度和方向的描述子得到特征并进一步实现图像特征 点匹配。具体而言,SIFT 采用 DOG 图像构建多尺度空间,然后利用非最大值抑制算法获取 多尺度空间中的极大/极小值点作为初步确定的特征点;然后通过拟合精细的模型精确特征点 的位置和尺度,选择对比度较高的特征点和相对较稳定的边缘响应点,其余剔除;接下来在 已确定的特征点的邻域内统计梯度直方图,从而获取特征点的主方向,分配给特征点;最后 在每个特征点周围取 16×16 的邻域,利用该邻域内的方向梯度提取出 128 维的特征向量作为 其描述子。SIFT 特征具有尺度不变性、旋转不变性和光照不变性的特点。
SURF(Speeded Up Robust Feature,加速鲁棒特征)[24]是 SIFT 特征的加速版本。与 SIFT 主要不同之处在于:1。SURF 在建立多尺度空间时采用的是 Hessian 矩阵行列式近似值图像来 进行采样的;2。在选取特征点主方向时,SURF 统计的是特征点邻域内的 Harr 小波特征,SIFT 统计的则是梯度直方图;3。计算描述子时,SURF 是将特征点邻域内的 Harr 小波特征统计为 64 维的描述子。由于以上改进,SURF 算子要比 SIFT 算子快数倍。
由于本系统采用了 ORB 特征提取算法,下面是该算法的详细介绍。
ORB 算法是 ORiented Brief 的简称,即是对 BRIEF 算法的改进版[25]。ORB 采用 FAST[29] 作为特征点检测算子,BRIEF 算法[30]来计算特征点的描述符。BRIEF 算法的优点在于速度快, 但是其不具备旋转不变性和尺度不变性,且对噪声敏感。
FAST 算法的核心思想就是找出那些特征鲜明突出的点,即拿一个点和它周围的点比较, 如果该点和其中大部分的点都不一样,就可以认为该点为一个特征点。FAST 的具体计算过程 是:
⑴ 从图像中选取一个像素点