图像处理中flip

2018-05-08 13:29:41 dajiyi1998 阅读数 19487
  • 车道线检测相关理论知识点

    通过本课程学习,初学者可以熟练使用opencv4 API完成各种常见的图像分割、识别任务。 高级学习者也一定能有新的体会和收获。 本课程所讲的例子代码来自于实际开发项目,有较高的实用性。

    8人学习 刘山
    免费试看

1.直方图:一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。

数字图像在范围[0,G]内总共有L个灰度级,直方图为h(rK)=nk

rK是去见[0,G]内的第K级亮度,nk是灰度级为rK的像素数。

归一化直方图:

1.1直方图对比:

方法描述:有两幅图像patch(当然也可是整幅图像),分别计算两幅图像的直方图,并将直方图进行归一化,然后按照某种距离度量的标准进行相似度的测量。

方法的思想:基于简单的向量相似度来对图像相似度进行度量。

优点:直方图能够很好的归一化,比如256个bin条,那么即使是不同分辨率的图像都可以直接通过其直方图来计算相似度,计算量适中。比较适合描述难以自动分割的图像。

缺点:直方图反应的是图像灰度值得概率分布,并没有图像的空间位置信息在里面,因此,常常出现误判;从信息论来讲,通过直方图转换,信息丢失量较大,因此单一的通过直方图进行匹配显得有点力不从心。

 

矩阵分解的方法

方法描述:将图像patch做矩阵分解,比如SVD奇异值分解和NMF非负矩阵分解等,然后再做相似度的计算。

方法思想:因为图像本身来讲就是一个矩阵,可以依靠矩阵分解获取一些更加鲁棒的特征来对图像进行相似度的计算。

基于SVD分解的方法优点:奇异值的稳定性,比例不变性,旋转不变性和压缩性。即奇异值分解是基于整体的表示,不但具有正交变换、旋转、位移、镜像映射等代数和几何上的不变性,而且具有良好的稳定性和抗噪性,广泛应用于模式识别与图像分析中。对图像进行奇异值分解的目的是得到唯一、稳定的特征描述,降低特征空间的维度,提高抗干扰能力。

基于SVD分解的方法缺点是:奇异值分解得到的奇异矢量中有负数存在,不能很好的解释其物理意义。

基于NMF分解的方法:将非负矩阵分解为可以体现图像主要信息的基矩阵与系数矩阵,并且可以对基矩阵赋予很好的解释,比如对人脸的分割,得到的基向量就是人的“眼睛”、“鼻子”等主要概念特征,源图像表示为基矩阵的加权组合,所以,NMF在人脸识别场合发挥着巨大的作用。

基于矩阵特征值计算的方法还有很多,比如Trace变换,不变矩计算等。

基于特征点方法

方法描述:统计两个图像patch中匹配的特征点数,如果相似的特征点数比例最大,则认为最相似,最匹配

方法思想:图像可以中特征点来描述,比如sift特征点,LK光流法中的角点等等。这样相似度的测量就转变为特征点的匹配了。

以前做过一些实验,关于特征点匹配的,对一幅图像进行仿射变换,然后匹配两者之间的特征点,选取的特征点有sift和快速的sift变形版本surf等。

方法优点:能被选作特征点的大致要满足不变性,尺度不变性,旋转不变等。这样图像的相似度计算也就具备了这些不变性。

方法缺点:特征点的匹配计算速度比较慢,同时特征点也有可能出现错误匹配的现象。

基于峰值信噪比(PSNR)的方法

当我们想检查压缩视频带来的细微差异的时候,就需要构建一个能够逐帧比较差视频差异的系统。最

常用的比较算法是PSNR( Peak signal-to-noise ratio)。这是个使用“局部均值误差”来判断差异的最简单的方法,假设有这两幅图像:I1和I2,它们的行列数分别是i,j,有c个通道。每个像素的每个通道的值占用一个字节,值域[0,255]。注意当两幅图像的相同的话,MSE的值会变成0。这样会导致PSNR的公式会除以0而变得没有意义。所以我们需要单独的处理这样的特殊情况。此外由于像素的动态范围很广,在处理时会使用对数变换来缩小范围。

            

              

基于结构相似性(SSIM,structural similarity (SSIM) index measurement)的方法

结构相似性理论认为,自然图像信号是高度结构化的,即像素间有很强的相关性,特别是空域中最接近的像素,这种相关性蕴含着视觉场景中物体结构的重要信息;HVS的主要功能是从视野中提取结构信息,可以用对结构信息的度量作为图像感知质量的近似。结构相似性理论是一种不同于以往模拟HVS低阶的组成结构的全新思想,与基于HVS特性的方法相比,最大的区别是自顶向下与自底向上的区别。这一新思想的关键是从对感知误差度量到对感知结构失真度量的转变。它没有试图通过累加与心理物理学简单认知模式有关的误差来估计图像质量,而是直接估计两个复杂结构信号的结构改变,从而在某种程度上绕开了自然图像内容复杂性及多通道去相关的问题.作为结构相似性理论的实现,结构相似度指数从图像组成的角度将结构信息定义为独立于亮度、对比度的,反映场景中物体结构的属性,并将失真建模为亮度、对比度和结构三个不同因素的组合。用均值作为亮度的估计,标准差作为对比度的估计,协方差作为结构相似程度的度量。

图像模板匹配:一般而言,源图像与模板图像patch尺寸一样的话,可以直接使用上面介绍的图像相似度测量的方法;如果源图像与模板图像尺寸不一样,通常需要进行滑动匹配窗口,扫面个整幅图像获得最好的匹配patch。

模板匹配:是一种在源图像中寻找与图像patch最相似的技术,常常用来进行目标的识别、跟踪与检测。其中最相似肯定是基于某种相似度准则来讲的,也就是需要进行相似度的测量。另外,寻找就需要在图像上进行逐行、逐列的patch窗口扫描,当然也不一定需要逐行逐列的扫描,当几个像素的误差比计算速度来的不重要时就可以设置扫描的行列步进值,以加快扫描和计算的时间消耗。下面就对相似度测量和模板匹配进行介绍(所有的图像都假定是灰度图)。

         

         

1.2反向投影:一种记录给定图像中像素点如何适应直方图模型像素分布方式的一种方法,也就是说首先计算某一种特征的直方图模板,然后使用模板在去寻找图像中存在的该特征的方法。  作用:反向投影用于在输入图像(通常较大)中查找特定图像(通常较小或者仅1个像素,以下将其称为模板图像)最匹配的点或者区域,也就是定位模板图像出现在输入图像的位置。

反向投影如何查找(工作)?

查找的方式就是不断的在输入图像中切割跟模板图像大小一致的图像块,并用直方图对比的方式与模板图像进行比较。

反向投影的结果是什么?

反向投影的结果包含了:以每个输入图像像素点为起点的直方图对比结果。可以把它看成是一个二维的浮点型数组,二维矩阵,或者单通道的浮点型图像。

假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:

1)从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;

2)生成临时图像的直方图;

3)用临时图像的直方图和模板图像的直方图对比,对比结果记为c;

4)直方图对比结果c,就是结果图像(0,0)处的像素值;

5)切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;

6)重复(1)~(5)步直到输入图像的右下角。

1.3.直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像元取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。

直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):

(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。

(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度;变换后图像的灰度级减少,某些细节消失;某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。


2.滤波:图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。目的:1、消除图像中混入的噪声;2、为图像识别抽取出图像特。要求:1、不能损坏图像轮廓及边缘 ;2、图像视觉效果应当更好。

 

滤波和模糊的区别:拿高斯滤波来举例:滤波一般可以分为高通滤波和低通滤波,对于高斯低通滤波就会产生模糊效果,如果对于高斯高通滤波就会产生锐化的效果。所以通常是:高斯滤波就是指使用高斯函数进行滤波;高斯模糊就是指低通滤波。

高通:边缘增强、边缘提取 ;低通:钝化图像、去除噪音 ;带通:删除特定频率、增强中很少用

2.1.线性滤波器:在图像处理中,对邻域中的像素的计算为线性运算时,如利用窗口函数进行平滑加权求和的运算,或者某种卷积运算,都可以称为线性滤波。常见的线性滤波有:均值滤波、高斯滤波、盒子滤波、拉普拉斯滤波等等,通常线性滤波器之间只是模版系数不同。

均值滤波(normalized box filter):用其像素点周围像素的平均值代替元像素值,在滤除噪声的同时也会滤掉图像的边缘信息。在OpenCV中,可以使用boxFilter和blur函数进行均值滤波。均值滤波的核为

 

高斯滤波(Gaussian filter):高斯滤波为最常用的滤波器,具有可分离性质,可以把二维高斯运算转换为一维高斯运算,其本质上为一个低通滤波器。在OpenCV中可通过函数GaussianBlur进行操作。

 

2.2. 非线性滤波:非线性滤波利用原始图像跟模版之间的一种逻辑关系得到结果,如最值滤波器,中值滤波器。比较常用的有中值滤波器和双边滤波器。

中值滤波(median filter):中值滤波用测试像素周围邻域像素集中的中值代替原像素。中值滤波去除椒盐噪声和斑块噪声时,效果非常明显。在OpenCV中,可以使用函数medianBlur进行操作。

 

双边滤波(bilateral filter):双边滤波在平滑图像时能够很好的保留边缘特性,但是其运算速度比较慢。在OpenCV中,可以使用函数bilateralFilter进行操作。

w(x,y)为加权系数,取决于定义域核和值域核的乘积。

3边缘检测:Edge Detection 我们要找水平的边缘:需要注意的是,这里矩阵的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的。边缘是图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来表示,数字图像中求导是利用差分近似微分来进行的,实际上常用空域微分算子通过卷积来完成。

一般图像边缘检测方法主要有如下四个步骤:

1)图像滤波:传统边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出的是,大多数滤波器在降低噪声的同时也造成了了边缘强度的损失,因此,在增强边缘和降低噪声之间需要一个折衷的选择。

2)图像增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度的幅值来完成的。

3)图像检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判断依据是梯度幅值。

4)图像定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。近20多年来提出了许多边缘检测算子。

一阶导数算子

1)Roberts算子:是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘的走向垂直。Roberts操作实际上是求旋转45度两个方向上微分值的和。定位精度高,在水平和垂直方向的效果好,但对噪声敏感。两个卷积核Gx、Gy分别为

                      

采用1范数衡量梯度的幅度为=如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

2)Sobel算子:是一组方向算子,从不同的方向检测边缘。Sobel算子不是简单的求平均再差分,而是加强了中心像素上下左右4个方向像素的权值,运算结果是一副边缘图。Sobel算子通常对灰度渐变和噪声较多的图像处理的比较好。两个卷积核Gx、Gy分别为:

                               

采用范数衡量梯度的幅度为如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

3)Prewitt算子:是一种边缘样板算子,利用像素点上下左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑的作用。由于边缘点像素的灰度值与其邻域点的灰度值显著不同,在实际应用中通常采用微分算子和模板匹配的方法检测图像的边缘。Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得比较好。两个卷积核Gx、Gy分别为:

                     

采用范数衡量梯度的幅度为:如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

二阶导数算子也可以检测边缘,利用二阶导数算子检测阶梯状边缘需将检测算子与图像卷积并确定过零点。

1)  Laplacian算子:拉普拉斯算子是一种常用的二阶导数算子。实际中可根据二阶导数算子过零点的性质来确定边缘的位置。对于一个连续函数f(x,y),它在位置(x,y)的拉普拉斯值定义如下:

