上一篇《产品讲技术|带你看懂什么是计算机视觉(一)》主要讲了CV主流程的概念和图像预处理的灰度化以及图像几何转换,本篇会把图像预处理的部分进行完结,主要涉及图像增强、图像恢复、图像分割/边缘检测。
文章大纲:(粗体部分是本篇文章分享的内容)
一、什么是图像预处理?
1.1 灰度化是什么?
1.1.1 彩色图像实现灰度化的常用方法
1.2 什么是图像几何转换?
1.2.1图像的平移转换
1.2.2图像的镜面变换
1.2.3图像的转置变换
1.2.4图像的旋转
1.2.5图像的缩放
1.2.6什么是灰度插值算法?
1.3 什么是图像增强?
1.3.1 图像去噪
1.3.2 锐化
1.3.3 低照度增强
1.3.4 去雾
1.3.5 去运动模糊
1.3.6 超分辨率重建
1.4 什么是图像恢复?
1.4.2 图像恢复的处理流程
1.5 什么是图像分割/边缘检测
二、什么是特征工程?
2.1 算法和模型的区别
2.2 特征使用方案
2.3 特征获取方案
2.4 特征处理
2.4.1 特征清洗
2.4.2 特征预处理
2.5 特征监控
三、参考文献
1.3 什么是图像增强?
图像增强是增强图像中的有用信息,它可以是一个失真的过程,其目的是要改善图像的视觉效果,针对给定图像的应用场合。
有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。
目的:图像增强是知道图像真实值的,从主观上,根据预先的目标通过改善图像的视觉效果,使图像更适合于人或者机器分析处理,一般来说要先进行图像恢复后,再进行图像增强,二者处理顺序不可倒置。
图像增强在日常生活中的常见应用场景:
1. 图像问题背景(Background)
曝光不足或过度的照片-需要增强处理
2. 图像有雾-需要 增强处理
3. 车牌识别系统
4. 车牌识别预处理-车牌图像需要增强处理
5. 人脸识别预处理-人脸图像需要增强处理
6. 指纹识别预处理-指纹图像需要增强处理
图像增强算法的主要方向:
图像去噪
低照度增强
去雾
去运动模糊
超分辨率重建
1.3.1 图像去噪
第一次见到这个名词的时候一脸懵逼,图像还要去噪?那不是音频才需要去噪吗?赶紧上网查了查资料,在图像拍摄、压缩、传输等过程中真的因为噪声而影响图像质量。
噪声是图象干扰的重要原因,图像去噪是指减少数字图像中噪声的过程。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。
图像常见噪声有四种:高斯噪声,泊松噪声,乘性噪声,椒盐噪声
让我们实际去对比一下图像在各种噪声影响下是什么样子的。
原图:
1. 高斯噪声(下图)
高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。
产生原因:
图像传感器在拍摄时市场不够明亮、亮度不够均匀;
电路各元器件自身噪声和相互影响;
图像传感器长期工作,温度过高。
2. 泊松噪声(下图)
泊松噪声,就是符合泊松分布的噪声模型,泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。如某一服务设施在一定时间内受到的服务请求的次数,电话交换机接到呼叫的次数、汽车站台的候客人数、机器出现的故障数、自然灾害发生的次数、DNA序列的变异数、放射性原子核的衰变数等等。
3. 乘性噪声(下图)
乘性噪声一般由信道不理想引起,它们与信号的关系是相乘,信号在它在,信号不在他也就不在。
4. 椒盐噪声(下图)
椒盐噪声,椒盐噪声又称脉冲噪声,它随机改变一些像素值,是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起。
在做图像去噪时,一般来说会针对被不同性质的噪声污染的图像应该采用不同的滤波方法,图像滤波方法的选择取决于噪声和图像的关系。
图像增强一般可以分为空域滤波法和频域滤波法。空域滤波法是直接对图像的像素进行处理。频域滤波法是指将图像进行变换后(如傅里叶变换、小波变换等),在变换域中对图像的变换系数进行滤波处理,处理完毕后再进行逆变换,获得滤波后的图像。
在图像处理中,我们会频繁用到这三个概念,这里给大家科普一下:
1)什么是时域
时域是描述数学函数或物理信号对时间的关系。例如一个信号的时域波形可以表达信号随着时间的变化。
2)什么是频域
频域(频率域)——自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说的频谱图。频谱图描述了信号的频率结构及频率与该频率信号幅度的关系。
3)什么是空间域
空间域又称图像空间(image space)。由图像像元组成的空间。在图像空间中以长度(距离)为自变量直接对像元值进行处理称为空间域处理。
图像去噪具体的算法和代码这里就不再详细介绍了,感兴趣的小伙伴可以参阅《【技术综述】一文道尽传统图像降噪方法》。
1.3.2 锐化
数字图像锐化:拉开像素之间的差异从而增加画面中细节的可辨识度。(很容易和图像对比度混淆,锐化可以理解为增加局部差异,增加对比度可以理解为拉开整体差异)
(1)全局锐化原理
理论上锐化是滤波算法(通俗说就是模糊滤镜)的逆应用,来看看下面的公式:
滤波结果 = 去掉了画面细节的输入图像画面细节 = 输入图像 – 滤波结果锐化输出 = 输入图像 + 画面细节 x 锐化强度
所以说有多少滤波算法就有多少种锐化算法,每种算法都有它较适用的情况。
下面是看图说话时间(图片中的素材引用自斯坦福大学的一篇讲座Sheet)
说到这里不得不提一点补充内容:滤波降噪
成像技术从银盐进化到数字CMOS以后不得不面对电子信号噪波的问题
输入图像 = 真实信号 + 信号噪波
滤波算法就是为了过滤信号噪波而产生的,大家一定都意识到了,锐化的过程在增强了画面细节的同时,也放大了信号噪波。所以图形学的大神们自然而然的想到了下面的解决方法:
(2)局部锐化
简而言之,锐化图像的核心目的就是突出形体更容易被视觉识别。因此我们只要更多将锐化操作使用在形态的边缘处,拿人像来做个例子就是诸如头发丝,眉毛,睫毛,脸部轮廓等等地方(这下满足数毛党的恶趣味了)
在PS中有个神奇的滤镜叫高反差保留就是专门用来干Edge Dectection的(时下很流行的照片边插画的核心算法就是这个),有兴趣的同学可以跟着链接继续扩展阅读一下 Spatial Filters 学名Laplician of Gaussian(LoG)
下面请看实战图(这次选的能算喜闻乐见的照片了没?)
这种方法简而言之就是只锐化有必要锐化的部分,很大程度上降低了噪波被放大的情况。目前优秀的锐化滤镜从根本上就是优化算法以达到锐化真实信号而屏蔽噪波的目的。
1.3.3 低照度增强
低照度增强是图像增强中的一种简单、有效的度图像增强方法,仅用了几次简单的图层混合操作,没有复杂的公式和计算过程,就可以达到较好的效果,同时对逆光拍摄的图像,也有较好的增强效果。
当时在查阅相关资料时,无意中看到一个使用Photoshop拉亮低照度图像的方法,按照教程介绍,自己使用Photoshop操作一遍,觉得效果还可以。对,做图像算法还是要掌握一点Photoshop用法的,因为有时候图像算法就是把Photoshop上面的处理图像步骤程序化一下,比如后面介绍的图像倒影算法。
低照度图像增强算法基本可以分2步:
将绿色通道反色后作为系数值,分别与各个通道相乘,得到新图层;
将新图层与原图做一次滤色混合,f(a, b) = 1 – (1 – a)*(1 – b);
代码效果图:
如果修改其中一些参数,还可以得到增强更明显的图像,当然,随之噪点也会变得明显,如下图:
如果想更深一步了解低照度增强算法可以参阅《SSE图像算法优化系列二十》
1.3.4 去雾
图像去雾的目的是消除雾霾环境对图像质量的影响,增加图像的可视度,提高图像识别准确率。
提到去雾算法,最经典的何凯明博士的暗通道去雾算法了,获得了CVPR 09的Best Paper Award。
附上原论文地址:《Single Image Haze Removal Using Dark Channel Prior》
基于暗通道先验的去雾算法实际上是一种统计意义上的算法,作者总结了大量的室外无雾的图像,发现了在无雾图像中局部区域存在一些像素,这些像素中至少有一个颜色通道的亮度值非常非常低(低亮度值区域不包括天空区域)。虽然这种算法非常好,也不需要什么额外的参数,但是当图像趋于白色,这种去雾算法就存在缺陷。详细的原理在原论文中已经说明的很好了,下面直接给大家展示代码和效果图。
代码效果图:
1.3.5 去运动模糊
首先运动模糊是指由于相机和物体之间的相对运动造成的模糊,又称为动态模糊。而动态模糊分为去动态模糊和加动态模糊,加动态模糊主要应用于电影和动画中为人物、汽车增加明显的运动模糊痕迹等。
关于去运动模糊,推荐一篇很好的实践博客《DeblurGAN实现运动图像的去模糊化(tensorflow实现)》,包含了实际代码和所需的训练数据集,可以让大家很好的体验一下算法模型训练的过程是什么样子的。
去运动模糊实际效果图:
1.3.6 超分辨率重构
超分辨率重构也在很多论文叫超分辨率重建,是指利用计算机将一幅低分辨率图像(low resolution,LR)或图像序列进行处理,恢复出高分辨率图像(high resolution,HR)的一种图像处理技术。HR意味着图像具有高像素密度,可以提供更多的细节,这些细节往往在应用中起到关键作用。
超分辨率(Super-resolution)概念理解:
百科:超分辨率(Super-Resolution)通过硬件或软件的方法提高原有图像的分辨率,通过一系列低分辨率的图像来得到一幅高分辨率的图像过程就是超分辨率重建。
wiki:超分辨率成像(SR-imaging)是提高成像系统分辨率的一类技术。光学SR技术可以超越系统的衍射极限,而几何SR则可以提高数字成像传感器的分辨率。超分辨率成像技术广泛应用于图像处理和超分辨显微术中。
形象理解:给定图像的像素越高,表示图像质量越接近于原始图像。如果把低像素的图片放大到一定程度,图片会变得非常模糊,类似于马赛克的情况。效果如下图所示:
单图像超分辨率重构(SR)可以从一张较小的图像生成一张高分辨率的图像。显然,这种恢复的结果是不唯一的。可以这样直观地理解:远远看到一个模糊的身影,看不清脸,既可以认为对面走来的是个男生,也可以认为这是个女生。那么,当我想象对面人的长相时,会如何脑补呢?
这就依赖于我们的先验知识。假如我认为,一个穿着裙子的人肯定是个女生,而对面那个人穿着裙子,所以我认为那是个女生,脑补了一张女神脸。然而,如果我知道穿裙子的人不一定是女生,还可能是女装大佬。迎面走来那个人瘦瘦高高,所以我认为十有八九是个男孩子,就会脑补一个……
也就是说,不同的先验知识,会指向不同的结果。我们的任务,就是学习这些先验知识。目前效果最好的办法都是基于样本的(example-based),所以可能会根据不同的业务目标,提前训练具有针对性的识别模型。
想更深一步了解的小伙伴,推荐参阅《深度学习在图像超分辨率重建中的应用》
1.4 什么是图像恢复?
图像增强不考虑图像是如何退化的,而是试图采用各种技术来增强图像的视觉效果。因此,图像增强可以不顾增强后的图像是否失真,只要看得舒服就行。而图像恢复就完全不同,需知道图像退化的机制和过程等先验知识,据此找出一种相应的逆处理方法,从而得到复原的图像。如果图像已退化,应先作复原处理,再作增强处理。二者的目的都是为了改善图像的质量。
图像增强:image enhancement
图像恢复:image restoration and reconstruction
相同:都是属于数字图像处理范畴,有着共同的目的,使之产生期望结果的最佳估计。
不同:
图像恢复:大部分是一个客观过程,不知道图像真实值,通过面向退化模型,采用相反的过程进行处理以恢复出原图像,使之尽可能接近图像真实值的方法。
图像增强:主要是一个主观过程,知道图像的真实值,为了达到视觉上的某些特定要求,进行有目的性的整体或者局部增强,减少无效特征,加强图像判读和识别效果的方法。
在图象成像的过程中,图象系统中存在着许多退化源,科普几个在图像恢复中常用的名词:
点退化:只影响一幅图象中某些个别点的灰度的退化因素。
空间退化:可以使一幅图象中的一个空间区域变得模糊起来的退化因素。
卷积(Convolution):使图象发生退化的原因很多,但这些退化现象都可用卷积来描述,说到卷积最熟悉的就是卷积神经网络CNN,在泛函分析中,卷积、旋积或摺积是通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f 与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。
反卷积(Deconvolution):图象的复原过程就可以看成是一个反卷积的问题,在数学中,反卷积是一种基于算法的过程,用于反转卷积对记录数据的影响。反卷积的概念广泛用于信号处理和图像处理技术。
卷积和反卷积更深一步请参阅《一文搞懂CNN中的卷积和反卷积》
图像恢复还有明确规定的质量准则,处理的图像一定要是最接近原始景物的图像,因为如果是已经经过其它图像处理过的图片,对图像恢复的结果会产生很大的影响,可能造成图像恢复的图像和真实图像存在很大的差别。
1.4.2 图像恢复的处理流程
分析退化原因->建立退化模型->反向推演->恢复图像
1.5 什么是图像分割/边缘检测?
图像分割:将图像划分成若干个互不相交的小区域的过程,所谓小区域是某种意义下具有共同属性的像素的连通集合,将图像目标分割出来,针对的是目标对象。图像分割的最终结果是将图像分解成一些具有某种特征的单元,成为图像的基元,相对于整幅图像来说,这种图像基元更容易被快速处理。
图像分割的特征:分割出来的各个区域对某种性质例如灰度,纹理而言具有相似性,区域内部是连通的且没有过多小孔。
边缘检测:通过对图像的梯度度化将图像中的梯度变化明显的地方检测出来,针对的是图像的边缘信息。
边缘检测是空间域图像分割的一种方法,属于包含关系,边缘检测后的图像是二值图像,对二值图像可以运用形态学操作来分割目标,所以边缘检测是图像分割的一个前提,但分割不一定非要用边缘检测。
二值图像:就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。即图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。
二值图像处理与分析在机器视觉与机器人视觉中非常重要,涉及到非常多的图像处理相关的知识,常见的二值图像分析包括轮廓分析、对象测量、轮廓匹配与识别、形态学处理与分割、各种形状检测与拟合、投影与逻辑操作、轮廓特征提取与编码等。
提到图像分割,主要包含两个方面:
非语义分割
语义分割
由于篇幅有限,这里就主要讲解非语义分割,因为非语义分割在图像分割中所占比重更高,目前算法也非常多,算法也比较成熟。
非语义分割和语义分割的区别:
相同点:都要分割出图像中物体的边缘
不同点:非语义分割只提取物体的边缘,但是不关注目标的类别,但是语义分割不仅要提取到边缘像素级别,还要知道这个目标是什么,主要是目标分类,如果需要指定到个体,还需要用到实例分割算法(好难过,怎么这么多东西要看)。
关系:非语义分割是一种图像基础处理技术,而语义分割是一种机器视觉技术,难度也更大
给大家举个例子:
这是一张经过语义图像分割FCN算法处理的效果图,图像中不同的颜色代表不同的类别。
非语义分割:可以区分出不同的物体,知道存在3种物体,但不知道每种对应的是什么
语义分割:可以区分出不同的物体,知道粉色的是人、绿色是自行车、黑色是图像背景
实例分割:可以区分出不同的物体,知道粉色分别是人物A/B/C/D,绿色分别是自行车1/自行车2/自行车3/自行车4,黑色是图像背景
语义分割目前的算法主要有以下几种:
阈值分割
区域分割
聚类分割
边缘分割
直方图
水平集
下面对每一种算法的原理进行展开介绍:
(1)阈值分割
阈值分割是图像分割中应用最多的一类,该算法思想比较简单,给定输入图像一个特定阈值,如果这个阈值可以是灰度值,也可以是梯度值,如果大于这个阈值,则设定为前景像素值,如果小于这个阈值则设定为背景像素值。
阈值设置为100对图像进行分割:
(2)区域分割
区域分割算法中比较有代表性的算法有两种:区域生长和区域分裂合并。
区域生长算法的核心思想是给定子区域一个种子像素,作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(可以根据预先设定的规则,比如基于灰度差)合并到种子所在的区域中。
区域分裂合并基本上就是区域生长的逆过程,从整个图像出发,不断分裂得到各个子区域,然后再把前景区域合并,实现目标提取。
(3)聚类分割
聚类是一个应用非常广泛的无监督学习算法,该算法在图像分割领域也有较多的应用。聚类的核心思想就是利用样本的相似性,把相似的像素点聚合成同一个子区域。
(4)边缘分割
这是图像分割中较为成熟,而且较为常用的一类算法。边缘分割主要利用图像在边缘处灰度级会发生突变来对图像进行分割。常用的方法是利用差分求图像梯度,而在物体边缘处,梯度幅值会较大,所以可以利用梯度阈值进行分割,得到物体的边缘。
对于阶跃状边缘,其位置对应一阶导数的极值点,对应二阶导数的过零点(零交叉点)。因此常用微分算子进行边缘检测。常用的一阶微分算子有Roberts算子、Prewitt算子和Sobel算子,二阶微分算子有Laplace算子和Kirsh算子等。
由于边缘和噪声都是灰度不连续点,在频域均为高频分量,直接采用微分运算难以克服噪声的影响。因此用微分算子检测边缘前要对图像进行平滑滤波。LoG算子和Canny算子是具有平滑功能的二阶和一阶微分算子,边缘检测效果较好,因此Canny算子也是应用较多的一种边缘分割算法。
(5)直方图
与前面提到的算法不同,直方图图像分割算法利用统计信息对图像进行分割。通过统计图像中的像素,得到图像的灰度直方图,然后在直方图的波峰和波谷是用于定位图像中的簇。
(6)水平集
水平集方法最初由Osher和Sethian提出,目的是用于界面追踪。在90年代末期被广泛应用在各种图像领域。这一方法能够在隐式有效的应对曲线/曲面演化问题。基本思想是用一个符号函数表示演化中的轮廓(曲线或曲面),其中符号函数的零水平面对应于实际的轮廓。
这样对应于轮廓运动方程,可以容易的导出隐式曲线/曲面的相似曲线流,当应用在零水平面上将会反映轮廓自身的演化。
水平集方法具有许多优点:它是隐式的,参数自由的,提供了一种估计演化中的几何性质的直接方法,能够改变拓扑结构并且是本质的。
恭喜大家已经看完图像预处理的所有内容,应该对图像处理有一个大概的了解了吧,下一篇是重磅的特征工程的介绍,小伙伴们记得收藏和点赞哦~