OpenCV与图像处理(十)

2020-07-27 15:46:07 浏览数 (1)

本章节的主要内容是对之前分享的OpenCV与图像处理模块进行一个总结。


第一期主要内容:

1、图像视频实时读写显示

2、图像变换

3、卷积处理:图像增强和滤波去燥

图像处理是利用计算机对图像进行去噪、增强、复原、重建、编码、压缩、几何变换、分割,提取特征等的理论、方法和技术。图像处理中,输入的是低质量的图像,输出的是改善质量后的图像。

第二期主要内容:

4、图像分割:阈值二值化、边缘检测

图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内,表现出一致性或相似性,而在不同区域间表现出明显的不同。简单的讲,就是在一幅图像中,把目标从背景中分离出来,以便于进一步处理。分割是对图像进一步分析、识别的前提,分割的准确性将直接影响后续任务的有效性,其中阈值的选取是图像阈值分割方法中的关键技术。

1)阈值二值化

阈值二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。灰度值0:黑,灰度值255:白。阈值分割方法的核心在于如何寻找适当的阈值。最常用的阈值方法是基于灰度直方图的方法,如最大类间方差法(OTSU)、最小误差法、最大熵法等,直方图表示图像中具有每种灰度级的像素的个数。直方图方法选择二值化阈值主要是发现图像的两个最高的峰,然后在阈值取值在两个峰之间的峰谷最低处。

2)Canny算子

canny边缘检测的基本思想是:首先对图像选择一定的Gauss滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到最后的边缘图像。Canny算子力图在抗噪声干扰和精确定位之间寻求最佳折中方案。

Canny算子求边缘的具体算法步骤如下:

(1)用高斯滤波器平滑图像

(2)用一阶偏导有限差分计算梯度幅值和方向

(3)对梯度幅值进行非极大值抑制

(4)用双阈值算法检测和连接边缘

3)Sobel算子

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

4)Laplace算子

laplace算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉普拉斯变换是各向同性的二阶导数。在一阶导数的极值位置,二阶导数为0。可以用这个特点来作为检测图像边缘的方法。但是, 二阶导数的0值不仅仅出现在边缘,也可能出现在无意义的位置,可以过滤掉这些点。

第三期主要内容:

5、形态学处理:腐蚀、膨胀、开运算、闭运算、形态学梯度、顶帽操作、黑帽操作(用于二值化图像)膨胀与腐蚀是图像形态学最基础的两个操作,形态学的其它操作都是基于这两个操作基础上得到的,图像形态学是二值图像分析的重要分支学科。二值图像的腐蚀和膨胀就是将一个结构元素(小型二值图,一般为3*3大小)在一个大的二值图上逐点移动并进行比较,根据比较的结果作出相应处理而已。对二值图像来说,白色被腐蚀即为黑色的膨胀,白色的膨胀就是黑色被腐蚀。要注意的是,膨胀和腐蚀都是不可逆的,即两者不能完全的相互抵消。

膨胀:结构元素的白点与要处理的图形对应像素点只要有一个相同,则该点设为白色,否则仍然为黑色。膨胀可以看成是最大值滤波,即用最大值替换中心像素点。

腐蚀:结构元素的白点与要处理的图形对应像素点全部相同,则该点为白色,否则变为黑色(即被腐蚀掉了)。腐蚀可以看出是最小值滤波,即用最小值替换中心像素点。

开操作:先腐蚀后膨胀的过程称为开运算:具有消除细小物体,来去除噪声,在纤细处分离物体和平滑较大物体边界的作用。

闭操作:先膨胀后腐蚀的过程称为闭运算:具有填充前景物体内细小空洞或者前景物体上的小黑点,连接邻近物体和平滑边界的作用。

形态学梯度:膨胀操作与腐蚀操作的差值,形态学梯度还包括内部梯度和方向梯度,作用:提取前景物体的轮廓。

顶帽操作:原图像与开操作的差值,作用:提取图像中的噪声。

黑帽操作:闭操作与原图像的差值,作用:突出噪声与原始图像的交界处,可近似表现出一些轮廓。

第四期主要内容:

7、霍夫变换:直线检测、圆检测

1)霍夫变换介绍

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个參数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。如果可以用数学形式表示形状,则霍夫变换是一种检测任何形状的流行技术。即使形状有些破损或变形,也可以检测出形状。图像霍夫变换通过把图像的坐标从2D平面坐标系变换到极坐标空间,可以发现原来在平面坐标难以提取的几何特征信息(如:直线、圆等),图像的直线与圆检测就是典型的利用霍夫空间特性实现二值图像几何分析的例子。