在图像中,计算函数的拉普拉斯值也可借助各种模板实现。这里对模板的基本要求是对应中心像素的系数应是正的,而对应中心像素邻近像素的系数应是负的,且它们的和应该是零。拉普拉斯算子检测方法常常产生双像素边界,而且这个检测方法对图像中的噪声相当敏感,不能检测边缘的方向,所以很少直接使用拉普拉斯算子进行边缘检测。常用的两种模板分别如图所示:

                   

2)LOG算法:

LOG算法步骤如下:1、 取样得到的高斯低通滤波器对输入图像滤波。2、 计算第一步得到图像的拉普拉斯。3、 找到步骤2所得图像的零交叉。

3)  Canny算子:Canny算子把边缘检测问题转换为检测单位函数极大值的问题来考虑。他利用高斯模型,借助图像滤波的概念指出一个好的边缘检测算子应该具有3个指标:1.低失误率,既要少将真的边缘丢弃,也要少将非边缘判为边缘;2.高位置精度,检测出的边缘应在真正的边界上;3.单像素边缘,即对每个边缘有唯一的响应,得到的边界为单像素宽。

考虑到上述三个条件,Canny提出了判定边缘检测算子的3个准则:信噪比准则、定位精度准则和单边缘响应准则。

1. 信噪比准则:信噪比越大,提取的边缘质量越高。信噪比SNR定义为

 

2.  定位精度准则边缘定位的精度L定义如下

其中,G’(x)和h’(x)分别是G(x)和h(x)的导数。L越大表明定位精度越高。

3. 单边缘响应准则:为了保证单边缘只有一个响应。检测算子的脉冲响应导数的零交叉点的平均距离D(f’)应满足

满足上述三个条件的算子称为Canny算子。Canny边缘检测算法的步骤如下:

(1) 用高斯滤波器平滑图像;(2)用一阶偏导的有限差分来计算梯度的幅值和方向;(3)对梯度幅值进行非极大值抑制;(排除非边缘像素,仅仅保留细线条)(4)用双阈值算法进行检测和链接边缘。

Robert:边缘定位精度较高,对于陡峭边缘且噪声低的图像效果较好,但没有进行平滑处理,没有抑制噪声的能力。

sobel和prewitt:进行了平滑处理,对噪声具有一定抑制能力,但容易出现多像素宽度。精度不高,边缘较粗糙。

Laplacian:对噪声较为敏感,使噪声能力成分得到加强,容易丢失部分边缘方向信息,造成一些不连续的检测边缘,抗噪声能力较差。

log:抗噪声能力较强,但会造成一些尖锐的边缘无法检测到。

canny:最优化思想的边缘检测算子,同时采用高斯函数对图像进行平滑处理,但会造成将高频边缘平滑掉,造成边缘丢失,采用双阈值算法检测和连接边缘。

 

4.形态学:在特殊领域运算形式——结构元素(Sturcture Element),在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。运算结构是输出图像的相应像素。运算效果取决于结构元素大小内容以及逻辑运算性质。形态学,即数学形态学(mathematical Morphology),是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质〈最具区分能力-most discriminative)的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等技术也常应用于图像的预处理和后处理中,成为图像增强技术的有力补充。

膨胀、腐蚀、开、闭运算是数学形态学最基本的变换。

结构元素:简单地定义为像素的结构(形状)以及一个原点(又称为锚点),使用形态学滤波涉及对图像的每个像素应用这个结构元素,当结构元素的原点与给定的像素对齐时,它与图像相交部分定义了一组进行形态学运算的像素。原则上,结构元素可以是任何形状,但通常使用简单的形状,比如方形、圆形和菱形,而原点位于中心位置(基于效率的考虑)。设有两幅图像A, S。若A是被处理的对象, 而S是用来处理A的, 则称S为结构元素。结构元素通常都是一些比较小的图像, A与S的关系类似于滤波中图像和模板的关系.

腐蚀和膨胀两个滤波操作也运算在每个像素周围像素集合上(邻域),这是由结构元素定义的。当应用到一个给定的像素时,结构元素的锚点与该像素的位置对齐,而所有与他相交的像素都被包括在当前像素集合中。腐蚀替换当前像素为像素集合中找到的最小的像素值,而膨胀则替换为像素集合中找到的最大像素值。当然,对于二值图像,每个像素只能被替换为白色像素或黑色像素

腐蚀和膨胀的主要功能:1)消除噪声(2)分割出独立的图像元素,在图像中连接相邻的元素(3)寻找图像中的极大值或者极小值区域(4)求出图像的梯度。

4.1、膨胀(dilate):膨胀就是求局部最大值的操作。从数学角度来说,就是将图像与核进行卷积,计算核B覆盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素。这样就会使图像中的高亮区域逐渐增长。模板和输入图像对应位置的元素只要有一个与的结果不为0,则结果不为0.给图像中的对象边界添加元素。用3x3的结构元素,扫描二值图像中的每一个像素,用结构元素与其覆盖的二值图像做与运算,如果都为0,则结果图像中值为0,否则为1。结果:输入图像中的前景对象扩大一圈。

膨胀的作用和腐蚀相反, 膨胀能使物体边界扩大, 具体的膨胀结果与图像本身和结构元素的形状有关。膨胀常用于将图像中原本断裂开来的同一物体桥接起来, 对图像进行二值化之后, 很容易使一个连通的物体断裂为两个部分, 而这会给后续的图像分析(如要基于连通区域的分析统计物体的个数〉造成困扰,此时就可借助膨胀桥接断裂的缝隙

4.2、腐蚀(erode):腐蚀和膨胀是相反的操作,腐蚀是求局部最小值的操作。腐蚀操作会使图像中的高亮区逐渐减小。模板和输入图像中对应位置的元素相与的结果全不为0时,结果才为0。删除对象边界的某些像素。用3x3的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做与运算,如果都为1,则结果图像中值为1,否则为0.结果:前景对象减小一圈。

随着腐蚀结构元素的逐步增大,小于结构元素的物体相继消失。由于腐蚀运算具有上述的特点,可以用于滤波。选择适当大小和形状的结构元素,可以滤除掉所有不能 完全包含结构元素的噪声点。然而,利用腐蚀滤除噪声有一个缺点,即在去除噪声点的同时,对图像中前景物体的形状也会有影响,但当我们只关心物体的位置或者个数时,则影响不大。

4.3、开运算:开运算是先腐蚀后膨胀。主要用于消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积,同时抑制比结构元小的亮细节。

4.4、闭运算:是先膨胀后腐蚀。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积,同时抑制比结构元小的暗细节。

4.5、形态学梯度:就是将膨胀图和腐蚀图相减。对二值化图像进行这一操作可以将边缘突出来,可以使用形态学梯度来保留物体的边缘轮廓。

4.6、顶帽变换:就是用源图像减去开运算图像。因为开运算带来的结果是放大了裂缝或者局部低亮度的区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围区域更明亮的区域。顶帽一般用于校正不均匀光照的影响(补充:均匀光照在从背景中提取目标的处理中扮演核心的角色)。

4.7、黑帽变换:就是用闭运算减去源图像。黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域。黑帽运算一般用来分离比邻近点暗一些的斑块。

4.8、为什么开运算可以去除目标外的孤立点?

目标外的孤立点是和目标像素值一样的点,而非背景像素点,即为1而非0(0表示选取的空洞或背景像素值)。

使用腐蚀,背景扩展,该孤立点被腐蚀掉,但是腐蚀会导致目标区域缩小一圈,因此需要再进行膨胀操作,将目标区域扩展回原来大小。所以,要使用开运算去除目标外的孤立点。

4.9、为什么闭运算可以去除目标内的孔?

目标内的孔,属于周围都是值为1,内部空洞值为0.目的是去除周围都是1的像素中间的0值。

闭运算首先进行膨胀操作,目标区域扩张一圈,将目标区域的0去除,但是目标区域同时也会向外扩张一圈,因此需要使用腐蚀操作,使得图像中的目标区域恢复到之前的大小。

 

5、漫水填充:将与种子点相连的像素相近的连通域替换成指定颜色。如果存在mask,不会填充mask的非零像素。比如边缘检测输出图像可作为mask图,操作的结果总是某个连续的区域。

作用:1、标记或分离目标区域;2、获取掩码区域,只处理掩码指定的像素点,加速处理过程。

 

6、图像金字塔:是图像中多尺度表达的一种,最主要用于图像分割,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔式一系列以金字塔形状排列的,分辨率逐步降低且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到到达某个终止条件才停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。层级越高图像越小,分辨率越低。

 通常有两种类型的图像金字塔,分别是:

1)数字金字塔(Gaussuan pyramin)-用来向下采样,主要的图像金字塔,主要用来向下采样图像

2)拉普拉斯金字塔(Laplaican pyramid)-用来从金字塔底层图像重建上层未采样的还原,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用,是从金字塔底层图像中向上采样,重建一个图像。

要从金字塔的第i层生成第i+1层(将第i层表示为Gi),先要用高斯核对Gi进行卷积,然后删除所有偶数行和列,新得到的图像面积会变为源图像的1/4.按上述过程对输入图像G0执行操作就可以得到整个金字塔。

当图像金字塔的上层移动时,尺寸和分辨率会降低。在OpenCV中,从金字塔上一层图像生成下一级图像时可以使用PryDown,而通过PryUp将现有的图像在每个维度上放大两倍。

注意:PryDown和PryUp函数互逆的,PryUp不是降采样的逆操作。图像首先在每个维度上扩大为原来的两倍,新增的行(偶数行)以0填充,然后给指定的滤波器进行卷积(实际上是在每个维度都扩大为原来两倍的过滤器)去估计“丢失”像素的近似值。

6.1.高斯金字塔

高斯金字塔是通过高斯平滑和亚采样获得一些采样图像,即是第K层高斯金字塔通过平滑、亚采样就可以获得第K+1层高斯图像。高斯金字塔包括一些列的低通滤波器,其截止频率从上一层到下一层以因子2逐渐增加,所以高斯金字塔可以跨越很大的频率范围。

     a.对图像向下采样

    为了获得第G(i+1)的金字塔图像,采取如下方法:

         (1)对图像G(i)进行高斯内核卷积

         (2)将所有偶数列和偶数行去除

  得到的图像即为G(i+1)的图像,很明显G(i+1)只有源图像的四分之一,通过对输入图像G(i)(原始图像)不停的迭代上述步骤就会得到整个金字塔,即向下采样会丢失图像的信息,缩小了图像

     b.对图像的向上采样

如果想放大图像,则需要通过向上取样操作得到

       (1)将图像在每个方向上扩大为原来的两倍,新增的行和列以0填充

       (2)使用先前同样的内核(乘以4)与放大后的图像卷积,获得“新增像素”的近似值。

得到的图像即为放大后的图像,但是与源图像想必会发现比较模糊,因为在缩放中已经丢失了一些信息。如果想在缩放过程中减少信息的丢失,这些数据就形成了拉普拉斯金字塔。

6.2.拉普拉斯金字塔

  i层的拉普拉斯金字塔的数学定义为:

                   L(i) = G(i) -UP(G(i+1))&g

式中的G(i)表示第i层的图像,UP()操作是将源图像中位置为(x,y)的像素映射到目标图像的(2X+1,2Y+1)位置,即在进行向上取样,&表示卷积,g为5*5的高斯内核.

使用OpenCV中函数直接进行拉普拉斯运算: L(i) = G(i) -PryUP(G(i+1))

图像金字塔的一个重要应用就是图像分割

6.3.尺寸调整:resize()函数

     resize()函数是OpenCV中专门用来调整图像大小的函数

     此函数将源图像精确的转换为指定尺寸的目标图像。如果源图像中设置了ROI(Region Of Internet,感兴趣区域),那么resize()函数会对源图像的ROI区域进行调整图像尺寸的操作,来输出到目标图像中。若目标中已经设置了ROI区域,不难理解resize()函数将会对源图像进行尺寸调整并填充到目标图像的ROI中。

 

