图像算法_图像算法工程师 - CSDN
精华内容
参与话题
  • 图像处理常用算法(基础)

    万次阅读 多人点赞 2018-08-12 23:15:22
    图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。...

    同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,因为现实世界中的物体是三维的,而图像只具有二维信息,从三维到二维的投影成像不可避免的会丢失一部分信息;另外,成像过程中的光照和噪声也是不可避免的重要因素。正是因为这些原因,基于边缘的图像分割仍然是当前图像研究中的世界级难题,目前研究者正在试图在边缘提取中加入高层的语义信息。

            在实际的图像分割中,往往只用到一阶和二阶导数,虽然,原理上,可以用更高阶的导数,但是,因为噪声的影响,在纯粹二阶的导数操作中就会出现对噪声的敏感现象,三阶以上的导数信息往往失去了应用价值。二阶导数还可以说明灰度突变的类型。在有些情况下,如灰度变化均匀的图像,只利用一阶导数可能找不到边界,此时二阶导数就能提供很有用的信息。二阶导数对噪声也比较敏感,解决的方法是先对图像进行平滑滤波,消除部分噪声,再进行边缘检测。不过,利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少,有利于后继的处理和识别工作。

          各种算子的存在就是对这种导数分割原理进行的实例化计算,是为了在计算过程中直接使用的一种计算单位。

     

     

    1.Sobel算子

            其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响。Sobel算子对于象素的位置的影响做了加权,与Prewitt算子、Roberts算子相比因此效果更好。

           Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。实际使用中,常用如下两个模板来检测图像边缘。

                           

    检测水平边沿 横向模板 :           检测垂直平边沿 纵向模板:

    图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。

                                                                                 

    然后可用以下公式计算梯度方向。

                                                                               

     

    在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。

    缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。

     

    2. Isotropic Sobel算子

     

            Sobel算子另一种形式是(Isotropic Sobel)算子,加权平均算子,权值反比于邻点与中心点的距离,当沿不同方向检测边缘时梯度幅度一致,就是通常所说的各向同性Sobel(Isotropic Sobel)算子。模板也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。

     

    3. Roberts算子

    罗伯茨算子、Roberts算子是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子,他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。1963年,Roberts提出了这种寻找边缘的算子。

    Roberts边缘算子是一个2x2的模板,采用的是对角方向相邻的两个像素之差。从图像处理的实际效果来看,边缘定位较准,对噪声敏感。适用于边缘明显且噪声较少的图像分割。Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。

     

    4. Prewitt算子

            Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。

     对数字图像f(x,y),Prewitt算子的定义如下:

    G(i)=|[f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)]-[f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)]|

    G(j)=|[f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)]-[f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)]|

    则 P(i,j)=max[G(i),G(j)]或 P(i,j)=G(i)+G(j)

    经典Prewitt算子认为:凡灰度新值大于或等于阈值的像素点都是边缘点。即选择适当的阈值T,若P(i,j)≥T,则(i,j)为边缘点,P(i,j)为边缘图像。这种判定是欠合理的,会造成边缘点的误判,因为许多噪声点的灰度值也很大,而且对于幅值较小的边缘点,其边缘反而丢失了。

    Prewitt算子对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。

     

    因为平均能减少或消除噪声,Prewitt梯度算子法就是先求平均,再求差分来求梯度。水平和垂直梯度模板分别为:

    检测水平边沿 横向模板                 检测垂直平边沿 纵向模板:

    该算子与Sobel算子类似,只是权值有所变化,但两者实现起来功能还是有差距的,据经验得知Sobel要比Prewitt更能准确检测图像边缘。

     

    5.Laplacian算子

             Laplace算子是一种各向同性算子,二阶微分算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。

     

    拉普拉斯算子也是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数的拉普拉斯变换是各向同性的二阶导数,定义

                                                                               

    了更适合于数字图像处理,将拉式算子表示为离散形式:

    另外,拉普拉斯算子还可以表示成模板的形式,如下图所示,

     

    离散拉普拉斯算子的模板:, 其扩展模板: 。

     

          拉式算子用来改善因扩散效应的模糊特别有效,因为它符合降制模型。扩散效应是成像过程中经常发生的现象。

          Laplacian算子一般不以其原始形式用于边缘检测,因为其作为一个二阶导数,Laplacian算子对噪声具有无法接受的敏感性;同时其幅值产生算边缘,这是复杂的分割不希望有的结果;最后Laplacian算子不能检测边缘的方向;所以Laplacian在分割中所起的作用包括:(1)利用它的零交叉性质进行边缘定位;(2)确定一个像素是在一条边缘暗的一面还是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian of a Gaussian,LoG),由于二阶导数是线性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像,然后计算所得结果的拉普拉斯是一样的。所以在LoG公式中使用高斯函数的目的就是对图像进行平滑处理,使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;图像的平滑处理减少了噪声的影响并且它的主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。

     

     

    6.Canny算子

          该算子功能比前面几种都要好,但是它实现起来较为麻烦,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。

    Canny边缘检测算法

    step1: 用高斯滤波器平滑图象;

    step2: 用一阶偏导的有限差分来计算梯度的幅值和方向;

    step3: 对梯度幅值进行非极大值抑制

    step4: 用双阈值算法检测和连接边缘

    详解:http://www.cnblogs.com/cfantaisie/archive/2011/06/05/2073168.html

     

     

    (1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。

    (2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。

    (3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。

    展开全文
  • 图像识别算法

    万次阅读 多人点赞 2019-08-15 17:36:40
    图像特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取出图像中的关键信息,一些基本元件以及它们...

    图像特征包括颜色特征、纹理特征、形状特征以及局部特征点等。

    局部特点具有很好的稳定性,不容易受外界环境的干扰。

    1. 局部特征点

    图像特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取出图像中的关键信息,一些基本元件以及它们的关系。

    局部特征点是图像特征的局部表达,它只能反正图像上具有的局部特殊性,所以它只适合于对图像进行匹配,检索等应用。对于图像理解则不太适合。而后者更关心一些全局特征,如颜色分布,纹理特征,主要物体的形状等。全局特征容易受到环境的干扰,光照,旋转,噪声等不利因素都会影响全局特征。相比而言,局部特征点,往往对应着图像中的一些线条交叉,明暗变化的结构中,受到的干扰也少。

    而斑点与角点是两类局部特征点。斑点通常是指与周围有着颜色和灰度差别的区域,如草原上的一棵树或一栋房子。它是一个区域,所以它比角点的噪能力要强,稳定性要好。而角点则是图像中一边物体的拐角或者线条之间的交叉部分。

    2. 斑点检测原理与举例

    2.1 LoG与DoH

    斑点检测的方法主要包括利用高斯拉普拉斯算子检测的方法(LOG),以及利用像素点Hessian矩阵(二阶微分)及其行列式值的方法(DOH)。

    LoG的方法已经在斑点检测这入篇文章里作了详细的描述。因为二维高斯函数的拉普拉斯核很像一个斑点,所以可以利用卷积来求出图像中的斑点状的结构。

    DoH方法就是利用图像点二阶微分Hessian矩阵:

     

     

    以及它的行列式的值DoH(Determinant of Hessian):

     

     

    Hessian矩阵行列式的值,同样也反映了图像局部的结构信息。与LoG相比,DoH对图像中的细长结构的斑点有较好的抑制作用。

    无论是LoG还是DoH,它们对图像中的斑点进行检测,其步骤都可以分为以下两步:

    1)使用不同的生成或模板,并对图像进行卷积运算;

    2)在图像的位置空间与尺度空间中搜索LoG与DoH响应的峰值。

    2.2 SIFT

    详细的算法描述参考:SIFT定位算法关键步骤的说明

    2004年,Lowe提高了高效的尺度不变特征变换算法(SIFT),利用原始图像与高斯核的卷积来建立尺度空间,并在高斯差分空间金字塔上提取出尺度不变性的特征点。该算法具有一定的仿射不变性,视角不变性,旋转不变性和光照不变性,所以在图像特征提高方面得到了最广泛的应用。

    该算法大概可以归纳为三步:1)高斯差分金字塔的构建;2)特征点的搜索;3)特征描述。

    在第一步中,它用组与层的结构构建了一个具有线性关系的金字塔结构,让我们可以在连续的高斯核尺度上查找特征点。它比LoG高明的地方在于,它用一阶高斯差分来近似高斯的拉普拉斯核,大大减少了运算量。

    在第二步的特征点搜索中,主要的关键步骤是极值点的插值,因为在离散的空间中,局部极值点可能并不是真正意义上的极值点,真正的极植点可以落在了离散点的缝隙中。所以要对这些缝隙位置进行插值,然后再求极值点的坐标位置。

    第二步中另一关键环节是删除边缘效应的点,因为只忽略那些DoG响应不够的点是不够的,DoG的值会受到边缘的影响,那些边缘上的点,虽然不是斑点,但是它的DoG响应也很强。所以我们要把这部分点删除。我们利用横跨边缘的地方,在沿边缘方向与垂直边缘方向表现出极大与极小的主曲率这一特性。所以通过计算特征点处主曲率的比值即可以区分其是否在边缘上。这一点在理解上可以参见Harris角点的求法。

    最后一步,即为特征点的特征描述。特征点的方向的求法是需要对特征点邻域内的点的梯度方向进行直方图统计,选取直方图中比重最大的方向为特征点的主方向,还可以选择一个辅方向。在计算特征矢量时,需要对局部图像进行沿主方向旋转,然后再进邻域内的梯度直方图统计(4x4x8)。

    2.3 SURF

    详细的算法描述参考:1. SURF算法与源码分析、上  2. SURF算法与源码分析、下

    2006年,Bay和Ess等人基于SIFT算法的思路,提出了加速鲁棒特征(SURF),该算法主要针对于SIFT算法速度太慢,计算量大的缺点,使用了近似Harr小波方法来提取特征点,这种方法就是基于Hessian行列式(DoH)的斑点特征检测方法。通过在不同的尺度上利用积分图像可以有效地计算出近似Harr小波值,简化了二阶微分模板的构建,搞高了尺度空间的特征检测的效率。

    SURF算法在积分图像上使用了盒子滤波器对二阶微分模板进行了简化,从而构建了Hessian矩阵元素值,进而缩短了特征提取的时间,提高了效率。其中SURF算法在每个尺度上对每个像素点进行检测,其近似构建的Hessian矩阵及其行列式的值分另为:

     

     

     

     

    其中和为利用盒子滤波器获得的近似卷积值。如果大于设置的门限值,则判定该像素点为关键字。然后与SIFT算法近似,在以关键点为中心的像素邻域内进行非极大值抑制,最后通过对斑点特征进行插值运算,完成了SURF特征点的精确定位。

    而SURF特征点的描述,则也是充分利用了积分图,用两个方向上的Harr小波模板来计算梯度,然后用一个扇形对邻域内点的梯度方向进行统计,求得特征点的主方向。

    3. 角点检测的原理与举例

    角点检测的方法也是极多的,其中具有代表性的算法是Harris算法与FAST算法。

    这两个算法我都有专门写过博文来描述其算法原理。Harris角点FAST特征点检测

    3.1 Harris角点特征提取

    Harris角点检测是一种基于图像灰度的一阶导数矩阵检测方法。检测器的主要思想是局部自相似性/自相关性,即在某个局部窗口内图像块与在各个方向微小移动后的窗口内图像块的相似性。

    在像素点的邻域内,导数矩阵描述了数据信号的变化情况。假设在像素点邻域内任意方向上移动块区域,若强度发生了剧烈变化,则变化处的像素点为角点。定义的Harris矩阵为:

     

     

    其中,和分别为点在和方向上的强度信息的一阶导数,为对应位置的权重。通过计算Harris矩阵的角点响应值D来判断是否为角点。其计算公式为:

     

     

    其中,det和trace为行列式和迹的操作符,是取值为0.04~0.06的常数。当角点响应值大于设置的门限,且为该点邻域内的局部最大值时,则把该点当作角点。

    3.2 FAST角点特征提取

    基于加速分割测试的FAST算法可以快速地提取出角点特征。该算法判断一个候选点是否为角点,依据的是在一个像素点为圆心,半径为3个像素的离散化Bresenllam圆周上,在给定阈值的条件下,如果在圆周上有个连续的像素灰度值大于或小于。

    针对于上面的定义,我们可以用快速的方法来完成检测,而不用把圆周上的所有点都比较一遍。首先比较上下左右四个点的像素值关系,至少要有3个点的像素灰度值大于或小于,则为候选点,然后再进一步进行完整的判断。

    为了加快算法的检测速度,可以使用机器学习ID3贪心算法来构建决策树。这里需要说明的是,在2010年Elmar和Gregory等人提出了自适应通用加速分割检测(AGAST)算法,通过把FAST算法中ID3决策树改造为二叉树,并能够根据当前处理的图像信息动态且高效地分配决策树,提高了算法的运算速度。

    4. 二进制字符串特征描述子

    可以注意到在两种角点检测算法里,我们并没有像SIFT或SURF那样提到特征点的描述问题。事实上,特征点一旦检测出来,无论是斑点还是角点描述方法都是一样的,可以选用你认为最有效的特征描述子。

    特征描述是实现图像匹配与图像搜索必不可少的步骤。到目前为止,人们研究了各种各样的特征描述子,比较有代表性的就是浮点型特征描述子和二进帽字符串特征描述子。

    像SIFT与SURF算法里的,用梯度统计直方图来描述的描述子都属于浮点型特征描述子。但它们计算起来,算法复杂,效率较低,所以后来就出现了许多新型的特征描述算法,如BRIEF。后来很多二进制串描述子ORB,BRISK,FREAK等都是在它上面的基础上的改进。

    4.1 BRIEF算法

    BRJEF算法的主要思想是:在特征点周围邻域内选取若干个像素点对,通过对这些点对的灰度值比较,将比较的结果组合成一个二进制串字符串用来描述特征点。最后,使用汉明距离来计算在特征描述子是否匹配。

    BRIEF算法的详细描述可以参考:BRIEF特征描述子

    4.2 BRISK算法

    BRISK算法在特征点检测部分没有选用FAST特征点检测,而是选用了稳定性更强的AGAST算法。在特征描述子的构建中,BRISK算法通过利用简单的像素灰度值比较,进而得到一个级联的二进制比特串来描述每个特征点,这一点上原理与BRIEF是一致的。BRISK算法里采用了邻域采样模式,即以特征点为圆心,构建多个不同半径的离散化Bresenham同心圆,然后再每一个同心圆上获得具有相同间距的N个采样点。

    image

    由于这种邻域采样模式在采样时会产生图像灰度混叠的影响,所以BRISK算法首先对图像进行了高斯平滑图像。并且使用的高斯函数标准差与各自同心圆上点间距成正比。

    假设在个采样点中任意选取一对采样点,其平滑后的灰度值分别为和,则两点间的局部梯度为:

     

     

    假设把所有采样点对构成的集合记为,则

     

     

    那么短距离采样点对构成的集合S以及长距离采样点构成的集合L分别为:

     

     

     

     

    其中,通常设置距离阈值为,其中为特征点的尺度。

    由于长距离采样点对含有更多的特征点角度信息,且局部梯度相互抵消,所以可以在集合L中计算出特征点的特征模式方向为:

     

     

    然后将采样模式围绕特征点旋转角度,进而特征描述子具有了旋转不变性。

    最后,在旋转后的短距离采样点集合S内,对所有的特征点对行像素灰度值比较,最终形成512比特的二进制字符串描述子。

    4.3 ORB算法

    ORB算法使用FAST进行特征点检测,然后用BREIF进行特征点的特征描述,但是我们知道BRIEF并没有特征点方向的概念,所以ORB在BRIEF基础上引入了方向的计算方法,并在点对的挑选上使用贪婪搜索算法,挑出了一些区分性强的点对用来描述二进制串。ORB算法的详细描述可以参考:ORB特征点检测

    4.4 FREAK算法

    Fast Retina KeyPoint,即快速视网膜关键点。

    根据视网膜原理进行点对采样,中间密集一些,离中心越远越稀疏。并且由粗到精构建描述子,穷举贪婪搜索找相关性小的。42个感受野,一千对点的组合,找前512个即可。这512个分成4组,前128对相关性更小,可以代表粗的信息,后面越来越精。匹配的时候可以先看前16bytes,即代表精信息的部分,如果距离小于某个阈值,再继续,否则就不用往下看了。

    5. 应用之图像匹配

    图像匹配的研究目标是精确判断两幅图像之间的相似性。图像之间的相似性的定义又随着不同的应用需求而改变。例如,在物体检索系统中(找出含有亚伯拉罕·林肯的脸的图像),我们认为同一物体的不同图像是相近的。而在物体类别检索系统中(找出含有人脸的图像),我们则认为相同类的物体之间是相近的。

    这里局部特征点的应用主要表现在第一种相似性上,也就是说我们需要设计某种图像匹配算法来判断两幅图像是否是对同一物体或场景所成的图像。理想的图像匹配算法应该认为两幅同一物体的图像之间相似度很高,而两幅不同物体的图像之间相似度很低,如下图所示。

    image

    由于成像时光照,环境,角度的不一致,我们获取的同一物体的图像是存在差异的,如同上图中的两辆小车的图像一样,角度不同,成像就不同。我们直接利用图像进行比较是无法进行判断小车是否为同一类的。必须进行特征点的提取,再对特征点进行匹配。

    图像会存在哪些变换呢?一般来说包括了光照变化与几何变化,光照变化表现是图像上是全局或局部颜色的变化,而几何变化种类就比较多了,可以是平移、旋转、尺度、仿射、投影变换等等。所以我们在研究局部特征点时才要求特征点对这些变化具有稳定性,同时要有很强的独特性,可以让图像与其他类的图像区分性强,即类内距离小而类间距离大。

    6. 参考文献

    [1] 基于角点的图像特征提取与匹配算法研究,薛金龙,2014.

    [2] 基于局部特征的图像匹配与识别,宫明明,2014.

    [3] 基于视觉信息的图像特征提取算法研究,戴金波,2014.

    [4] 图像局部不变性特征与描述,王永明,王贵锦编著。

    展开全文
  • 图像算法工程师三重境界

    千次阅读 2020-04-24 08:05:57
    一、传统图像算法工程师;二、现代图像算法工程师;三、人工智能时代图像算法工程师

    一、传统图像算法工程师:
    主要涉及图形处理,包括形态学、图像质量、相机成像之3A算法、去雾处理、颜色空间转换、滤镜等,主要在安防公司或者机器视觉领域,包括缺陷检测;

    二、现代图像算法工程师:
    涉及模式识别,主要表现的经验为AdaboostSVM、聚类分析等研究与应用,特征选取与提取,包括智能驾驶的研究与应用、行人检测、人脸识别、物体检测、工业检测;

    三、人工智能时代图像算法工程师:
    深度学习,主要在大型互联网公司或者研究所机构,具体体现在TensorFlow、Pytorch等开源库的研究与应用,包括机器人的研、基于深度学习的人脸识别;
    移动端图像算法开发,很有挑战和价值,可以研究NCNNNEON优化

    展开全文
  • 图像处理算法其实都很简单

    万次阅读 多人点赞 2018-05-03 16:07:12
     线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像...
    要学习高斯模糊我们首先要知道一些基本概念:
    

    线性滤波与卷积的基本概念

          线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。

          对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关。卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了。

          Correlation 和 Convolution可以说是图像处理最基本的操作,但却非常有用。这两个操作有两个非常关键的特点:它们是线性的,而且具有平移不变性shift-invariant。平移不变性指我们在图像的每个位置都执行相同的操作。线性指这个操作是线性的,也就是我们用每个像素的邻域的线性组合来代替这个像素。这两个属性使得这个操作非常简单,因为线性操作是最简单的,然后在所有地方都做同样的操作就更简单了。

          实际上,在信号处理领域,卷积有广泛的意义,而且有其严格的数学定义,但在这里不关注这个。

          2D卷积需要4个嵌套循环4-double loop,所以它并不快,除非我们使用很小的卷积核。这里一般使用3x3或者5x5。而且,对于滤波器,也有一定的规则要求:

          1)滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。

          2)滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。

          3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

          4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

    神奇的卷积核

          上面说到,对图像的滤波处理就是对图像应用一个小小的卷积核,那这个小小的卷积核到底有哪些魔法。下面我们一起来领略下一些简单但不简单的卷积核的魔法。

     

    1、啥也不做

     

          哈哈,大家可以看到啥了吗?这个滤波器啥也没有做,得到的图像和原图是一样的。因为只有中心点的值是1。邻域点的权值都是0,对滤波后的取值没有任何影响。

     

     

          下面我们动点真格的。

     

    2、图像锐化滤波器Sharpness Filter

     

          图像的锐化和边缘检测很像,首先找到边缘,然后把边缘加到原来的图像上面,这样就强化了图像的边缘,使图像看起来更加锐利了。这两者操作统一起来就是锐化滤波器了,也就是在边缘检测滤波器的基础上,再在中心的位置加1,这样滤波后的图像就会和原始的图像具有同样的亮度了,但是会更加锐利。

     

     

          我们把核加大,就可以得到更加精细的锐化效果

     

     

          另外,下面的滤波器会更强调边缘:

     

     

          主要是强调图像的细节。最简单的3x3的锐化滤波器如下:

     

                                          

     

          大家应该也看出来了,锐化滤波器实际上就是计算当前点和周围点的差别,然后将这个差别加到原来的位置上。

     

    3、边缘检测Edge Detection

     

          我们要找水平的边缘:需要注意的是,这里矩阵的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的。

     

     

          为什么这个滤波器可以寻找到水平边缘呢?因为用这个滤波器卷积相当于求导的离散版本:你将当前的像素值减去前一个像素值,这样你就可以得到这个函数在这两个位置的差别或者斜率。下面的滤波器可以找到垂直方向的边缘,这里像素上和下的像素值都使用:

     

     

          再下面这个滤波器可以找到45度的边缘:取-2不为了什么,只是为了让矩阵的元素和为0而已。

     

     

          那下面这个滤波器就可以检测所有方向的边缘:

     

                                          

     

          为了检测边缘,我们需要在图像对应的方向计算梯度。用下面的卷积核来卷积图像,就可以了。但在实际中,这种简单的方法会把噪声也放大了。另外,需要注意的是,矩阵所有的值加起来要是0.

     

                                           

     

    4、浮雕Embossing Filter

     

          浮雕滤波器可以给图像一种3D阴影的效果。只要将中心一边的像素减去另一边的像素就可以了。这时候,像素值有可能是负数,我们将负数当成阴影,将正数当成光,然后我们对结果图像加上128的偏移。这时候,图像大部分就变成灰色了。

     

          下面是45度的浮雕滤波器

     

     

          我们只要加大滤波器,就可以得到更加夸张的效果了

     

     

          这种效果非常的漂亮,就像是将一副图像雕刻在一块石头上面一样,然后从一个方向照亮它。它和前面的滤波器不同,它是非对称的。另外,它会产生负数值,所以我们需要将结果偏移,以得到图像灰度的范围。

     

     

     

                                                          A:原图像。B:锐化。C:边缘检测。D:浮雕

     

    5、运动模糊Motion Blur

          运动模糊可以通过只在一个方向模糊达到,例如下面9x9的运动模糊滤波器。注意,求和结果要除以9。

     

          这个效果就好像,摄像机是从左上角移动的右下角。

     

      看了一些好玩的滤波器后我们可以进入主题了,首先来看均值模糊:

    均值模糊Box Filter (Averaging)

     

          我们可以将当前像素和它的四邻域的像素一起取平均,然后再除以5,或者直接在滤波器的5个地方取0.2的值即可,如下图:

     

     

          可以看到,这个模糊还是比较温柔的,我们可以把滤波器变大,这样就会变得粗暴了:注意要将和再除以13.

     

     

          所以,如果你想要更模糊的效果,加大滤波器的大小即可。或者对图像应用多次模糊也可以。

     

     

     

     

     

     

     

    高斯模糊

          其实模糊滤波器就是对周围像素进行加权平均处理,均值模糊很简单,周围像素的权值都相同,所以不是很平滑。高斯模糊就有这个优点,所以被广泛用在图像降噪上。特别是在边缘检测之前,都会用来移除细节。那么下面我们就看看高斯模糊的权值是如何分配的。

     

    正态分布的权重
      正态分布显然是一种可取的权重分配模式。在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。
    高斯函数
      上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布
    正态分布的密度函数叫做"高斯函数"(Gaussian function)。它的一维形式是:
    一维形式
      其中,μ是x的均值,σ是x的标准差。因为计算平均值的时候,中心点就是原点,所以μ等于0。即:
    进一步推导
      根据一维高斯函数,可以推导得到二维高斯函数:
    二维高斯函数
      有了这个函数 ,就可以计算每个点的权重了。
      假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
    权重矩阵
      更远的点以此类推。下面就是5*5的高斯滤波器和平滑效果:

     

    展开全文
  • 1. 算法介绍 Graph Cut(图形切割)应用于计算机视觉领域用来有效的解决各种低级计算机视觉问题,例如图像平滑(image smoothing)、立体应对问题(stereo correspondence problem)、图像分割(image segmentation...
  • 图像处理基本算法(汇总)以及实现

    万次阅读 2017-09-21 22:22:23
    1)将256*256分辨率的图像变为128*128分辨率可以将源图像划分成2*2的子图像块,然后将2*2的 子图像块的所有像素颜色均按照F(i,j)的颜色值进行设定,达到降低分辨率的目的。 如: F(i,j) F(i,j+1) F(i,j) F(i,j)...
  • 图像算法简介

    2020-10-23 11:18:11
    图像算法是指对图像进行处理所用的的算法。包括对图像去噪、图像变换、图像分析、图像压缩、图像增强、图像模糊处理等。 图像变换 图像变换包括图像的拉伸、收缩、扭曲、旋转、傅里叶变换等。一般称原始图像为空间...
  • 常用图像处理算法()

    万次阅读 2018-10-04 22:38:10
                      ...&a
  • 神奇图像算法

    千次阅读 2018-10-19 15:24:37
    一、像素图生成向量图的算法 数字时代早期的图片,分辨率很低。尤其是一些电子游戏的图片,放大后就是一个个像素方块。Depixelizing算法可以让低分辨率的像素图转化为高质量的向量图。 二、黑白图片的着色算法 ...
  • 一些基本数字图像处理算法

    千次阅读 2020-05-10 19:45:46
    一些基本数字图像处理算法 所有的图像算法都在DIPAlgorithm类中,并且所有算法都为抽象成员函数。我已经按照java注释规范为所有方法添加使用说明注释,具体实现可见于DIPAlgorithm.java,这里只做算法说明。 1 图像...
  • 图像处理算法工程师面试题

    万次阅读 2017-07-31 09:09:16
    图像基础知识: 1. 常用的图像空间。 2. 简述你熟悉的聚类算法并说明其优缺点。 3. 请描述以下任一概念:SIFT/SURF LDA/PCA 4. 请说出使用过的分类器和实现原理。 5. Random Forest的随机性表现在哪里。 6. Graph-...
  • 通过哈希算法实现图片去重

    千次阅读 2018-05-02 22:27:25
    图像去重:MD5和SHA算法 最近找了几个关于图像去重的博文,整理了一下,和大家分享。 采用感知哈希算法基于python-PIL的图像去重 https://blog.csdn.net/Gentle_Guan/article/details/73384767 用Python实现...
  • 视频观看:基于加密算法图像隐术加密 目录 软件 实现界面 软件 软件下载: 实现界面
  • 浅谈我从非科班转到算法工程师3个月的经历   应@王子瑞/Aliloke邀请,我来谈谈我从非科班转行到算法工程师的经历吧。 首先,我对算法这块的理解是非常的肤浅的,因为我接触这块也就三个多月的时间,说起来为何当...
  • 基于Retinex的图像去雾算法(MATLAB实现)

    万次阅读 多人点赞 2020-04-17 03:22:08
    通常图像增强算法(例如直方图均衡算法以及更加强大的CLAHE)或多或少都有一定的去雾效果,只是这个效果有强有若罢了。本文将讨论另外一类十分重要的图像增强算法——Retinex算法。并在MATLAB中实验一下这类方法的...
  • OpenCV中的图像修复算法

    千次阅读 2018-09-03 11:31:51
    Opencv中有图像修复的函数,其算法参考文献为Alexandru Telea 于2004年发表于Journal of Graphic Tools上的“An Image Inpainting Technique Based On  the Fast Marching Method”。  该算法的...
  • 图像相似性匹配 快速算法

    万次阅读 2018-10-31 15:25:12
    需求是库内存有部分版权图片,现在搜索网上是否有侵权图片。因此从网上跑去大量图片和库内的版权图片比较,由于比较数量大,对效率有一定的要求。 方法1: ...
  • 图像旋转算法原理-- 旋转矩阵

    万次阅读 多人点赞 2011-09-05 19:58:19
    图1     图2     图3      图4      图5      图6     图7     图8
  • 图像特效及滤镜算法汇总

    万次阅读 2020-04-09 21:59:23
    PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡)PS图层混合算法之二(线性加深,线性减淡,变亮,变暗)PS图层混合算法之三(滤色, 叠加, 柔光, 强光)PS图层混合算法之四(亮光, 点光, 线性光...
  • 基于直方图的图像增强算法(HE、CLAHE)之(一)

    万次阅读 多人点赞 2020-04-17 03:20:56
    直方图是图像色彩统计特征的抽象表述。基于直方图可以实现很多有趣的算法。例如,图像增强中利用直方图来调整图像的对比度、有人利用直方图来进行大规模无损数据隐藏、还有人利用梯度直方图HOG来构建图像特征进而...
1 2 3 4 5 ... 20
收藏数 538,613
精华内容 215,445
关键字:

图像算法