2)标准的霍夫变换:cv2.HoughLines()

3)霍夫变换直线概率:cv2.HoughLinesP()

概率霍夫变换是霍夫变换的优化,它没有考虑所有要点,取而代之的是仅采用随机的点子集,进行线检测,只是必须降低阈值。

cv2.HoughLinesP()有两个新的参数:

(1)minLineLength - 最小行长,小于此长度的线段将被拒绝。

(2)maxLineGap - 线段之间允许将它们视为一条线的最大间隙。

4)霍夫圆检测:cv2.HoughCircles()

假设平面坐标的任意一个圆上的点C,转换到极坐标中,在点C处有最大值,霍夫变换正是利用这个原理实现圆的检测。霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波,也可用高斯滤波,视噪声类型而定,具体可见图像模糊。基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步:

(1)检测边缘,发现可能的圆心。

(2)基于第一步的基础上从候选圆心开始计算最佳半径大小。

第五期主要内容:

最常用的三种传统的图像特征提取算法分别为Haar特征、LBP特征及HOG特征,三种特征描述了三种不同的局部信息:

(1) HOG描述的是图像在局部范围内对应的形状边缘梯度信息;

(2) Haar描述的是图像在局部范围内像素值明暗变换信息;

(3) LBP描述的是图像在局部范围内对应的纹理信息;

8、特征提取:HOG

在一副图像中,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好地描述。

本质:梯度主要存在于边缘的地方。

1)HOG特征的提取过程:

(1)Gamma校正,进行归一化:输入图像进行校正,常见的系数在2.5左右。主要是为了补偿显示器带来的灰度偏差,降低局部阴影及背景因素的影响。

(2)图像转灰度

(3)计算图像的梯度与方向,可以使用Sobel算子实现,最终得到图像的梯度振幅与角度

(4)将图像划分为小细胞单元cells,例如:8x8的小网格,对每个cells做梯度方向权重直方图统计,形成每个cell的descriptor。

(5)块描述子:将每几个cell组成一个block,例如:将2x2的网格单元组合成为一个大的块(Block),主要是将每个Cell的直方图合并为一个大block的直方图向量,block内归一化梯度直方图。一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。

对每个block的descriptor做归一化处理,常见的归一化处理为L2-norm或者L1-norm将图像image内的所有归一化处理的block的HOG特征descriptor串联起来就可以得到该image的HOG特征descriptor了。这个descriptor就是最终的可供分类使用的特征向量了。

(6)把提取的HOG特征输入到SVM分类器中,进行训练寻找一个最优超平面作为决策函数/分类器。

2)HOG SVM总体思路:

(1)提取正负样本hog特征

(2)投入svm分类器训练,得到model

(3)由model生成检测子

(4)利用检测子检测负样本,得到hardexample

(5)提取hardexample的hog特征并结合第一步中的特征一起投入训练,得到最终检测子。

9、特征提取:Haar

基于哈尔小波的特征而不是图像强度,使用积分图加速计算特征,使用检测窗口中指定位置的相邻矩形,计算每一个矩形的像素和并取其差值,然后用这些差值来对图像的子区域进行分类。Haar特征值反映了图像的灰度变化情况。OpenCV也对Haar-like与AdaBoost组成的级联人脸检测做了封装,但是Haar-like本质上只是一种特征提取算法。

Haar特征表征人脸在局部范围内像素值的明暗变化信息,结合积分图技巧加速训练一个级联的Adaboost分类器。

人脸检测:Haar分类器=Haar特征 积分图法 Adaboost算法 Cascade级联。

Haar分类器主要步骤如下:

1)提取Haar特征;

2)利用积分图法对Haar特征提取进行加速;

3)使用Adaboost算法训练强分类器,区分出人脸和非人脸;

4)使用筛选式级联把强的分类器级联在一起,从而提高检测准确度。

10、特征提取:LBP

LBP(Local Binary Patterns,局部二值模式):LBP Adaboost级联

原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。利用在空间位置上邻近的像素来对当前像素进行二进制编码,这也就是LBP。

第六期主要内容:

11、HOG SVM算法实现行人检测模型训练

第七期主要内容:

12、HOG SVM:行人检测

13、Haar Adaboost级联:人脸检测

14、LBP Adaboost级联:人脸检测

第八期主要内容:

15、OpenCV 机器学习之OCR项目实战

第九期主要内容:

16、OpenCV DNN:目标检测

下周开始分享计算机视觉与深度学习模块:主要包括目标检测、图像识别、图像分割(语义分割、实例分割)等。

以上内容如有错误或者需要补充的,请留言!

0 人点赞