7二值化

7.1全局二值化:一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。

全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部二值化方法。

局部二值化的方法就是按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值化处理。

7.2局部自适应二值化:局部二值化也有一个缺陷。存在于那个统一阈值的选定。这个阈值是没有经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。

局部自适应二值化,该方法就是在局部二值化的基础之上,将阈值的设定更加合理化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=a*E+b*P+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化图像中的细节。

根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值。 比较常用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等

 

8、霍夫变换:霍夫变换是图像处理中用来从图像中分离出具有某种相同特征的几何形状(通常,直线,圆等)的常用方法。经典的霍夫变换常用来检测直线,圆,椭圆等。它是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用霍夫变换可以方便地得到边界曲线而将不连续的边缘像素点连接起来。霍夫变换的主要优点是受噪声和曲线间断的影响小。利用霍夫变换还可以直接检测某些已知形状的目标。

 

9.重映射:把一个图像中一个位置的像素放置到另一个图片指定位置的过程.简单的说就是改变图片的位置(左,右,上,下,颠倒)。

为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的.

10、仿射变换: 仿射变换(Affine Transformation)是空间直角坐标系的变换,从一个二维坐标变换到另一个二维坐标,仿射变换是一个线性变换,他保持了图像的“平行性”和“平直性”,即图像中原来的直线和平行线,变换后仍然保持原来的直线和平行线,仿射变换比较常用的特殊变换有平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

 

11、图像匹配:目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harris、SIFT、SURF、ORB等等,不同的特征点检测和匹配方法尤其独特的优势和不足;

特征点匹配经过Ransac算法优化后仍存在错误匹配点对,需要优化后的匹配结果进行量化评价;

特征点检测和匹配评价一般包括两个部分,分别为检测和匹配的评价。

1.  特征检测(feature detection)、特征提取(extraction)和匹配(matching) 这三步,可以看做是目标检测、图像配准和拼接等工作的非常重要的一步。

2.  特征检测、特征选择、特征提取、特征描述和特征匹配

       特征检测: 根据用户的需求在图像中寻找满足定义的特征,包括角点、Blob点和边缘点。检测的结果:有或没有。

       特征选择: 为了选择稳定和可靠的特征,在检测到的特征集合中,需要进一步约束,通过类似于非极大值抑制、对比度阈值约束等条件保留显著特征。选择的结果:特征子集。

       特征提取: 特征选择确定稳定可靠的特征子集后,需要提取特征的位置(Location)、方向(Orientation)和尺度(Scale)信息。方向和尺度信息主要是为支持旋转和尺度变化。

       特征描述: 结合特征(点)邻域信息,使用一定的描述规则来对特征区域进行量化并抽取能代表该特征的描述信息,为了后续的匹配,一般用特征向量(feature vector)表示。

      特征匹配: 对提取到的特征,需要通过使用一定的方法来进一步判断对应的特征是否相同(或近似),对特征向量一般使用欧式距离或最邻近距离比(NNDR)进行判定,满足一定的条件约束,则认为两个特征相近,否则剔除。一般还会通过RANSAC进一步约束剔除误匹配点。   

 

 

 

2019-06-08 12:59:38 weixin_37545024 阅读数 785
  • 车道线检测相关理论知识点

    通过本课程学习,初学者可以熟练使用opencv4 API完成各种常见的图像分割、识别任务。 高级学习者也一定能有新的体会和收获。 本课程所讲的例子代码来自于实际开发项目,有较高的实用性。

    8人学习 刘山
    免费试看

本文在撰写过程中参考了由何东健教授主编、西安电子科技大学出版社出版的《数字图像处理》(第三版),一切著作权归原书作者和出版社所有。特别感谢长安大学软件系老师的认真负责的教导。

第1章 概论

1.1 数字图像处理及其特点

1、数字图像与图像处理
区分模拟图像与数字图像。
数字图像处理:利用计算机对图像进行去噪、增强、复原、分割、特征提取、识别等的理论、方法和技术。
2、数字图像处理的特点:
处理精度高、易于控制处理效果、处理的多样性、图像数据量大、处理费时、综合性强

1.2 图像处理的目的及主要内容

1、数字图像处理的目的
提高图像的视感质量、特征信息的提取、图像数据变换、编码和压缩
2、数字图像处理的主要内容
图像获取、表示和表现,复原,增强,分割,分析,重建、压缩编码

1.3 数字图像处理的应用(略)

第2章 数字图像处理基础

2.1 图像数字化技术

数字图像处理的先决条件:连续图像离散化。
图像的数字化包括采样和量化两个过程。
连续图像数字化的结果是图像矩阵,每一个元素称为像素、像元或图像元素。
采样方法:正方形采样、三角形采样、正六角形采样
1、采样
采样:图像在空间上的离散化,即用采样点的灰度值代替图像。
采样方法:先垂直采样,在水平采样。对于视频,先对时间采样,再沿垂直方向采样,最后沿水平方向采样。
一维采样定理:若一维信号的g(t)的最大频率为ω,则采样周期小于等于1/(2ω),则能够根据采样频结果完全恢复图像。
2、量化
量化:把采样得到的各像素点的灰度值从模拟量到离散量的转换称为图像灰度的量化,转换前的灰度值称为连续灰度值,转换后的灰度值称为量化灰度值,量化灰度值与连续灰度值的差的绝对值称为量化误差。
量化方法:等间隔量化(均匀量化、线性量化)、非等间隔量化。
非等间隔量化是根据图像灰度值分布的概率密度函数,按总量化误差最小的原则来进行量化的。具体做法是“高概率细分,低概率粗分”。
3、采样与量化参数的选择
图像存储大小=采样数×量化灰度值位数(bit)
低采样数导致马赛克,低量化级数导致假轮廓。
采样原则:
缓变——细量化、粗采样
细节丰富——粗量化、细采样
4、图像数字化设备
组成:采样孔、图像扫描机构、光传感器、量化器、输出储存装置
性能指标:像素大小、量化位数(颜色元数)、图像尺寸、线性度、噪声

2.2 色度学基础与颜色模型

1、色度学基础
视杆细胞辨亮度,视锥细胞辨颜色,RGB光的三原色
颜色属性:色调、饱和度、亮度
2、颜色模型
计算颜色模型:RGB、CIE XYZ、Lab
视觉颜色模型:HSI、HSV、HSL
工业颜色模型:CMYK、YUV、YCbCr
(1)RGB模型
在这里插入图片描述
(2)CIE XYZ模型
F=x•X+y•Y+z•Z, x=X/(X+Y+Z), y=Y/(X+Y+Z), z=Z/(X+Y+Z)
(3)Lab颜色模型
具有设备无关性,L表示亮度分量,a、b为色度分量,其中a正向绝对值越大表示越红,负向绝对值越大表示越绿;b正向绝对值越大表示越黄,负向绝对值越大表示越蓝。
(4)HSI颜色模型
色调H:反应颜色的种类(波长)
饱和度S:表示颜色的深浅
强度I:亮度/灰度
(5)CMY与CMYK颜色模型
(C,M,Y)=(1,1,1)-(R,G,B)
在这里插入图片描述
(6)YUV电视信号彩色坐标系统
Y表示亮度信号,U、V表示色差
(7)YCbCr模型
由亮度Y,色差Cb、Cr组成,但充分考虑RGB分量在视觉感受中的不同重要性。
3、颜色变换
颜色变换模型:g(x, y) = T[ f(x, y) ]
颜色变换关系:si = Ti [r1, r2, r3, … ,rn], i = 1, 2, … , n
彩色切片:识别目标颜色分离出来

2.3 数字图像类型

矢量图:数学公式描绘图像,存储量小,图像清晰度与分辨率无关,缺点是单调且不真实
位图:像素点阵表示图像,每个像素点具有颜色和位置属性,分为线画稿、灰度图像、索引颜色图像、真彩色图像
1、位图
线画稿:二值图像
灰度图像:介于黑色与白色之间的多级灰度
索引颜色:选择一些颜色,然后编号,用编号作为颜色的索引
真彩色图像:RGB颜色
2、位图有关术语
像素:显示器显示图像的基本单位
样点:将原图像网格化,用样点代替网格中所有点
分辨率:单位长度像素数,按照像素的来源分为图像分辨率屏幕分辨率、打印机分辨率、扫描仪分辨率

2.4 图像文件格式

BMP图像文件格式:
(1)四部分组成:位图文件头、位图信息头、调色板、图像数据
(2)字节对齐,4byte整数倍
(3)上下倒置存放
其他文件格式略

2.5 OpenCV编程简介

OpenCV = Open Source Computer Vision Library
1、OpenCV简介 不考
2、OpenCV的安装与配置 不考
3、OpenCV的数据结构 不太可能考
二维点、三维点、Size_、Rect_、RotatedRect、Matx、Vec、Scalar_、Range、Mat
4、读入、显示和存储图像

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main(){
	Mat image, result;
	cout << "size: " << image.size().height() << " , " << image.size().width << endl;
	image = imread("tiger.jpg");
	if(!image.data){
		cout << "read image file failed!" << endl;
	}
	namedWindow("Original Image");
	imshow("Original Image", image);
	flip(image, result,1);
	namedWindow("Output Image");
	imshow("Output Image", result);
	imwrite("output.bmp", result);
	waitKey(0);
	return 0
}

5、操作图像像素
(1)at方法

void colorReduce(Mat& inputImage, Mat& outputImage, int div){
	outputImage = inputImage.clone();
	int rows = outputImage.rows;
	int cols = outputImage.cols;
	for(int i=0;i<rows;i++){
		for(int j=0;j<cols;j++){
			outputImage.at<Vec3b>(i,j)[0] = outputImage.at<Vec3b>(i,j)[0]/div*div+div/2;
			outputImage.at<Vec3b>(i,j)[1] = outputImage.at<Vec3b>(i,j)[1]/div*div+div/2;
			outputImage.at<Vec3b>(i,j)[2] = outputImage.at<Vec3b>(i,j)[2]/div*div+div/2;
		}
	}
}

(2)使用迭代器

void colorReduce(Mat& inputImage, Mat& outputImage, int div){
	outputImage = inputImage.clone();
	Mat_<Vec3b>::iterator it = inputImage.begin<Vec3b>();
	Mat_<Vec3b>::iterator it = inputImage.end<Vec3b>();
	Mat_<Vec3b> cimage = outputImage;
	Mat_<Vec3b>::iterator itout = cimage.begin();
	Mat_<Vec3b>::iterator itoutend = cimage.end();
	for(; it != itend; it++,itout++){
		(*itout)[0]=(*it)[0]/div*div+div/2;
		(*itout)[1]=(*it)[1]/div*div+div/2;
		(*itout)[2]=(*it)[2]/div*div+div/2;
	}
}

(3)使用指针

void colorReduce(Mat& inputImage, Mat& outputImage, int div){
	outputImage = inputImage.clone();
	int rows = outputImage.rows;
	int cols = outputImage.cols;
	if(outputImage.isContinuous()){
		cols = cols * rows;
		rows = 1;
	}
	for(int i=0;i<rows;i++){
		uchar * dataout = outputImage.ptr<uchar>(i);
		for(int j=0;j<cols;j++){
			dataout[j] = dataout[j]/div*div+div/2;
		}
	}
}

注意:OpenCV中的彩色图像不是以RGB顺序存放的,而是以BGR顺序存放的。
4、整行整列像素值的赋值

img.row(i).setTo(Scalar(255));
img.col(i).setTo(Scalar(255));

6、图形交互和媒体接口HighGui 不太可能考

第3章 图像增强

