图像处理是通过计算机技术将图像信号转换为数字信号,进而进行处理的过程。其主要的图像技术包括以下几种:
1.图像滤波
2.图像增强
3.图像分割
4.图像复原和重建
5.图像特征提取
6.图像压缩
认识图像
处理数字图像,首先要先能够认识图像。一副图像可以看作是由MxN个像素点构成,也就是一个矩阵,常用的彩色空间就是RGB,图像拥有三个通道(channel)。
下面是一副400*300的RGB图像
image.png
除了RGB 颜色空间之外,还有HSV颜色空间等(H表示色相,S表示饱和度,V表示明度)。HSV颜色空间,更类似于人类感觉颜色的方式,封装了颜色的信息,“这是什么颜色?深浅如何?明暗如何”
知道了颜色空间到底有什么用呢?通过一个小例子来看看吧。
因为入职要办理证件照,公司需要白底证件照,但我之前只有一张蓝色背景的证件照,怎么办呢?下个PS来P一下,好像工程量有点大。还是撸一段代码来实现吧。下面就是效果图:
image.png
从原理上来说,并不难理解,就是通过颜色通道转换,将图片转换到HSV空间,定义蓝色分量的最大和最小的阈值,将区间范围内的蓝色分量统一重新定义成白色,当然为了效果更好,图像之前做了腐蚀和膨胀的预处理,(腐蚀和膨胀操作之后会讲),这样就可以得到最后想要的结果了。
认识了图像,那么下面就来介绍一些常见的图像处理算法。
图像滤波
图像滤波可以更改或者增强图像。滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式; 另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。
噪声一般主要分为以下几类:
椒盐噪声
加性噪声
乘性噪声
高斯噪声
图像滤波算法主要包括均值滤波、中值滤波、高斯滤波、双边滤波,上述滤波操作都是基于图像卷积得到最后的结果。
image.png
均值滤波操作相当于低通滤波,有将图像模糊化的趋势,对于椒盐噪声这种高频噪声基本无能为力。
中值滤波的优点是可以很好的过滤掉椒盐噪声,缺点是容易造成图像的不连续性。
双边滤波的性能不是特别好,但对于以上两种滤波算法来说,其重要的特点是能够保持图像的边缘清晰(高斯滤波会导致像素移位),这在检测应用中有重要的意义。
图像增强
图像增强的目的是为了得到更好质量的图像,去除一些噪声干扰,一般来说,可以分为频域和空域两类方法。在空域中,包括:
1.直方图均衡化
2.滤波
滤波操作在上面一部分已经讲过了,那么主要来说一下直方图均衡化。
理解直方图均衡化之前,先来理解一下什么是图像的直方图。直方图是一种数学统计上的概念,针对图像来说,就是每一种图像像素分量的概率分布。
看一张图片,直观的理解一下吧:
image.png
当图像背景和前景都过亮或者过暗的时候,直方图的分布就会分布的非常不均匀,那么直方图均衡化操作就可以拉伸图像,对图像的像素分布重新分配,将图像像素值均匀分布在最大和最小的像素级之间。
下图就是图像经过直方图均衡化之后的一个结果,可以看到相对于原始图来说,颜色对比度更加鲜明。
image.png
图像边缘检测
图像边缘检测操作也是一个非常常用的一种图像处理算法,边缘指的是图像中局部强度具有非常强烈变化的区域。
对图像进行边缘检测,需要通过边缘检测算子来进行处理。一般来说,边缘检测算子可以分为一阶边缘检测算子、二阶边缘检测算子和其他检测算子。比较常用的有三种,sobel、canny、laplacian。
通常情况下来说,canny检测算子的效果是最好的,缺点是容易把噪点当作是边界。
Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素;当对精度要求不是很高时,是一种较为常用的边缘检测方法。
Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。
图像形态学处理
图像形态学处理是对图像进行的预处理操作,可以方便后续操作。例如在车牌识别中,因为车牌中的孔洞,泥土等容易对车牌识别造成干扰,那么就需要先进行形态学滤波处理,对车牌本身进行处理之后,再去实现高级视觉任务。
形态学滤波包括腐蚀、膨胀、开运算、闭运算、形态学梯度、礼帽、黑帽。在认识图像部分的小例子中,我们就使用了腐蚀和膨胀的操作。
顾名思义,腐蚀操作会一定程度上对图像前景物体的边界进行腐蚀,减少图像的高亮部分。
腐蚀操作:
image.png
image
膨胀操作:与腐蚀操作相反的是膨胀操作,膨胀操作会使得图像的高亮部分增大,突出前景目标,也可以用于连接两个分开的物体。
image
开运算:
开运算就是对图像先进行腐蚀,再进行膨胀
image
闭运算:
闭运算就是与开运算相反的操作,先膨胀后腐蚀,用来填充前景物体的小洞,或者前景物体的小黑点。
形态学梯度:
一副图像膨胀和腐蚀的差
礼帽:
原图像和开运算之后图像的差
黑帽:
源图像和闭运算之后图像的差
图像特征
最近几年,深度学习迅速占据了计算机视觉的头把交椅,在分类精确度上,各种卷积神经网络要远远优于传统的分类器,相对于传统的图像特征,深度特征对于图像的细节把握更加精确。但在图像处理中,传统图像特征的地位也是非常重要的,通俗来说,图像特征就好比观察一个人,你可以通过它的鼻子,眼睛记住这个人,那么图像特征也是一样,因为直接去处理一副图像是非常耗时的,比如一副400x300x3的RGB图像,就需要处理360000个像素点,那么如果同时要处理上百张图片,处理速度可想而知,这在图像算法中是非常致命的。那么通过提取图像特征,就可以减少计算量。传统的图像特征包括HOG特征、颜色特征、SIFT特征、SURF特征、角点特征、LBP特征。
SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),该方法于1999年由David Lowe发表在ICCV。由于该算法对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性,使其备受关注。
image
SIFT有着非常多的优点,但是也有一点致命的缺陷--实时性不足。SURF(Speeded Up Robust Features)改进了特征的提取和描述方式,用一种更为高效的方式完成特征的提取和描述。
image
方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子,这个名气就更大了。它是一种基于统计的特征提取算法,通过统计不同梯度方向的像素而获取图像的特征向量。 image
LBP(Local Binary Pattern,局部二值模式),它是首先由T. Ojala, M.Pietikäinen,和 D. Harwood 在1994年提出,是一种纹理特征描述算子,旋转不变性和灰度不变性等显著的优点 image
图像分割
图像分割是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。通过图像分割,可以应用高级的视觉任务,比如自动驾驶,3D地图重建,美化图片等
总体来说可以将图像分割算法分为两类:
1.非语义分割
2.语义分割
非语义分割算法在图像分割中发展悠久,研究时间较长,算法相对成熟。
主要分为以下几种:
1.基于阈值的分割
2.基于区域生长的分割
3.基于边缘的分割
4.基于图的分割
基于阈值的图像分割算法是最简单最易实现的一种,通过设置合适的阈值,进而将图像分割。当然,阈值的设定是非常关键的,因此,就有了基于局部阈值和全局阈值两类阈值分割算法。
基于区域生长的图像分割算法是将具有相似特征的像素集合聚集构成一个区域。该算法优势是计算简单,对于区域内部较为平滑的连通目标能分割得到很好的结果,同时算法对噪声不那么敏感。而它的缺点也非常明显,需要人为选定合适的区域生长种子点,而且生长规则选取的不合适可能导致区域内有空洞,甚至在复杂的图像中使用区域生长算法可以导致欠分割或者过分割。最后,作为一种串行的算法,当目标区域较大时,目标分割的速度较慢。
基于边缘的分割算法也比较常见,在图像边缘检测中已经作以介绍。
除了这些传统的图像分割算法,近年来深度学习算法在图像分割中应用也十分广泛,比如热门的Mask-Rcnn算法,FCN算法,这种语义分割算法难度更大,不但要分割图像,还要知道分割的目标是什么,实现起来更加复杂。
图像复原和重建
图像复原有些类似于图像增强,目的都是为了改善图像的质量,但是图像复原是需要考虑图像退化的机制和过程等先验知识,据此找出一种相应的逆过程解算方法,从而得到复原的图像.(图像在形成、传输和记录中,由于成像系统、传输介质和设备的不完善,导致图像质量下降,这一现象称为图像退化,图像退化包括图像模糊、失真、存在噪声)。典型的图像复原方法是根据图像退化的先验知识建立一个退化模型,以此模型为基础,采用滤波等手段进行处理,使得复原后的图像符合一定的准则,达到改善图像质量的目的。
通俗来说,图像复原就是在去模糊,比如模糊图像中的数字并不清晰,复原后可以清晰地看到数字。
图像重建是通过物体外部测量的数据,经数字处理获得三维物体的形状信息的技术。图像重建技术开始是在放射医疗设备中应用,显示人体各部分的图像,即计算机断层摄影技术,简称CT技术,后逐渐在许多领域获得应用。主要有投影重建、明暗恢复形状、立体视觉重建和激光测距重建。
图像压缩
图像压缩是一种减少描绘图像所需数据量的技术。图像之所以可以进行压缩,是因为它存在很多冗余信息。冗余信息的类型可以分为:
1、空间冗余
2、时间冗余
3、视觉冗余
图像压缩算法包括
1、行程编码
2、霍夫曼编码
3、DCT编码
当然还有其他编码方式,这里就不一一介绍了。
传统的图像处理算法介绍到这里,基本上就介绍的差不多了,当然,近年来,深度学习发展迅猛,不管是在刚刚提到的图像压缩,还是之前的图像分割等等图像领域,都有非常多优秀的算法,三大视觉会议之一的CVPR,每年都会涌现出很多优秀的作品。更多高级的视觉任务,比如人脸识别、目标检测与跟踪等,深度学习的算法基本上都排在前列,例如做人脸检测和识别的MTCNN、FaceNet算法,做目标检测的Faster-RCNN 、YOLO、SSD算法,做图像分割的Mask-RCNN算法,做目标跟踪的SiamFC算法,这些算法不但在精确度上表现优异,而且在处理速度上也能够达到实时要求,这在工程界是至关重要的。因此,不管是做算法还是做产品,在当下还是要了解深度学习在计算机视觉领域的各种优秀算法,将这些idea可以应用自己的视觉任务当中。
参考链接:https://zhuanlan.zhihu.com/p/66166633
网友评论