第二章:OpenCv算法的基本介绍与应用
- 一、目录
- 二、图像处理流程
- 三、图像预处理
- 3.1噪声分类
- 3.1.1随机噪声
- 3.1.2椒盐噪声
- 3.1.3 高斯噪声
- 3.2 滤波
- 3.2.1 均值滤波
- 3.2.2 中值滤波
- 3.2.3 高斯滤波
- 3.2.4 双边滤波
- 3.2.4 运动模糊
- 3.2.4 锐化滤波
- 3.3 图像增强
- 3.3.1 直方图均衡化
- 四、图像分割
- 4.1 分割类型分类
- 4.2 单阈值分割
- 4.3 分离各种颜色空间通道
- 4.4 多阈值分割
- 4.5 边缘检测
- 4.5.1 边缘检测案例
- 4.5.3 各种边缘检测算子
- 4.6 其他分割算法——背景减去模型
- 4.7 分水岭分割算法、几何分割算法、形态学分割算法
- 五、形态学操作
- 5.1 原理
- 5.2 膨胀、腐蚀、开操作、闭操作
- 5.3顶(礼)帽、底(黑)帽
- 5.4 形态学梯度、
- 六、目标框选
- 七、总结
- 八、备注
一、目录
本次分享的主题是:OpenCv算法的基本介绍与应用,接下来我们将围绕以下五个方面进行展开。
二、图像处理流程
在图像处理过程当中,可简单概括为预处理、分割、形态学操作、目标框选。
1)
通常情况下,由于视觉传感器材料属性、工作环境、电子元件等影响,从而图像往往会出现噪声以及光照不均匀,扰乱图像的可观测信息。因此我们第一步就是对图像进行降噪、滤波、增强等预处理操作,使其更适合后续的处理。2)
第二步图像分割,也是处理过程中最为关键的一步,图像处理的目主要是将感兴趣的目标区域进行分割框选。即将目标与背景分割开来。其中,经典的传统分割方法有阈值分割、边缘分割等,深度学习方面有语义分割、实例分割。3)
第三步,当目标与背景分割完成之后,往往需要进行形态学等图像间数学运算相关操作,对所分割的二值划图像进行去噪声点、填补空洞、分割粘连物体等操作。4)
三、图像预处理
图像预处理,主要包括图像增强和一些灰度化、归一化、尺度变换、剪裁、图像平移、旋转等操作。本次预处理主要分享的内容是图像增强部分,图像增强目的就是优化图像质量,方便后续算法处理。下面将从噪声分类、如何去噪声以及锐化边缘、以及图像光照不均匀时,如何调整。
3.1噪声分类
3.1.1随机噪声
对于噪声,其分类主要跟噪声的特点以及分布特征有关。这里介绍三种比较常见的三种噪声,第一种是随机噪声,噪声分布没有任何规律特点,用均值滤波取消效果较好。
3.1.2椒盐噪声
第二种是椒盐噪声,呈现的是一种极大值与极小值的异常像素点,也就是黑色0白色255像素点,用中值滤波去除效果较好。
3.1.3 高斯噪声
第三种是高斯噪声,其分布符合高斯分布,高斯分布即我们熟悉的正太分布,其用高斯滤波去除效果较好。当然,噪声还有很多中,这里不做过多的介绍。
3.2 滤波
3.2.1 均值滤波
介绍完噪声类型,下面介绍如何根据不同噪声,对图像进行滤波,从而获得较高质量的图像。1)
首先是均值滤波,其原理是将每个像素点的值,替换为包含它的领域像素点值的平均值。2)
第二张图片给出的滤波核是3X3大小,红色中间点位置的做,替换为包含它的3x3领域像素点值得平均值。遍历完图像之后,就可以得到一种经过模糊的图像。3)
3.2.2 中值滤波
- 1) 其次是中值滤波,其原理与均值滤波类同,前面是均值代替滤波窗口中心值,这里使用的是中值。
- 2) 如第一张图所示,相对滤波窗口的所有像素进行排序,获得中值,并代替滑动窗口中心点像素值。这里是255经过滤波之后变成了10。
- 3) 第二副图中,利用均值滤波、中值滤波、高斯滤波对含有椒盐噪声的图像进行滤波,其中中值滤波的效果比较良好。
3.2.3 高斯滤波
1)
第三种即为高斯滤波,其原理是各像素权重根据高斯分布,离窗口中心点越近,全职越大,对中心像素的影响越大。2)
这里我分别生成了3x3以及15x15的高斯滤波和并进行可视化,离中心位置越近,其像素值越大,亮度越高。其滤波原理与前面两种相似,三者均为滤波核有所区别。3)
3.2.4 双边滤波
1)
前面三种滤波在去除噪声对图像影响的同时,也会弱化边缘信息,因此这里也简单提到双边滤波,双边滤波即边缘保留滤波,既能模糊图像,降低噪声的影响的同时,也能保留边缘信息。’2)
其原理是:在高斯滤波的基础上,结合图像的空间邻近度和像素值相似度的一种折处理,其中空间邻近度和像素值的相似度换句话说就是像素点之间的距离和像素点的值。当两个像素距离很近时,且当颜色很接近时影响才会较大,反之,虽然距离很近,但颜色差距较大,也就是边缘,那么平滑权重也会很小。这样就保证了边缘附近像素值的保持,起到了保边的效果。3)
3.2.4 运动模糊
1)
前面滤波主要是为了降低噪声对图像质量的影响认为引入滤波模糊,下面介绍的运动模糊,是因为相机快门速度慢或者物体移动速度快,以及在拍摄过程中发生震动或者移动,导致捕捉到的图像发生轻微位移,从而造成图像往一个方向模糊。2)
3.2.4 锐化滤波
1)
前面主要说了噪声、以及如何去噪模糊,下面则是与模糊相反的图像锐化。2)
其原理是增强图像中高频信息,使得图像细节更加清晰。所谓的高频信息是指图像中快速变化的部分,图边缘、角等。通过锐化滤波,在图像中滑动,最后输出锐化图像。3)
为了方便观察,如图1所示,输入一张图像,轮廓1像素值为1-10,经过滤波后,其轮廓1像素与相邻像素值差值更大,对比度更强,更能显示其图像的轮廓边缘。4)
3.3 图像增强
3.3.1 直方图均衡化
1)
图像预处理当中,除了对去噪模糊、边缘锐化,因为我们获取到得图像有时候会因为光照不均匀,导致图像过量或者过暗,所以往往需要对图像进行均衡化,调整图像整体得亮度和对比度。这里以直方图均衡化为例子。2)
图像直方图,即统计每个像素值个数。当像素区间几何在某个区间时,则证明图片过亮或者过暗,因此可以通过一些线性与非线性变换,将像素均匀分布到0-255之间,从而实现了亮度的调整。3)
经过图像预处理,下面我们将快速对图像分割板块进行介绍。图像分割图像处理中最关键的环节,下面将从阈值分割、边缘检测分割、粘连物体分割三个方面进行介绍。
四、图像分割
- 传统分割方法主要有阈值分割、边缘检测分割、以及粘连物体分割。
4.1 分割类型分类
1)
图像分割有传统算法的分割、也有深度学习的分割、这里主要以传统算法的分割进行介绍。分割个人觉得可分为两大类别,一类是目标与背景的分割,另一类则是根据前者分割图像,对粘连的物体进行分割。2)
对于前后景的分割,又分为阈值分割还有边缘检测分割。其中阈值分割可细分单阈值分割与多阈值分割。边缘检测分割则主要根据微分、梯度等相关算子,对图像进行滤波,从而获取图像的轮廓。3)
4.2 单阈值分割
首先是阈值分割中单阈值分割,不仅仅只是适用于灰度图分割,只要是单通道图片,都可以通过这个方法进行分割。对于单阈值分割,一般可以借助灰度直方图显示图像像素分布情况,入图2所示,背景颜色为黑色,数量较多,所有在0附近拥有一个峰值,前景为灰白色,数量较少,集合在130-230之间。因此我们只要在两个峰值之间,设置一个阈值,便可将前后景进行分割。
4.3 分离各种颜色空间通道
对于单通道,这里进行进行一个简短的插入,在阈值分割的时候,不能仅仅局限于灰度通道,有时候可以分割各色彩空间下的图片,观察在哪个通道特征比较明显,从而利用对应通道进行分割。此外,也有利用某几个通道相关性,进行颜色分割。
4.4 多阈值分割
1)
相对于单阈值分割、多阈值分割相对比较灵活,适用对象可以是单通道的多阈值分割、也可以是多通道的多阈值分割。
2)
对于单通道多阈值分割,这里介绍大津算法、自适应阈值分割算法。大津算法又称最大类间差法,原理是将灰度值分为多个阈值,对每个阈值进行组合,将图像分割为若干类,根据每一类的像素数和平均灰度值,求得该阈值下的类间方差,当该类间方差越大时,表明分割效果越佳。
3)
对于自适应阈值分割,又称局部阈值化,先将图片划分多若干区域,区域中每个像素点的阈值由零件的像素值分布所决定,亮度较高的区域图像像素阈值较高,亮度较低的图像区域,阈值则会相适应变小。非常适合光照不均匀图片的分割。
4)
以上内容主要是单通道下的多阈值分割。下面分享的内容是多通道下的多阈值分割。多通道多阈值分割,其实可以理解为对每个通道进行单阈值分割,最后对每一个通道进行求并集。我们常见的又HSV色彩空间的颜色分割,这种方法可以适当延申到其他色彩空间下的分割。对于途中,采用的是利用RGB转HSV色彩空间,然后对颜色进行分割,检测定位。
4.5 边缘检测
4.5.1 边缘检测案例
1)
讲完阈值分割,下面分享的内容是边缘检测分割,边缘检测在图像检测当中的应用也非常广泛。2)
这里举了一个例子,在光照稍微不均匀的情况下,如何将文本信息进行分割换背景。如果从阈值分割来解决,效果不是那么好,但是使用Canny边缘检测算法,就可以避免光照不均匀的影响,直接检测轮廓,对其进行形态学操作以及填充,再进行掩膜运算,即可实现换底功能。3)
4.5.3 各种边缘检测算子
- 这里展示的是各种边缘检测算子模板,具体原理以及相对应的优缺点,这里不做过多的赘述。
4.6 其他分割算法——背景减去模型
- 除了以上经典的分割方法,其是还有一张对运动物体分割效果较为良好的—背景减去算法。第一个动图是百香果分拣机上的百香果识别,第二个动图是机甲大师雷达站上对敌方车辆识别检测的应用。由于时间有限,后面我将加速分享江都,具体原理后面大家私下一起探讨。
大疆机甲大师雷达站地方车辆检测
4.7 分水岭分割算法、几何分割算法、形态学分割算法
1)
以上的阈值分割、边缘检测、背景减去分割方法均属于前后景分割,有时候分割出来的物体出现了粘连,这时候则需要进行一个类间分割。
2)
目前主要又分水岭算法分割,几何分割、形态学分割,形态学分割下一章节会有提到。分水岭分割对粘连的圆形物体分割效果较为良好,但是粘连过于严重的则不好分割。
3)
对于几何分割,我觉得在工业检测方面效果会更好,因为零件的尺寸都是固定的,例如途中的硬币检测,我通过检测焦点、筛选角点计算距离并是筛选出相连凹陷处焦点,获取ROI分析,最后实现分割。
4)
对于口罩的口罩带与无纺布进行分割,是通过求得无纺布最小外接矩形,根据短边坐标,求得其坐标方程,并利用该直线进行切断。
图像预处理、并分割之后,往往需要对其二值化图像进行形态学操作。
五、形态学操作
- 形态学操作主要包括膨胀、腐蚀、开、闭操作、顶、底帽、形态学梯度,泛洪填充等操作。
5.1 原理
1) 为了方便大家快速理解形态学操作的原理,这里制作了一个动画,其原理与前面的滤波操作相同,结构元素在输入图像中进行滑动遍历,当结构元素中心点与输入图像的白色像素点重合时,与结构元素白色像素重合的像素点将会变为白色。大家可以观看动画。
2) 有图是利用opencv的API进行了一个验证。
- 3) 这里有一个小技巧,就是结构元素的定义,形状可以通过画图的形式,例如我定义一个单通道的黑子背景图片,在上面画上一个圆,其实结构元素就是一个圆。其他形状可直接定义也可以进行组合。
5.2 膨胀、腐蚀、开操作、闭操作
- 下面将快速对形态学各种操作进行介绍。
1)
膨胀、跟腐蚀都比较直观,就是白色区域变胖变瘦。2)
开操作,就是先腐蚀,再进行膨胀,可有效消除一些白色噪点。闭操作则是相反,先膨胀再腐蚀,可以有效填补空洞。 对于顶帽,底帽,其实也是二值化图像之间减法运算。顶帽是原图减去开运算,可以求得噪声,或者图像较亮的区域。底帽则色原图减去闭运算,可以求出空洞,分离图像较暗区域。
5.3顶(礼)帽、底(黑)帽
5.4 形态学梯度、
形态学梯度则是膨胀减去腐蚀,可以类似大圆减去小圆得出一个同心圆。还有一个泛洪填充,通过随机生成一个种子像素点,进行横线与纵向生成,醉胡填充轮廓,其实这种操作也可以通过话轮廓的方式达到相同的效果。
通过图像预处理、图像分割、形态学等相关操作,最后就是为了对我们的一个目标进行框选显示保存。
六、目标框选
- 对目标的框选显示上,可以用点对轮廓质心进行显示,也可以通过轮廓、或者霍夫直线、霍夫圆进行检测、也有正接矩形、最小外接矩形、十字形多边形显示。
七、总结
以上是我今天分享的大体内容,今晚分享的内容比较多,因为其实每一个算法单独讲都足以讲很久,所有只简单提及其基本思想。希望通过我对之前学习opencv的一些总结,能够对大家有所帮助,同时,也可能因为我能力有限有所欠缺,有一些表达错误,还请大家指正,共同探讨。谢谢大家的聆听。