图像增强的目的:改善图像的视觉效果,或使图像更适合于人或机器的分析处理。减少图像噪声,提高目标与背景的对比度,强调或抑制图像中的某些细节。
图像增强的方法:空域法、频域法,空域法又可以分为点处理和区处理,频域增强可以分为低通滤波、高通滤波、带通滤波、带阻滤波和同态滤波。

3.1 灰度变换

灰度变化模型:g(x, y) = T[ f(x, y) ]
区处理:灰度变换操作在像素的邻域内进行,区处理一般基于模板卷积实现,因此又称为模板操作或空域滤波。
常见的灰度变换方法:直接灰度变换法、直方图修正法。直接灰度变换法包括线性、分段线性以及非线性变换;直方图修正法可以分为直方图均衡化和直方图规定化。
1、灰度线性变换
在这里插入图片描述
2、分段线性变换
在这里插入图片描述
3、非线性变换
在这里插入图片描述
在这里插入图片描述

3.2 直方图修正

1、直方图的基本概念
灰度直方图是图像量化灰度值的频数分布直方图或频率分布直方图。
2、直方图的性质
(1)丢失位置信息,保留统计信息
(2)图像与灰度直方图是一对多的关系
(3)灰度直方图具有可加性
3、直方图的计算
(1)初始化:数组零值初始化
(2)统计:将量化灰度值映射为数组下标,遍历图像将对应数组元素的值++
(3)归一化:数组所有元素除以像素总数
也可以像素值沿水平轴划分为若干子区间称为箱格,从而简化计算。
4、直方图均衡化
(1)基本思想:把原始图像的直方图变换为均匀分布的形式,从而增加图像灰度的动态范围,以达到增强图像对比度的效果。经过均衡化处理的图像,其灰度级出现的概率相同,此时图像的熵最大,图像包含的信息量最大。
(2)推导
s=T(r)s=T(r)
s和r分别为灰度变换前后的灰度级,T(r)T(r)单调递增且有界[0,1]
η=T(ξ)η=T(ξ),则有
Fη(s)=P(η&lt;s)=P(ξ&lt;r)=rPr(x)dxF_{η}(s) = P(η&lt;s) = P(ξ&lt;r) = \int_{-\infty}^{r}P_{r}(x)dx
对两边同时求导得
ps(s)=[pr(r)drds]r=T1(s)p_{s}(s)=[p_{r}(r)•\frac{\mathrm{d} r}{\mathrm{d} s}]_{r=T^{-1}(s)}
若要使变换后的图像灰度s为均匀分布,即有
ps(s)=1p_s(s)=1
代入上式有
ds=pr(r)dr\mathrm{d} s=p_r(r)\mathrm{d}r
两边同时积分有
T(r)=s=0rpr(ω)dωT(r)=s=\int_0^rp_r(ω)\mathrm{d}ω
其中0rpr(ω)dω\int_0^rp_r(ω)\mathrm{d}ω是r的累计分布函数。
容易证明,以CDF为灰度变换函数,可得到灰度分布均匀的图像。
(3)数字图像的直方图均衡化

k rk nk pr=T(rk) sk=int[(L-1)sk+0.5] s rk->sk ps(sk)
0 0 790 0.19 0.19 0.19→1 0→1 -
1 1 1023 0.25 0.44 0.144→3 1→3 0.19
2 2 850 0.21 0.65 0.65→5 2→5 -
3 3 656 0.16 0.81 0.81→6 3→6 0.25
4 4 329 0.08 0.89 0.89→6 4→6 -
5 5 245 0.06 0.95 0.95→7 5→7 0.21
6 6 122 0.03 0.98 0.98→7 6→7 0.24
7 7 81 0.02 1 1→7 7→7 0.11

简并:频数较低的灰度级被归并为一个新的灰度级上,使得变换过后的灰度级的数量减少了,这种现象称为简并。简并现象增大了灰度级的间隔,增加了图像对比度,可以看清更多的细节。
理论上,直方图均衡化的结果应该是平坦的,但由于不能将同一灰度级的像素映射到不同的灰度级,因而实际结果只是近似均衡。
5、直方图规定化
直方图规定化:实际应用中希望将直方图变换为某个特定的形状,从而有选择地增强某个灰度范围内的对比度,这种方法就称为直方图规定化。
直方图规定化的步骤:
第一步,对原始直方图进行均衡化,得到映射关系1;
第二步,对规定直方图进行均衡化,得到映射关系2;
第三步,按照单映射规则或组映射规则,根据映射关系1和映射关系2得到最终的映射关系。

rk,zl pr(rk) pz(zl) sk=T(rk) vl=G(zl) 单映射rk→zl 单映射ps(sk) 组映射rk→zl 组映射ps(sk)
0 0.19 - 0.19 - r0→r3 0 r0→r3 0
1 0.25 - 0.44 - r1→r3 0 r1→r5 0
2 0.21 - 0.65 - r2→r5 0 r2→r5 0
3 0.16 0.2 0.81 0.2 r3→r5 0.44 r3→r7 0.19
4 0.08 - 0.89 - r4→r7 0 r4→r7 0
5 0.06 0.5 0.95 0.7 r5→r7 0.37 r5→r7 0.46
6 0.03 - 0.98 - r6→r7 0 r6→r7 0
7 0.02 0.3 1 1 r7→r7 0.19 r7→r7 0.35

单映射:对于每一个sk找距离它最近的vl
组映射:对于每一个vl找距离它最近的sk,作为分组依据(分界值归到左侧区间),再进行组映射。

3.3 图像平滑

目的:消噪或模糊图像,去除小的细节或弥合目标间的缝隙。
低频代表信号缓慢变化的部分,高频代表迅速变化的部分;图像边缘、跳跃以及噪声等灰度变化剧烈的部分代表图像的高频分量,灰度变化缓慢的部分代表图像的低频分量。
1、图像噪声
(1)噪声分类
外部噪声和内部噪声
平稳噪声和非平稳噪声
高斯噪声和椒盐噪声
白噪声和粉红噪声(1/f噪声)
加性噪声和乘性噪声
(2)特点
随机性、图像相关性、叠加性
2、模板卷积
模板操作的种类:卷积、相关
功能:图像平滑、锐化、边缘检测
线性滤波,其输出像素是输入邻域像素的加权核。
卷积和相关运算的主要区别在于卷积运算需要将模板绕模板中心旋转180°,因其余运算过程一致而统称为模板卷积。模板卷积中的模板称为卷积核,其元素称为卷积系数、模板系数或加权系数,其大小和排列顺序决定了对图像邻域处理的类型。
模板卷积的运算过程:移动模板、对应相乘再相加、赋值
3、邻域平均
Box模板:
19[111111111] \frac{1}{9}\begin{bmatrix} 1 &amp; 1 &amp; 1 \\ 1 &amp; 1* &amp; 1 \\ 1 &amp; 1 &amp; 1 \end{bmatrix}
高斯模板:
116[121242121] \frac{1}{16}\begin{bmatrix} 1 &amp; 2 &amp; 1 \\ 2 &amp; 4* &amp; 2 \\ 1 &amp; 2 &amp; 1 \end{bmatrix}
领域平均法的主要优点是算法简单,缺点是降噪时会模糊图像,尤其是在边缘和细节处,尺寸越大模糊程度越大。适合处理高斯噪声,不适合处理椒盐噪声。
4、中值滤波
非线性滤波,滤除噪声的同时很好地保持图像边缘。
基本原理:窗口内元素灰度值求中位数并赋给中心元素
统计排序滤波器:模板内元素排序,选取某个值作为中心元素的值。中值滤波是统计排序滤波器的一种。最值滤波器用于检测亮点或暗点。
中值滤波的性质:
(1)不影响阶跃信号、斜坡信号、连续个数少于窗口长度一半的脉冲受到抑制,三角函数顶部变平。
(2)中值滤波的输出与输入噪声的密度分布有关
(3)中值滤波频谱特性起伏不大,可以认为中值滤波之后,信号频谱基本不变
中值滤波窗口形状和尺寸决定了滤波效果,就一般经验而言,对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗口为宜;对于包含有尖顶角物体的图像,用十字形窗口。窗口大小不宜超过图像中最小有效物体的尺寸。如果图像中包含的点、线、尖角较多,则不宜采用中值滤波。
复合型中值滤波器:中值滤波的线性组合、高阶中值滤波组合、加权中值滤波、迭代中值滤波
5、图像平均
基本原理:同一景物的多幅图像取平均值来消噪。
缺点:难以操作

3.4 图像锐化

目的:使模糊的图像变清晰,增强图像的边缘等细节,但同时也会增强噪声,一般先做消噪处理。
图像锐化的方法:空域法、频域法
1、微分法
微分运算通常通过一阶向前差分运算或二阶中心差分来实现。
(1)梯度算子
梯度算子的定义
f(x,y)=[fxfy]T \mathrm{▽}\mathbf{f}(x,y)=\begin{bmatrix}\frac{\partial f}{\partial x} &amp; \frac{\partial f}{\partial y}\end{bmatrix}^T
梯度幅度
f(x,y)=f(x,y)=(Gx2+Gy2)12 \mathrm{▽} f(x,y)=|\mathrm{▽}\mathbf{f}(x,y)|=(G_x^2+G_y^2)^{\frac 1 2}
梯度方向角
φ(x,y)=arctan(GyGx) φ(x,y)=arctan(\frac {G_y} {G_x})
水平梯度差分法
f(x,y)f(x+1,y)f(x,y)+f(x,y+1)f(x,y) \mathrm{▽} f(x,y) \approx |f(x+1,y)-f(x,y)|+|f(x,y+1)-f(x,y)|
Robert交叉算子
f(x,y)f(x+1,y+1)f(x,y)+f(x,y+1)f(x+1,y) \mathrm{▽} f(x,y) \approx |f(x+1,y+1)-f(x,y)|+|f(x,y+1)-f(x+1,y)|
中心差分算子
{Gx=f(x+1,y)f(x1,y)2Gy=f(x,y+1)f(x,y1)2 \left \{\begin{matrix} G_x=\frac{f(x+1,y)-f(x-1,y)}{2} \\ \\ G_y=\frac{f(x,y+1)-f(x,y-1)}{2} \end{matrix}\right.
常见的梯度算子:

算子名称 模板H1 模板H2 特点
Roberts [0110]\begin{bmatrix}0* &amp; -1 \\ 1 &amp; 0\end{bmatrix} [1001]\begin{bmatrix}-1* &amp; 0 \\ 0 &amp; 1\end{bmatrix} 各向同性;对噪声敏感;模板尺寸为偶数,中心位置不明显
Prewitt [101101101]\begin{bmatrix}-1 &amp; 0 &amp; 1 \\ -1 &amp; 0* &amp; 1 \\ -1 &amp; 0 &amp; 1 \end{bmatrix} [111000111]\begin{bmatrix}-1 &amp; -1 &amp; -1 \\ 0 &amp; 0* &amp; 0 \\ 1 &amp; 1 &amp; 1\end{bmatrix} 引入了平均因素,对噪声有抑制作用;操作简便
Sobel [101202101]\begin{bmatrix}-1 &amp; 0 &amp; 1 \\ -2 &amp; 0* &amp; 2 \\ -1 &amp; 0 &amp; 1 \end{bmatrix} [121000121]\begin{bmatrix}-1 &amp; -2 &amp; -1 \\ 0 &amp; 0* &amp; 0 \\ 1 &amp; 2 &amp; 1\end{bmatrix} 引入了平均因素,增强了最近像素的影响,噪声抑制效果比Prewitt要好
Krisch [335305335]\begin{bmatrix}-3 &amp; -3 &amp; 5 \\ -3 &amp; 0* &amp; 5 \\ -3 &amp; -3 &amp; 5 \end{bmatrix} [333303555]\begin{bmatrix}-3 &amp; -3 &amp; -3 \\ -3 &amp; 0* &amp; -3 \\ 5 &amp; 5 &amp; 5\end{bmatrix} 噪声抑制效果要好;需求出8个方向的响应(这里只给出两个方向的模板)
Isotropic Sobel [101202101]\begin{bmatrix}-1 &amp; 0 &amp; 1 \\ -\sqrt 2 &amp; 0* &amp; \sqrt 2 \\ -1 &amp; 0 &amp; 1 \end{bmatrix} [121000121]\begin{bmatrix}-1 &amp; -\sqrt 2 &amp; -1 \\ 0 &amp; 0* &amp; 0 \\ 1 &amp; \sqrt 2 &amp; 1\end{bmatrix} 权值反比于邻点与中心点的距离,检沿不同方向边缘时梯度幅度一致,即具有各向同性

(2)拉普拉斯算子
拉普拉斯算子:
Δf=2f=2f2x+2f2y \Delta f=\nabla ^2f=\frac{\partial ^2f}{\partial ^2x}+\frac{\partial ^2f}{\partial ^2y}
差分表示:
2ff(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y) \nabla ^2f \approx f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)
常用拉普拉斯模板:
[010141010][111181111][121242121] \begin{bmatrix} 0 &amp; -1 &amp; 0 \\ -1 &amp; 4* &amp; -1 \\ 0 &amp; -1 &amp; 0 \end{bmatrix} \begin{bmatrix} -1 &amp; -1 &amp; -1 \\ -1 &amp; 8* &amp; -1 \\ -1 &amp; -1 &amp; -1 \end{bmatrix} \begin{bmatrix} 1 &amp; -2 &amp; 1 \\ -2 &amp; 4* &amp; -2 \\ 1 &amp; -2 &amp; 1 \end{bmatrix}
平滑模板和微分模板的对比:
(1)微分模板的权系数之和为0,使得灰度平坦区的响应为0。平滑模板的权系数都为正,和为1,这使得灰度平坦区的输出与输入相同。
(2)一阶微分模板在对比度较大的点产生较高的响应,二阶微分模板在对比度大的点产生零交叉。一阶微分一般产生更粗的边缘,二阶微分则产生更细的边缘。相对一阶微分而言,二阶微分对细线、孤立的点等小细节有更强的响应。
(3)平滑模板的平滑或去噪程度与模板的大小成正比,跳变边缘的模糊程度与模板的大小成正比。
2、非锐化滤波
非锐化滤波:从原始图像中减去原始图像的一个非锐化的或者说是平滑的图像,从而达到增强边缘等细节的目的,用公式表示为:
g(x,y)=f(x,y)fs(x,y) g(x,y)=f(x,y)-f_s(x,y)
式中f表示输入图像,fs表示由输入图像得到的平滑图像,g为输出图像。
图像平滑的实质是一种低通滤波,从原始图像中减去平滑图像就相当于除去低频成分保留了高频成分。
3、高频增强滤波
高频增强滤波:如果原始图像与高通图像相加,则可以在保持原始图像概貌的同时突出边缘等细节。将原始图像乘以一个比例系数A,高通图像也乘以一个比例系数K,两者相加得到一个增强图像,称该过程为高频增强滤波。
fhb(x,y)=Af(x,y)+Kg(x,y) f_{hb}(x,y)=Af(x,y)+Kg(x,y)
fhb(x,y)f_{hb}(x,y)表示输出图像,g(x,y)g(x,y)f(x,y)f(x,y)的一个高通图像,A>=0,0<=K<=1。K在0.2~0.7之间取值时,高频增强滤波的效果最好;A足够大时,图像锐化作用削弱,输出图像接近原始图像整数倍;特别地,当A=1,K=1时为常用的拉普拉斯高频增强模板。
常见的拉普拉斯高频增强模板:
[010151010][111191111][121252121] \begin{bmatrix} 0 &amp; -1 &amp; 0 \\ -1 &amp; 5* &amp; -1 \\ 0 &amp; -1 &amp; 0 \end{bmatrix} \begin{bmatrix} -1 &amp; -1 &amp; -1 \\ -1 &amp; 9* &amp; -1 \\ -1 &amp; -1 &amp; -1 \end{bmatrix} \begin{bmatrix} 1 &amp; -2 &amp; 1 \\ -2 &amp; 5* &amp; -2 \\ 1 &amp; -2 &amp; 1 \end{bmatrix}

3.5 伪彩色处理

原理:不同灰度级赋予不同彩色。
1、灰度分层法:类似于等高线、卫星云图、天气预报图等
2、灰度变换法:红外热成像仪等
3、频域滤波法:在频率域进行伪彩色处理

3.6 同态滤波

同态滤波:在压缩动态范围的同时增强图像对比度,既增强暗区的图像细节又不损失亮区的图像细节。同态滤波用于消除图像中的非均匀光照,对乘性噪声的滤波效果也比较好。
通常认为,像素的灰度值为光照的入射分量与物体的反射分量的乘积决定。
f(x,y)=i(x,y)r(x,y) f(x,y)=i(x,y)r(x,y)
入射分量描述景物的照明,与景物无关,在空间均匀或缓慢变化,频谱特性集中在低频部分。由于景物具有较多细节内容,因而反射分量随空间变化较大,其频谱特性主要集中在高频部分。通过消除场景关照的不均匀性可以增强图像细节。
对上式两边取对数
lnf(x,y)=lni(x,y)+lnr(x,y) \mathrm{ln}f(x,y)=\mathrm{ln}i(x,y)+\mathrm{ln}r(x,y)
两边做傅里叶变换,得
Ff(u,v)=Fi(u,v)+Fr(u,v) F_f(u,v)=F_i(u,v)+F_r(u,v)
高斯高通同态滤波器:
H(u,v)=(γHγL)[1ecD2(u,v)D02]+γL H(u,v)=(\gamma _H-\gamma _L)[1- e^{-c\frac{D^2(u,v)}{D_0^2}}]+\gamma _L
γH\gamma _HγL\gamma _L用于控制滤波强度,c用于控制滤波器斜面的锐化程度,D2(u,v)D^2(u,v)为频谱上点(u,v)到频谱中心的距离,D02D_0^2为截止半径。
同态滤波结果:
g(x,y)=exp{F1[Ff(u,v)H(u,v)]} g(x,y)=exp\{F^{-1}[F_f(u,v)H(u,v)]\}

第4章 图像的几何变换

4.1 几何变换基础

1、概述
2、齐次坐标
标准化齐次坐标是几何变换的基础。
3、二维图像几何变换矩阵
P=TP0P0=[x1x2...xny1y2...yn11...1]P=[Hx1Hx2...HxnHy1Hy2...HynHH...H]T=[abpcdq001] P=TP_0 \\ P_0=\begin{bmatrix}x_1 &amp; x_2 &amp; ... &amp; x_n \\ y_1 &amp; y_2 &amp; ... &amp; y_n \\ 1 &amp; 1 &amp; ... &amp; 1\end{bmatrix} \\ \\ P_=\begin{bmatrix}Hx_1&#x27; &amp; Hx_2&#x27; &amp; ... &amp; Hx_n&#x27; \\ Hy_1&#x27; &amp; Hy_2&#x27; &amp; ... &amp; Hy_n&#x27; \\ H &amp; H &amp; ... &amp; H\end{bmatrix} \\ T=\begin{bmatrix}a &amp; b &amp; p \\ c &amp; d &amp; q \\ 0 &amp; 0 &amp; 1\end{bmatrix}

4.2 图像比例缩放

1、图像比例放缩变换
全比例放缩:x轴方向和y轴方向缩放比例相同
几何畸变:x轴方向和y轴方向缩放比例不相同,会改变像素间的相对位置,产生几何畸变
插值处理:比例缩放可能导致出现空穴,必须进行插值。插值方法有最邻近插值法和插值算法(如双线性内插值法)
(1)图像的比例缩小
I(x,y)=F(int(cx),int(cy)),c=1k I(x,y)=F(int(cx),int(cy)), c=\frac 1 k
(2)图像的非比例缩小
I(x,y)=F(int(c1x),int(c2y)),c1=1k1,c2=1k2 I(x,y)=F(int(c_1x),int(c_2y)), c_1=\frac 1 {k_1}, c_2=\frac 1 {k_2}
(3)图像的比例放大
最邻近插值法:原图像对应元素如果不存在就取邻近的元素。
线性插值法:
g(x,y)=(1q)[(1p)f([x],[y]+1)+pf([x]+1,[y])]+q[(1p)f([x],[y]+1)+pf([x]+1,[y]+1)] g(x,y)=(1-q)[(1-p)f([x],[y]+1)+pf([x]+1,[y])]+q[(1-p)f([x],[y]+1)+pf([x]+1,[y]+1)]
在这里插入图片描述
2、比例缩放的实现 (略)

4.3 图像平移

没啥说的

4.4 图像镜像

没啥说的

4.5 图像旋转

1、图像的旋转变换
变换矩阵没啥说的
插值方法:行插值、列插值、双线性插值
2、图像旋转的实现(略)

4.6 图像复合变换

复合平移、复合比例、复合旋转、图像转置、任意点比例缩放、任意点旋转
插值方法:
在这里插入图片描述
插值算法:双线性插值、最邻近插值

4.7 透视变换

1、透视变换
投影变换:把空间坐标系中的三维物体或对象转变为二维图像表示的过程称为投影变换。根据视点和投影平面之间的距离的不同,投影可分为平行投影(距离∞)和透视投影(有限距离)。
平行投影:投影线互相平行的投影称为平行投影,分为正投影和斜投影。正投影要求投影线垂直于投影面,分为正交投影和正轴测投影,正交投影要求坐标轴必须正交,正轴测投影要求坐标轴夹角都相等即为120°,根据坐标轴单位长度是否都相等分为正等轴测图、正二轴测图、正三轴测图。斜投影不要求投影线与投影面垂直,根据坐标轴单位长度是否相等分为斜等测投影和斜二测投影。
透视投影:投影线不相互平行的投影,根据灭点的数量分为一点透视、两点透视和三点透视。
2、其他变换
几何畸变:成像与目标之间不相似的情况称为几何畸变。
(1)非矩形像素坐标的转换
极坐标、柱坐标、球坐标→笛卡尔坐标系
(2)图像错切
平面景物在投影平面上的非垂直投影。
水平错切、垂直错切
(3)图像卷绕
通过指定一系列控制点的位移来定义空间变换的图像变形的处理技术,非控制点的位移则通过控制点进行插值。

4.8 几何畸变的矫正

在这里插入图片描述
几何畸变两个关键步骤:图像空间像素坐标的几何变换——空间变换;变换后的标准图像空间的各像素灰度值的计算——灰度值计算。
校正函数的建立步骤:
(1)利用控制点对图像数据建立一个模拟几何畸变的数学模型,以建立畸变图像空间与标准空间的对应关系
(2)用这种对应关系把畸变空间中的全部元素变换到标准空间中去。
重采样的方法:
(1)直接成图法
畸变图像元素→标准图像空间正确的位置
(x,y)=f(u,v)(x,y)=\boldsymbol f(u,v)
(2)间接成图法(重采样成图法)
标准图像空间某个位置→对应畸变图像位置
(u,v)=f1(x,y)(u,v)=\boldsymbol f^{-1}(x,y)
两种方法的区别:校正函数不同,直接成图法通过亮度重配置获得亮度值,间接成图法通过亮度重采样获得亮度值。
多项式校正法:将几何畸变看成各种类型仿射变换复合作用的结果。
{u=gu(x,y)=i=0nj=0niaijxiyjv=gv(x,y)=i=0nj=0nibijxiyj \left \{ \begin{matrix} u=g_u(x,y)=\sum_{i=0}^{n}\sum_{j=0}^{n-i}a_{ij}x^iy^j \\ \\ v=g_v(x,y)=\sum_{i=0}^{n}\sum_{j=0}^{n-i}b_{ij}x^iy^j \end{matrix} \right.
拟合误差平方和:
{εu=k=1K(uki=0nj=0niaijxkiykj)2εv=k=1K(vki=0nj=0nibijxkiykj)2 \left \{ \begin{matrix} \varepsilon_u=\sum_{k=1}^K(u_k-\sum_{i=0}^{n}\sum_{j=0}^{n-i}a_{ij}x_k^iy_k^j)^2 \\ \\ \varepsilon_v=\sum_{k=1}^K(v_k-\sum_{i=0}^{n}\sum_{j=0}^{n-i}b_{ij}x_k^iy_k^j)^2 \end{matrix} \right.
使用最小二乘法计算系数时,控制点的数目不能小于n。

第5章 频域处理

数字图像处理的两类方法:空域法、频域法
频域法:把图像信号从空域转换为频域进行图像分析
频域处理的应用:图像特征的提取、图像压缩编码、减小计算维数

5.1 频域与频域变换

频域变换的理论基础:任意波形都可以表示为一系列正弦波的加和
幅频特性——振幅与频率之间的关系
相频特性——初相与频率之间的关系
时域和频域的变换:
f(x)A(ω),Φ(ω)F(ω)f(x)\begin{matrix}正变换 \\ \Leftrightarrow \\ 逆变换\end{matrix}A(\omega),\Phi(\omega) \rightarrow F(\omega)
5.2 傅里叶变换
1、连续函数的傅里叶变换
关键词:狄利克雷条件、二维傅里叶变换
2、离散傅里叶变换
定义:
F[f(x)]=F(u)=x=0N1f(x)ej2πuxNF1[F(u)]=f(x)=1Nu=0N1F(u)ej2πuxNF[f(x)]=F(u)=x=0N1f(x)[cos(2πNux)jsin(2πNux)]F1[F(u)]=f(x)=1Nu=0N1F(u)[cos(2πNux)+jsin(2πNux)] \mathscr{F}[f(x)]=F(u)=\sum_{x=0}^{N-1}f(x)e^{-j\frac {2\pi ux}{N}} \\ \mathscr{F}^{-1}[F(u)]=f(x)=\frac 1 N \sum_{u=0}^{N-1}F(u)e^{j\frac {2\pi ux}{N}} \\ \mathscr{F}[f(x)]=F(u)=\sum_{x=0}^{N-1}f(x)[cos(\frac {2\pi} Nux)-j\cdot sin(\frac {2\pi} Nux)] \\ \mathscr{F}^{-1}[F(u)]=f(x)=\frac 1 N \sum_{u=0}^{N-1}F(u)[cos(\frac {2\pi} Nux)+j\cdot sin(\frac {2\pi} Nux)] \\
离散傅里叶变换的结果仍然是一个离散的序列,对每一个u对应的傅里叶变换结是所有输入序列f(x)的加权和,u决定了每个傅里叶变换结果的频率
如果F(u)可以表示为F(u)=R(u)+jI(u)F(u)=R(u)+jI(u),且R(u)和I(u)是实函数,则称F(u)=R2(u)+I2(u)|F(u)|=\sqrt {R^2(u)+I^2(u)}为f(x)的频谱,φ(u)=arctan(I(u)R(u))\varphi(u)=arctan(\frac {I(u)}{R(u)})为f(x)的相位谱。频谱的平方称为能量谱。
二维离散傅里叶变换:
F[f(x,y)]=F(u,v)=x=0M1y=0N1f(x,y)ej2π(uxM+vyN)F1[f(x,y)]=F(u,v)=1MNu=0M1v=0N1F(u,v)ej2π(uxM+vyN) \mathscr{F}[f(x,y)]=F(u,v)=\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)e^{-j2\pi (\frac {ux} M+\frac {vy} N)} \\ \mathscr{F}^{-1}[f(x,y)]=F(u,v)=\frac 1 {MN}\sum_{u=0}^{M-1}\sum_{v=0}^{N-1}F(u,v)e^{j2\pi (\frac {ux} M+\frac {vy} N)}
3、离散傅里叶变换的性质
在这里插入图片描述
在这里插入图片描述
4、离散傅里叶变换的openCV 不考

5.3 频域变换的一般表达式

1、可分离变换
二维傅里叶变换通用表达式:
F(u,v)=x=0M1y=0N1f(x,y)g(x,y,u,v)f(x,y)=u=0M1v=0N1F(u,v)h(x,y,u,v) F(u,v)=\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)\cdot g(x,y,u,v) \\ f(x,y)=\sum_{u=0}^{M-1}\sum_{v=0}^{N-1}F(u,v)\cdot h(x,y,u,v)
其中g和h分别被称为正向变换核与负向变换核。
可分离的:
如果
g(x,y,u,v)=g1(x,u)g2(y,v)h(x,y,u,v)=h1(x,u)h2(y,v) g(x,y,u,v)=g_1(x,u)\cdot g_2(y,v) \\ h(x,y,u,v)=h_1(x,u)\cdot h_2(y,v)
则称正反变换核是可分离的。进一步地,如果g1和g2,h1和h2在函数形式上一致,则称该变换核是对称的。
2、图像变换的矩阵表示
F=PfQf=P1FQ1P(u,x)=g1(x,u)=ej2πuxMQ(y,v)=g2(y,v)=ej2πvyN \boldsymbol {F=PfQ} \\ \boldsymbol {f=P^{-1}FQ^{-1}} \\ P(u,x)=g_1(x,u)=e^{-j\frac {2\pi ux} M} \\ Q(y,v)=g_2(y,v)=e^{-j\frac {2\pi vy} N}

5.4 离散余弦变换(DCT)

1、一维离散余弦变换
DCT变换核定义:
g(x,u)=C(u)2Ncos(2x+1)uπ2NC(u)={12,u=01,else \begin{matrix} g(x,u)=C(u)\sqrt {\frac 2 N cos \frac {(2x+1)u\pi} {2N}} \\ \\ C(u)=\left \{ \begin{matrix} \frac 1 {\sqrt 2}, u=0 \\ \\ 1,else\end{matrix}\right. \end{matrix}
一维DCT定义:
F(u)=x=0N1f(x)g(x,u)F=Gf(G(u,x)=g(x,u) F(u)=\sum_{x=0}^{N-1}f(x)g(x,u) \\ \boldsymbol {F=Gf}(矩阵形式,G(u,x)=g(x,u))
在这里插入图片描述
DCT逆变换IDCT:
h(x,u)=g(x,u)=C(u)2Ncos(2x+1)uπ2Nf(x)=u=0N1F(u)h(x,u) h(x,u)=g(x,u)=C(u)\sqrt {\frac 2 N cos \frac {(2x+1)u\pi} {2N}} \\ f(x)=\sum_{u=0}^{N-1}F(u)h(x,u)
2、二维离散余弦变换
2D-DCT:
g1(x,u)=2MC(u)cos(2x+1)uπ2Mg2(y,v)=2NC(v)cos(2x+1)vπ2Ng(x,y,u,v)=g1(x,u)g2(y,v)F(u,v)=x=0M1y=0N1f(x,y)g(x,y,u,v) g_1(x,u)= \sqrt {\frac 2 M} C(u) cos \frac {(2x+1)u\pi} {2M} \\ g_2(y,v)= \sqrt {\frac 2 N} C(v) cos \frac {(2x+1)v\pi} {2N} \\ g(x,y,u,v)=g_1(x,u)g_2(y,v) \\ F(u,v)=\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)g(x,y,u,v)
2D-IDCT:
h1(x,u)=g1(x,u)h2(y,v)=g2(y,v)h(x,y,u,v)=h1(x,u)h2(y,v)f(x,y)u=0M1v=0N1F(u,v)h(x,y,u,v) h_1(x,u)=g_1(x,u) \\ h_2(y,v)=g_2(y,v) \\ h(x,y,u,v)=h_1(x,u)\cdot h_2(y,v) \\ f(x,y)\sum_{u=0}^{M-1}\sum_{v=0}^{N-1}F(u,v)h(x,y,u,v)

5.5 频域中图像处理的实现

1、理解数字图像的频谱图
数字图像平移后的频谱中,图像的能量将集中到频谱中心(低频成分),细节信息分散在图像频谱的边缘。频谱中的低频成分代表了图像的概貌,高频成分代表了图像中的细节。
2、频域图像处理步骤
在这里插入图片描述
3、频域滤波
低通滤波器、高通滤波器、带通滤波器、带阻滤波器
高通巴特沃斯滤波器:H(u,v)=11+[D0D(u,v)]2nH(u,v)=\frac 1 {1+[\frac {D_0} {D(u,v)}]^{2n}}
低通巴特沃斯滤波器:H(u,v)=11+[D(u,v)D0]2nH(u,v)=\frac 1 {1+[\frac {D(u,v)} {D_0}]^{2n}}

5.6 小波变换简介(暂略)

第6章 数学形态学处理

数学形态学四种基本运算:腐蚀、膨胀、开运算、闭运算

6.1 引言

1、数学形态学
数学形态学的基本思想:用具有一定形态的结构元素去量度和提取图像中的对应形状,已以达到图像分析和识别的目的。
2、基本符号和术语
元素和集合、交并补差、平移反射、目标图像与结构元素
击中与击不中:交集为空击不中,交集不为空击中

6.2 二值形态学

1、腐蚀
XS={xXS+xX}X\ominus S=\{x\in X |S+x\subseteq X\}
理解:把结构体元素放在目标图像中移动,则结构体元素的原点的集合构成腐蚀的结果。
2、膨胀
XS={X+ssS}={S+xxX}={x(Sv+x)X}X\oplus S=\bigcup\{X+s|s\in S\}=\bigcup\{S+x|x\in X\}=\{x|(S^v+x) \cap X\neq \varnothing\}
理解:第二种定义比较好理解,即吧结构体元素原点放在目标图像中移动,所有结构体元素的并。
运算律:
X(YZ)=(XY)(XZ)X(YZ)=(XY)(XZ)(XY)Z(XZ)(YZ)(XY)Z=(XZ)(YZ)(XY)Z=(XZ)(YZ)(XY)Z(XZ)(YZ) X\ominus(Y\cap Z)=(X\ominus Y)\cap(X\ominus Z) \\ X\oplus(Y\cap Z)=(X\oplus Y)\cap(X\oplus Z) \\ (X\cap Y)\ominus Z\supset(X\ominus Z)\cap (Y\ominus Z) \\ (X\cap Y)\oplus Z=(X\oplus Z)\cap (Y\oplus Z) \\ (X\cup Y)\ominus Z=(X\ominus Z)\cup (Y\ominus Z) \\ (X\cup Y)\oplus Z\subseteq(X\oplus Z)\cup (Y\oplus Z)
3、开闭运算
开运算:XS=(XS)SX○S=(X\ominus S)\oplus S
闭运算:XS=(XS)SX\cdot S=(X\oplus S)\ominus S
开闭运算的代数性质:
(1)对偶性:(XCS)C=XS;(XCS)=XS(X^C○S)^C=X\cdot S; (X^C\cdot S)=X○S
(2)扩展性:XSXXSX○S\subseteq X \subseteq X\cdot S
开运算恒使图像缩小,闭运算恒使图像扩展。
(3)单调性:XYXSYS,XSYSX\subseteq Y \Rightarrow X\cdot S\subseteq Y\cdot S, X○ S\subseteq Y○ S
YZZY=ZXYXZY\subseteq Z\wedge Z\cdot Y=Z \Rightarrow X\cdot Y\subseteq X \cdot Z
(4)平移不变性:(X+h)S=(XS)+h(X+h)\cdot S=(X\cdot S)+h
(X+h)S=(XS)+h(X+h)○ S=(X○ S)+h
X(S+h)=XSX\cdot (S+h)=X\cdot S
X(S+h)=XSX○ (S+h)=X○ S
(5)等幂性:(XS)S=XS,(XS)S=XS(X\cdot S)\cdot S = X\cdot S,(X○ S)○ S = X○ S
(6)开闭运算与集合的关系:
(i=0nXi)Si=0n(XiS)(\bigcup_{i=0}^{n}X_i)○S\supseteq \bigcup_{i=0}^{n}(X_i○S)
(i=0nXi)Si=0n(XiS)(\bigcap_{i=0}^{n}X_i)○S\subseteq \bigcap_{i=0}^{n}(X_i○S)
(i=0nXi)Si=0n(XiS)(\bigcup_{i=0}^{n}X_i)\cdot S\supseteq \bigcup_{i=0}^{n}(X_i\cdot S)
(i=0nXi)Si=0n(XiS)(\bigcap_{i=0}^{n}X_i)\cdot S\subseteq \bigcap_{i=0}^{n}(X_i\cdot S)
4、击中击不中变换
XS={xS1+xXS2+xXC}=(XS1)(XCS2)X\odot S=\{x|S_1+x\subseteq X \wedge S_2+x\subseteq X^C\}=(X\ominus S_1)\cap(X^C\ominus S_2)

6.3 灰值形态学

1、灰值腐蚀
(fb)(s,t)=min{f(s+x,t+y)b(x,y)s+x,t+yDfx,yDb}(f\ominus b)(s,t)=min\{f(s+x,t+y)-b(x,y)|s+x,t+y\in D_f \wedge x,y \in D_b\}
腐蚀的计算是在由结构元素确定的领域中选取fbf\ominus b的最小值,所以灰值图像的腐蚀操作会有两类效果:如果结构体元素的值都为正,则输出图像会比原图像暗;如果输入图像中亮细节的尺寸比结构元素小,则其影响会被减弱。
2、灰值膨胀
(fb)(s,t)=max{f(sx,ty)+b(x,y)sx,tyDfx,yDb}(f\oplus b)(s,t)=max\{f(s-x,t-y)+b(x,y)|s-x,t-y\in D_f \wedge x,y \in D_b\}
膨胀的计算是在由结构元素确定的领域中选取fbf\oplus b的最大值,所以对灰值图像的膨胀有两类效果:如果结构体元素的值都为正,则输出图像会比原图像亮;如果输入图像中暗细节的灰度值及形状相对于结构体元素的大小,则其被消减或消除。
膨胀或腐蚀满足以下对偶关系:
(fb)C=fCbV(f\oplus b)^C=f^C \ominus b^V
(fb)C=fCbV(f\ominus b)^C=f^C \oplus b^V
3、灰值开闭运算
定义与二值形态学定义类似,亦满足类似的对偶关系。
灰值开运算削平山峰。灰值闭运算填平深谷。
实际中常用开运算操作消除与结构元素相比尺寸较小的亮细节,而保持整体灰度值和大的亮区域;实际应用中常使用闭运算操作消除与结构元素相比尺寸较小的暗细节,而保持图像整体灰值和大的暗区域。

6.4 形态学的应用

灰值形态学的主要算法有:灰值形态学梯度、形态学平滑、纹理分割、顶帽变换等
二值形态学的主要算法有:二值形态学滤波、骨架抽取等
1、形态学滤波
将开运算与闭运算相结合可以构成形态学噪声滤除器,开运算滤除黑色背景上的白色噪声,闭运算滤除白色前景中的黑色噪声。
2、骨架提取
骨架定义方法:火种法、最大圆盘法
(1)基于腐蚀和开运算的细化
定义骨架子集Sk(X)S_k(X)为图像X内所有最大圆盘kB(至少与两条边相切的内切圆)的圆心x构成的集合。从骨架的定义可知,骨架是所有骨架子集的并,即
Sk(X)={Sk(X)k=0,1,...,n} S_k(X)=\bigcup\{S_k(X)|k=0,1,...,n\}
可以证明骨架子集可以表示为:
Sk(X)=(XkB)[(XkB)B]XkB=(X(k1)B)B S_k(X)=(X\ominus kB)-[(X\ominus kB)○ B] \\ 递推公式:X\ominus kB=(X\ominus (k-1)B)\ominus B
所以:
S(X)={(XkB)[(XkB)B]k=0,1,2,...,n} S(X)=\bigcup\{(X\ominus kB)-[(X\ominus kB)○B]|k=0,1,2,...,n\}
停止迭代的时机:XkBX\ominus kB\varnothing
(2)快速形态学细化算法

在这里插入图片描述
(1)(2)(4)(6)都不能删除,(2)(4)可以删除
可以删除的情况:内部点不可删除、孤立点不可删除、直线端点不可删除、去掉后连通分量不增加。

第7章 图像分割

图像分割就是把图象分成一系列有意义的、各具特征的目标或区域的技术和过程。这里的特征包括图像的统计特征和视觉特征。统计特征包括图像的直方图、矩和频谱等,图像的视觉特征主要包括区域的亮度、纹理或轮廓等。
图像分割一般基于像素灰度值的两个性质:不连续性和相似性。区域之间的边界往往具有有灰度不连续性,而区域内部一般具有灰度相似性。
图像分割算法一般分为两类:利用灰度不连续性——基于边界的分割;利用灰度相似性——基于区域的分割
常用算法:阈值分割、区域生长、区域分裂与合并、边缘检测与边界连接、区域标记与轮廓跟踪、分水岭分割、Mean Shift和Graph Cuts算法

7.1 阈值分割

1、概述
基本假设:目标与背景相邻像素间灰度值高度相关;目标与边界两侧像素灰度值差别很大;目标与背景的灰度分布都是单峰的。
阈值分割过程:阶跃函数
阈值分割的关键——阈值的确定:
(1)种类:全局阈值、局部阈值、动态阈值(自适应阈值)
(2)阈值分割的要素:T=T[x,y,f(x,y),p(x,y)]T=T[x,y,f(x,y),p(x,y)], f(x,y)表示灰度值,p(x,y)表示某种局部性质。
2、全局阈值
适用条件:“双峰”性质
确定全局阈值的方法:
(1)极小点阈值法:取直方图谷底位置作为阈值
(2)迭代阈值法:初始阈值T1T_1→像素划分为G1G_1G2G_2→计算平均灰度μ1\mu_1μ2\mu_2→计算新的阈值T2=μ1+μ22T_2=\frac {\mu_1+\mu_2} 2→迭代→终止条件T2T1&lt;T0|T_2-T_1| &lt;T_0
(3)最优阈值法:选择一个阈值使得总的分类误差概率降到最低。
p(z)p(z)为灰度概率密度函数,p1(z)p_1(z)p2(z)p_2(z)分别为背景和目标灰度条件概率密度函数,P1P_1P2P_2为背景和目标像素出现的概率,那么由全概率公式得:
p(z)=P1p1(z)+P2p2(z) p(z)=P_1p_1(z)+P_2p_2(z)
把目标像素错分为背景像素的误差条件概率为:
E1(T)=Tp1(z)dz E_1(T)=\int_{-\infty}^Tp_1(z)\mathrm{d}z
把背景像素错分为背景像素的误差条件概率为:
E2(T)=T+p2(z)dz E_2(T)=\int_T^{+\infty}p_2(z)\mathrm{d}z
由全概率公式得总误差概率为:
E(T)=P2E1(T)+P1E2(T) E(T)=P_2E_1(T)+P_1E_2(T)
一般认为目标与背景的灰度服从高斯分布,利用概率论与数理统计中最大似然估计方法可以得到最优解
T=μ1+μ22+σ2μ1μ2ln(P2P1) T=\frac {\mu_1+\mu_2} 2+\frac {\sigma^2} {\mu_1-\mu_2}ln(\frac{P_2}{P_1})
(4)Otsu方法:使阈值分割后各个像素类的类间方差最大。
步骤:将像素按灰度值进行分级,计算从第0个灰度级到第k个灰度级的概率和均值(数学期望),M个阈值将灰度值分为M+1个像素类,计算每个像素类的概率、平均灰度、方差,所有像素类的概率之和为1,图像总的平均灰度是所有像素类灰度的数学期望,类内方差定义为像素类灰度方差的数学期望,类间方差定义为像素类灰度均值的方差。
(5)p参数法
选取一个阈值T使得目标面积与背景面积的比为p:(1-p)
3、局部阈值
(1)直方图变换法
对波谷进行切割或峰谷颠倒、根据像素的梯度值进行加权
(2)散射图
二维坐标图,横轴为灰度,纵轴为某种局部性质(如梯度值),亮度表示频数。根据亮色进行聚类。
4、动态阈值
网格划分,每个子图像定一个阈值。
一种动态阈值算法:
子图像分解→对于具备“双峰”采用最优阈值→插值得到其他阈值→分割

7.2 基于区域的分割

1、区域生长
实质是bfs,需要初始种子,相似性准则
2、区域分裂与合并
先进行迭代四分裂,满足一致性条件后停止迭代,然后进行合并

7.3 边缘检测

常见的边缘类型:阶跃型、斜坡型、线状型、屋顶型
1、微分算子
在这里插入图片描述
结论:一阶导数的幅度值可以用来检测边缘的存在,通过检测二阶导数的过零点可以确定边缘的中心位置,利用二阶导数在过零点附近的符号可以判断是在边缘的亮区还是暗区,处理之前要先消噪。
(1)梯度算子:
Krisch、Prewitt,均可沿8个方向
(2)高斯-拉普拉斯算子
结合了高斯平滑滤波器与拉普拉斯锐化滤波器。
在这里插入图片描述
在这里插入图片描述
(3)Canny边缘检测
Canny算子是一个非常有效的边界检测算子。
①首先对灰度图像进行高斯平滑。
②接着计算每个像素的梯度幅值和梯度方向。
③ 然后细化边缘。如果当前像素的梯度幅值不高于梯度方向上两个邻点的梯度幅值,则抑制该像素响应,这种方法称之为非最大抑制。
④ Canny算子使用两个幅值阈值,高阈值用于检测梯度幅值大的强边缘,低阈值用于检测梯度幅值较小的弱边缘。低阈值通常取为高阈值的一半。
⑤ 边缘细化后,就开始跟踪具有高幅值的轮廓。
⑥ 最后,从满足高阈值的边缘像素开始,顺序跟踪连续的轮廓段,把与强边缘相连的弱边缘连接起来。
2、边界连接
幅度阈值、角度阈值
3、哈夫变换
前提条件:已知区域形状
(1)直线检测
y=ax+b→b=-ax+y→{b=axi+yib=axj+yj\left \{\begin{matrix}b=-ax_i+y_i \\ b=-ax_j+y_j\end{matrix}\right.
在这里插入图片描述
如果多个点在同一条直线上,则在参数空间中对应直线必交于同一点。
步骤:参数a、b进行量化,对于目标空间的每一个点,让a取遍每一个值apa_p,代入b=-ax+y,得到bpb_p,给A(p,q)++,处理完所有像素查找峰值即可知道最可能的a与b。
斜截式方程有缺陷,一般可以换为法线式方程:ρ=xcosθ+ysinθ\rho=xcos\theta +ysin\theta
(2)圆的检测:
{a=xrcosθb=yrsinθ \left \{ \begin{matrix} a=x-rcos\theta \\ b=y-rsin\theta \end{matrix} \right.
(3)任意曲线的检测:类似做法

7.4 区域标记与轮廓追踪

1、区域标记
递归标记:BFS
序贯标记:左、左上、上、右上邻点,如果都是背景,当前点新建标记;如果有一个被标记,复制标记;如果有两个不同标记,赋值之一,并在等价表中记录,再次扫描把等价的标记改为最小标记。
2、轮廓提取
八面合围置为背景
3、轮廓追踪
步骤:扫描图像,选定左上角点,初始dir为左下方向(4方向中为向下),逆时针查找边界点,查找到的新边界点作为当前点,在顺时针转回一个方向,迭代直到回到起始点。

7.5 分水岭分割

1、基本分水岭算法
降雨法:降水,递归寻找低洼点,雨水流向>=2个低洼的是分水岭。
淹没法:提升水位,如果水流溢出地外就筑坝,最后堤坝就是分水岭。
2、Vincent-Soille算法
类似并查集,提升水位,水平面与一些点相交,对于这些点,如果邻接点没有标记,新建标记,如果有标记,复制标记(取最近的积水盆地)
使用分水岭分割之前先做距离变换,去除粘连。

7.6 现代分割方法(略)

7.7 图像分割实例

大米计数:
(1)高斯滤波、中值滤波或开闭运算消噪
(2)消除非均匀光照:背景照度估计、灰值形态学、同态滤波
(2)区域分割

第8章 图像特征与理解

图像特征:人视觉能够识别的自然特征,分为全局特征和局部特征。
,全局特征用于描述图像或目标的颜色或形状等整体特征,局部特征指一些能够稳定出现并具有良好可区分性的特征。

8.1 图像的基本特征

提取图像几何特征之前,分割和二值化处理。
1、几何特征
(1)位置和方向
位置:质心
方向:最小二阶矩轴(最小转动惯量)
(2)周长
隙码:把像素看成小方块后图形的绝对周长
链码:边界像素中心点连线的长度
边界点数之和:边界像素的个数
(3)面积
像素计数面积:统计边界内部像素的个数
由边界行程码计算面积:
①已知区域的行程编码,只需把值为1的行程长度相加,即为区域面积。
②若给定边界的某种表示,则相应连通区域的面积应为区域外边界包围的面积,减去它的内边界包围的面积(空的面积)
yk=y0+i=0kΔyiΔyi={1,εi=1,2,30,εi=0,41,εi=5,6,7Δxi={1,εi=0,1,70,εi=2,61,εi=3,4,5A=i=1n(yi1Δxi+a) y_k=y_0+\sum_{i=0}^k\Delta y_i \\ \Delta y_i=\left \{\begin{matrix}-1,\varepsilon _i = 1,2,3 \\ 0,\varepsilon _i = 0,4\\ 1,\varepsilon _i = 5,6,7 \\\end{matrix}\right. \\ \Delta x_i=\left \{\begin{matrix}-1,\varepsilon _i = 0,1,7 \\ 0,\varepsilon _i = 2,6\\ 1,\varepsilon _i = 3,4,5 \\\end{matrix}\right. \\ A=\sum_{i=1}^n(y_{i-1}\Delta x_i+a)
由边界坐标计算面积:利用格林公式,A=12i=1Nb(xiyi+1xi+1yi]A=\frac 1 2 \sum_{i=1}^{N_b}(x_iy_{i+1}-x_{i+1}y_i]
(4)长轴和短轴
最小外接矩形的长与宽
(5)距离
欧式距离、市区距离、棋盘距离
2、形状特征
(1)矩形度=物体面积/最小外接矩形面积
长宽比=最小外接矩形的宽与长的比值
(2)圆形度:
致密度=周长^2/面积
边界能量:物体的周长为P,p表示边界点到某一起始点的距离,该点处的曲率半径为r§,则曲率为K§=1/r§,边界能量为E=1P0pK(p)2dpE=\frac 1 P\int_{0}^{p}|K(p)|^2\mathrm{d}p,在面积相同的情况下,圆具有最小的边界能量E0=(2πP)2=(1R)2E_0=(\frac {2\pi} P)^2=(\frac 1 R)^2
原型性=区域质心到边界点的平均距离/区域质心到边界点的距离均方差,当区域R趋向圆形时,圆形性趋向无穷。
面积与平均距离平方的比值=面积/内部点到边界点的平均距离
3、球状性=内切圆半径/外接圆半径
4、偏心率=区域长轴/区域短轴
5、形状描述子
(1)边界链码
在这里插入图片描述
在这里插入图片描述
(2)一阶差分链码
为了改进边界链码在旋转过程中会改变的情况。
在这里插入图片描述
(3)傅里叶描述子
原理:将二维问题转化为一维问题进行处理,可以将边界曲线转化为一维函数,或者将边界曲线转化为复平面上点的序列。假定有一个复数序列,可以对其采用采用离散傅里叶变换,得到的结果就成为傅里叶变换子。

8.2 角点特征

角点:亮度变化最剧烈、图像边缘曲线上曲率最大,具有高信息密度和旋转不变的特性
角点检测算法的4个准则:检测性、定位性、稳定性、复杂性
角点检测方法的分类:基于边缘的检测算法、基于灰度变化的检测算法。前者做法是找曲率最大边界点或拐点或进行多边形拟合,但抗噪差且依赖边缘提取结果。后者做法为对局部结果进行分析,进行角点性质检测。
1、Moravec算法
灰度变化定义为沿各个方向移动窗口的灰度值与当前窗口灰度值差的平方和。
E(u,v)=(x,y)W(I(x+u,y+v)I(x,y))2 E(u,v)=\sum_{(x,y)\in W}(I(x+u,y+v)-I(x,y))^2
在这里插入图片描述
2、Harris算法
在Moravec算法基础上给不同方向的灰度变化方差加上权值,该权值为二维高斯窗口函数。
E(u,v)=(x,y)Ww(x,y)(I(x+u,y+v)I(x,y))2w(x,y)=e(xx0)2+(yy0)22σ2I(x+u,y+v)I(x+u,y+v)=I(x,y)+uIx+vIy:E(u,v)=[u,v]M[u,v]TM=(x,y)Ww(x,y)[Ix2IxIyIxIyIy2]=[abcd] E(u,v)=\sum_{(x,y)\in W}w(x,y)(I(x+u,y+v)-I(x,y))^2 \\ w(x,y)=e^{-\frac {(x-x_0)^2+(y-y_0)^2} {2\sigma^2}} \\ 对I(x+u,y+v)进行泰勒展开:I(x+u,y+v)=I(x,y)+uI_x+vI_y \\ 代入上面的式子得:E(u,v)=[u,v]\boldsymbol M[u,v]^T \\ \boldsymbol M=\sum_{(x,y)\in W}w(x,y)\begin{bmatrix}I_x^2 &amp; I_xI_y \\ I_xI_y &amp; I_y^2 \end{bmatrix}=\begin{bmatrix}a &amp; b \\ c &amp; d \end{bmatrix}
特征值λ1与λ2决定了矩阵M的性质:
在这里插入图片描述
3、SUSAN算法
角点处的SUSAN面积具有局部最小值
在这里插入图片描述

8.3~8.6 (略)

附加:图像匹配

方法:投影法与差影法
投影法:分为水平投影法和垂直投影法。基本原理是统计每行或每列目标像素的个数,得到一个直方图,根据直方图很容易就能找到目标图像的位置。
差影法:利用同一景物同一时刻或不同时刻的图像,进行加、减、乘、除代数运算,分析得出某一物体的位置和运动情况

第9章图像编码

9.1 图像编码概述

1、图像编码的基本原理和方法
(1)图像数据冗余:
空间冗余:内部相邻像素较强的相关性导致的冗余
时间冗余:相邻两帧图像之间的相关性导致的冗余
信息熵冗余:编码冗余,用于表示信源符号的平均比特数大于其信息熵时所产生的冗余。信息熵H=i=1Npilbpi=i=1Npilb1pilbNH=-\sum_{i=1}^{N}p_ilbp_i=\sum_{i=1}^{N}p_ilb\frac 1 {p_i}\le lbN
结构冗余:图像中存在较强的纹理结构和自相似性
知识冗余:图像中包含与某些先验知识有关的信息
视觉冗余:人眼不能感知的那部分信息
(2)图像编码方法
分类:有损编码和无损编码;熵编码、预测编码、变换编码、量化编码
熵编码:
①哈夫曼编码、香农-范诺编码、算术编码
②理论基础:平均码长等于信息熵时,总可设计出一种无损编码
③等长编码与变长编码
④变长编码定理:若一个离散无记忆信源的符号集具有r个码元,熵为H,则总可以找到一种无失真编码,构成单义可译码,使其平均码长L满足HlbrLHlbr+1\frac H {lbr}\le L \le \frac H {lbr}+1
预测编码:基于图像数据的空间或时间冗余性,利用相邻已知像素预测当前像素的值,再对预测误差进行量化和编码。
变换编码:空间域图像正交变换到另一变换域上,降低相关性。
量化编码:通过将动态范围较大的输入信号映射到有限个离散值上。
2、图像编码新技术(略)
3、图像编码评价
编码效率:平均码字长度L,压缩比CRC_R,编码效率η
L=i=1NpiLiCR=BLη=HL L=\sum_{i=1}^{N}p_iL_i \\ C_R=\frac B L \\ \eta = \frac H L
编码质量:均方误差MSE、峰值信噪比PSNR
算法复杂度和算法的适用范围

9.2 哈夫曼编码

不会的挨打

9.3 香农-范诺编码

1、基本方法:
信源符号出现概率降序排序;
计算符号对应码字长度:logDPiNilogDPi+1-log_DP_i\le N_i \le -log_DP_i+1
计算累加概率:Ai=k=0i1piA_i=\sum_{k=0}^{i-1}p_i
将累加概率转换为二进制,取前NiN_i位。
2、二分法香农-范诺编码方法
在这里插入图片描述

9.4 算术编码

两种模式:基于信源概率统计特性的固定编码模式、针对未知信源概率模型的自适应模式
在这里插入图片描述

9.5 行程编码

aabbbcddddd=2a3b1c5d

9.6 LZW编码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2018-07-12 23:42:33 yc461515457 阅读数 1148
  • 车道线检测相关理论知识点

    通过本课程学习,初学者可以熟练使用opencv4 API完成各种常见的图像分割、识别任务。 高级学习者也一定能有新的体会和收获。 本课程所讲的例子代码来自于实际开发项目,有较高的实用性。

    8人学习 刘山
    免费试看

需要使用到OpenCV的图像翻转操作,查了一些flip函数的文档,发现非常confusing,不明白到底0是水平翻转还是1是水平翻转。
最后不得已自己实验才弄清楚。

OpenCV 图像坐标系

在OpenCV里面,坐标系的原点在左上角,row为Y轴,col为X轴。从左上角往下,Y变大,往右,X变大。
这和python里面很多其他的图像处理库不一样,比如PIL和skimage,这些库是python原生态的,是以行列坐标为XY坐标的,也就是从左上角往下,X变大,往右,Y变大。
由此可见,OpenCV和PIL(以及skimage)的xy坐标是反的,这是需要注意的。

Flip

// C++:

void cv::flip(InputArray src, OutputArray dst, int flipCode )

# Python:

dst = cv.flip(src, flipCode[, dst])

Parameters

src input array.
dst output array of the same size and type as src.
flipCode a flag to specify how to flip the array; 0 means flipping around the x-axis and positive value (for example, 1) means flipping around y-axis. Negative value (for example, -1) means flipping around both axes.

从这段描述来看,0代表上下翻转(aroud X-axis),1 代表左右翻转(around Y-axis)