精华内容
下载资源
问答
  • 关于用OpenCV提取图像特征点的一点资料,大家共同学习
  • Gabor提取图像特征原理及其matlab实现
  • 快速,准确提取图像特征线即轮廓,并能保存下特征点坐标
  • 深度学习-CNN提取图像特征

    万次阅读 多人点赞 2019-01-30 15:14:37
    一、卷积层 1.卷积操作 2.特征提取—"X" or "O"? 二、池化(Pooling) 三、Relu 层 ...四、全连接层(Fully connected layers) ... 作为机器学习的一个分支...答案当然是图像特征了。将一张图像看做是一个个像素值组成的...

    一、卷积层

    1.卷积操作

    2.特征提取—"X" or "O"?

    二、池化(Pooling)

    三、Relu 层

    四、全连接层(Fully connected layers)

    五、反向传播算法BP

    六、总结


           作为机器学习的一个分支,深度学习同样需要计算机获得强大的学习能力,那么问题来了,我们究竟要计算机学习什么东西?答案当然是图像特征了。将一张图像看做是一个个像素值组成的矩阵,那么对图像的分析就是对矩阵的数字进行分析,而图像的特征,就隐藏在这些数字规律中。

           当你听到说深度学习打破了某项新技术障碍,那么十有八九就会涉及到卷积神经网络。它们也被称作CNNs或着ConvNets,是深层神经网络领域的主力。它们已经学会对图像进行分类,在某些情况下甚至超过了人类。如果有一个方法证明了这种假设,那就是CNN。特别酷的一点就是,当你将它们分解为基本模块时,它们很容易被理解。这里有一个视频,很详细地讨论了关于这些图像问题。

                                                       

                                                                             LeNet-5架构

                                         

                                                                                     图像分类

    如果动画失效,原文链接:https://www.jianshu.com/p/fe428f0b32c1

         图像处理都是小 patchs ,比如28*28或者36*36之类,考虑如下情形,对于一副1000*1000的图像,当隐层也有106节点时,那么W(1)(第一层链接权值)的数量将达到10^12级别,为了减少参数规模,加快训练速度,CNN应运而生。CNN有几个重要的点:局部感知、参数共享、池化。

     局部感知

    (让一个小块对应一个神经元,计算出的一个像素就是一个神经元,一张图片由无数个神经元铺满)
           一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。每个隐含单元仅仅连接输入单元的一部分。例如,每个隐含单元仅仅连接输入图像的一小片相邻区域。对于一个输入与隐层均有  的网络,假设每个隐含单元只与 10*10 的输入区域相连接,这时参数的个数变为 10^6= 10^8,10^4个数量级,这样训练起来就没有那么费力了。这一思想主要受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激),此外图像的像素也是局部时空相关的。

          如下图所示,左边就是全连接网络,每个隐藏神经元与每个像素进行连接。右边就是部分连接网络,每个隐神经元只与一部分区域相连接。右边的图进行的便是卷积操作,该操作会生成一副 feature map 。

                    

    参数共享

          尽管减少了几个数量级,但参数数量依然较多。能不能再进一步减少呢?能!方法就是权值共享。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个 10×10 的局部图像,因此有10×10 个权值参数,将这 10×10 个权值参数共享给剩下的神经元,也就是说隐藏层中所有神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10×10 个权值参数(也就是卷积核(滤波器)的大小),如下图。这样来参数真的是极大的简化了啊!这个思想主要来源于:自然图像有其固有特性,也就是说,图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

        

    单核单通道卷积

         如果隐神经元与其连接的100个输入单元具有相同的100个参数,那么就相当于是一个 10*10 的模板在原始的输入图像上做卷积(当然需要加上一个偏置参数b),这样相当于得到一个新的图像,新图像的大小为(1000-100+1)*(1000-100+1),因此也得名卷积神经网络。这样的10*10的模板,我们也把它称为一个卷积核。以下为单个卷积核示意图:

                                                         

    多核单通道卷积

          CNN中只用一个卷积核提取得到的特征往往是不充分的,只能算作是一种类型的特征(比如某个方向的边缘),如果我们要提取其它方向的边缘,那就多弄几个卷积核,这样就变成了多卷积核了。假设有k个卷积核,那么可训练的参数的个数就变为了k×10×10。注意没有包含偏置参数。每个卷积核得到一副特征图像也被称为一个Feature Map。卷积的过程也被称为特征提取的过程,多核卷积中,隐层的节点数量为: k×(1000-100+1)×(1000-100+1) 。

    多核多通道卷积

         当图像为RGB或ARGB(A代表透明度)时,可以在多通道进行卷积操作,或者对于堆叠卷积层来说, pooling 层之后可以继续接下一个 卷积层,对 pooling 层多个Feature Map 的操作即为多通道卷积,下图为两个卷积核在ARGB四通道上进行卷积操作,在生成对应的 Feature Map 时,这个卷积核对应4个卷积模板(这一个卷积核对应的四个模板都不一样),分别用4种不同的颜色表示,Feature Map 对应的位置的值是由四核卷积模板分别作用在4个通道的对应位置处的卷积结果相加然后取激活函数得到的,所以在四通道得到2通道的过程中,参数数目为 4×2×4个,其中4表示4个通道,第一个2表示生成2个卷积核,最后的4表示卷积核大小。见下图:

                     

    参考:https://blog.csdn.net/kaido0/article/details/53161684


             深度学习对外推荐自己的一个很重要的点——深度学习能够自动提取特征。本文主要介绍卷积层提取特征的原理过程,文章通过几个简单的例子,展示卷积层是如何工作的,以及概述了反向传播的过程,将让你对卷积神经网络CNN提取图像特征有一个透彻的理解。那么我们首先从最基本的数学计算——卷积操作开始。

    一、卷积层

    1.卷积操作

    假设有一个5*5的图像,使用一个3*3的卷积核(filter)进行卷积,得到一个3*3的矩阵(其实是Feature Map,后面会讲),如下所示:

                                              

           为了清楚的描述卷积计算过程,我们首先对图像的每个像素进行编号,用x_{i,j}表示图像的第i行第j列元素;对filter的每个权重进行编号,用w_{m,n}表示第m行第n列权重,用w_{b}表示filter的偏置项;对Feature Map的每个元素进行编号,用a_{i,j}表示Feature Map的第i行第j列元素;用f表示激活函数(这个例子选择relu函数作为激活函数)。然后,使用下列公式计算卷积:

                                              

    例如,对于Feature Map左上角元素a_{0,0}来说,其卷积计算方法为:

     

    计算结果如下图所示:

                                

    接下来,Feature Map的元素a_{0,1}的卷积计算方法为:

     

    计算结果如下图所示:

                              

    因此可以依次计算出Feature Map中所有元素的值。

    下面的动画显示了整个Feature Map的计算过程:(其实就是简单的点乘运算):          

                                    图2 卷积计算

    上面的计算过程中,步幅(stride)为1。步幅可以设为大于1的数。例如,当步幅为2时,Feature Map计算如下:

                               

          我们注意到,当步幅设置为2的时候,Feature Map就变成2*2了。这说明图像大小、步幅和卷积后的Feature Map大小是有关系的。事实上,它们满足下面的关系:

                                               

             在上面两个公式中,W2是卷积后Feature Map的宽度;W1是卷积前图像的宽度;F是filter的宽度;P是Zero Padding数量,Zero Padding是指在原始图像周围补几圈0,如果P的值是1,那么就补1圈0;S是步幅;H2是卷积后Feature Map的高度;H1是卷积前图像的宽度。式2式3本质上是一样的。

                       

          说明Feature Map宽度是2。同样,我们也可以计算出Feature Map高度也是2。前面我们已经讲了深度为1的卷积层的计算方法,如果深度大于1怎么计算呢?其实也是类似的。如果卷积前的图像深度为D,那么相应的filter的深度也必须为D。我们扩展一下式1,得到了深度大于1的卷积计算公式:

                        

           在式4中,D是深度;F是filter的大小(宽度或高度,两者相同);w_{d,m,n}表示filter的第d层第m行第n列权重;a_{d,i,j}表示图像的第d层第i行第j列像素;其它的符号含义和式1是相同的,不再赘述。

           每个卷积层可以有多个filter。每个filter和原始图像进行卷积后,都可以得到一个Feature Map。因此,卷积后Feature Map的深度(个数)和卷积层的filter个数是相同的。

           下面的动画显示了包含两个filter的卷积层的计算。我们可以看到7*7*3输入,经过两个3*3*3filter的卷积(步幅为2),得到了3*3*2的输出。另外我们也会看到下图中 ,在输入元素的周围补了一圈0。Zero padding对于图像边缘部分的特征提取是很有帮助的。

                         

           以上就是卷积层的计算方法。这里面体现了局部连接权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且filter的权值对于上一层所有神经元都是一样的。对于包含两个3*3*3的fitler的卷积层来说,其参数数量仅有(3*3*3+1)*2=56个,且参数数量与上一层神经元个数无关。与全连接神经网络相比,其参数数量大大减少了。

    用卷积公式来表达卷积层计算,想了解太多数学细节的读者可以参考博文:  https://www.zybuluo.com/hanbingtao/note/485480。 


    2.特征提取—"X" or "O"?

            一个图像矩阵经过一个卷积核的卷积操作后,得到了另一个矩阵,这个矩阵叫做特征映射(feature map)。每一个卷积核都可以提取特定的特征,不同的卷积核提取不同的特征,举个例子,现在我们输入一张人脸的图像,使用某一卷积核提取到眼睛的特征,用另一个卷积核提取嘴巴的特征等等。而特征映射就是某张图像经过卷积运算得到的特征值矩阵
           讲到这里,可能大家还不清楚卷积核和特征映射到底是个什么东西,有什么用?没关系,毕竟理解了CNN 的卷积层如何运算,并不能自动给我们关于 CNN 卷积层原理的洞见。为了帮助指导你理解卷积神经网络的特征提取,我们将采用一个非常简化的例子。    

    为了帮助你理解卷积神经网络,我们讲采用一个非常简化的例子:确定一幅图像是包含有"X"还是"O"?

                 

    这个例子足够说明CNN背后的原理,同时它足够简单,能够避免陷入不必要的细节。

          在CNN中有这样一个问题,就是每次给你一张图,你需要判断它是否含有"X"或者"O"。并且假设必须两者选其一,不是"X"就是"O"。理想的情况就像下面这个样子:

                    

       标准的"X"和"O",字母位于图像的正中央,并且比例合适,无变形

       对于计算机来说,只要图像稍稍有一点变化,不是标准的,那么要解决这个问题还是不是那么容易的:

                                                

             计算机要解决上面这个问题,一个比较天真的做法就是先保存一张"X"和"O"的标准图像(就像前面给出的例子),然后将其他的新给出的图像来和这两张标准图像进行对比,看看到底和哪一张图更匹配,就判断为哪个字母。但是这么做的话,其实是非常不可靠的,因为计算机还是比较死板的。在计算机的“视觉”中,一幅图看起来就像是一个二维的像素数组(可以想象成一个棋盘),每一个位置对应一个数字。在我们这个例子当中,像素值"1"代表白色,像素值"-1"代表黑色。

                                               

           当比较两幅图的时候,如果有任何一个像素值不匹配,那么这两幅图就不匹配,至少对于计算机来说是这样的。
           对于这个例子,计算机认为上述两幅图中的白色像素除了中间的3*3的小方格里面是相同的,其他四个角上都不同,因此,从表面上看,计算机判别右边那幅图不是"X",两幅图不同,得出结论:

                           

           但是这么做,显得太不合理了。理想的情况下,我们希望,对于那些仅仅只是做了一些像平移,缩放,旋转,微变形等简单变换的图像,计算机仍然能够识别出图中的"X"和"O"。就像下面这些情况,我们希望计算机依然能够很快并且很准的识别出来:

                             

    这也就是CNN出现所要解决的问题。

    feature:

            如下图所示,像素值"1"代表白色,像素值"-1"代表黑色。对于CNN来说,它是一块一块地来进行比对。它拿来比对的这个“小块”我们称之为Features(特征)。在两幅图中大致相同的位置找到一些粗糙的特征进行匹配,CNN能够更好的看到两幅图的相似性,相比起传统的整幅图逐一比对的方法。每一个feature就像是一个小图(就是一个比较小的有值的二维数组)。不同的Feature匹配图像中不同的特征。在字母"X"的例子中,那些由对角线和交叉线组成的features基本上能够识别出大多数"X"所具有的重要特征。

                                    

          这些features很有可能就是匹配任何含有字母"X"的图中字母X的四个角和它的中心。那么具体到底是怎么匹配的呢?如下三个特征矩阵a,b,c:

                             

           这些features很有可能就是匹配任何含有字母"X"的图中字母X的四个角和它的中心。那么具体到底是怎么匹配的呢?观察下面几张图,a可以匹配到“X”的左上角和右下角,b可以匹配到中间交叉部位,而c可以匹配到“X”的右上角和左上角。

            

     

            把上面三个小矩阵作为卷积核,就如第一部分结尾介绍的,每一个卷积核可以提取特定的特征,现在给一张新的包含“X”的图像,CNN并不能准确地知道这些features到底要匹配原图的哪些部分,所以它会在原图中每一个可能的位置进行尝试,即使用该卷积核在图像上进行滑动,每滑动一次就进行一次卷积操作,得到一个特征值。仔细想想,是否有一点头目呢?
    (下图中求平均是为了让所有特征值回归到-1到1之间)

    则:

                                              

    对于中间部分,也是一样的操作:

                                     

    最后将整张图卷积过后,得到这样的特征矩阵:

                                    

    然后换用其他feature进行同样的操作,最后得到的结果就是这样了:

                             

           仔细观察,可以发现,其中的值,越接近为1表示对应位置和卷积核代表的特征越接近,越是接近-1,表示对应位置和卷积核代表的反向特征越匹配,而值接近0的表示对应位置没有任何匹配或者说没有什么关联。

    我们的原始图,经过不同feature的卷积操作就变成了一系列的feature map。我们可以很方便,直观地将这整个操作视为一个单独的处理过程。在CNN中,我们称之为卷积层(convolution layer),卷积核在图像上不断滑动运算,就是卷积层所要做的事情。同时,在内积结果上取每一局部块的最大值就是最大池化层的操作。CNN 用卷积层和池化层实现了图片特征提取方法。

    二、池化(Pooling)

     

                                                                        

           CNN中使用的另一个有效的工具被称为“池化(Pooling)”。池化可以将一幅大的图像缩小,同时又保留其中的重要信息。池化背后的数学顶多也就是小学二年级水平。它就是将输入图像进行缩小,减少像素信息,只保留重要信息。通常情况下,池化都是2*2大小,比如对于max-pooling来说,就是取输入图像中2*2大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。(注:同理,对于average-pooling来说,就是取2*2大小块的平均值作为结果的像素值。)

     对于本文的这个例子,池化操作具体如下:

                     

    经过最大池化操作(比如2*2大小)之后,一幅图就缩小为原来的四分之一了:

                            

    然后对所有的feature map执行同样的操作,得到如下结果:

                                    

            因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。

          当对所有的feature map执行池化操作之后,相当于一系列输入的大图变成了一系列小图。同样地,我们可以将这整个操作看作是一个操作,这也就是CNN中的池化层(pooling layer),通过加入池化层,可以很大程度上减少计算量,降低机器负载。

    三、Relu 层

          这是一个很小但是很重要的操作,叫做Relu(Rectified Linear Units),或者修正线性单元。对于输入的负值,输出全为0,对于正值,原样输出。下面我们看一下本文的例子中relu激活函数具体操作:

       最后,对整幅图操作之后,结果如下:

                              

    同样地,在CNN中,我们这一系列操作视为一个操作,那么就得到Relu Layer,如下:

                               

    四、全连接层(Fully connected layers)

    最后,我们将上面所提到的卷积,池化,激活放在一起,就是下面这个样子:

                            

    然后,我们加大网络的深度,增加更多的层,就得到深度神经网络了:

                          

    全连接层(Fully connected layers)

         将卷积结果排成一列向量x_{i},与输出两个神经元(“X”、“O”)全连接,这样一来就有12*2=24个连接,每个连接都有一个权重w_{i},根据y=\sum w_{i}*x_{i}分别求出两个两个神经元的输出,一般讲输出结果通过一个逻辑函数,将结果缩放到0——1之间。得到下图的结果0.92,0.51.根据结果判定为"X":

                   

    在这个过程中,我们定义这一系列操作为”全连接层“(Fully connected layers):

                                       

    综上所述:

                              

    这一整个过程,从前到后,被称作”前向传播“,得到一组输出,然后通过反向传播来不断纠正错误,进行学习。

    五、反向传播算法BP

          通过上面的学习,我们知道CNN是如何利用卷积层和池化层提取图片的特征,其中的关键是卷积核表示图片中的局部特征
    而在现实中,使用卷积神经网络进行多分类获目标检测的时候,图像构成要比上面的X和O要复杂得多,我们并不知道哪个局部特征是有效的,即使我们选定局部特征,也会因为太过具体而失去反泛化性。还以人脸为例,我们使用一个卷积核检测眼睛位置,但是不同的人,眼睛大小、状态是不同的,如果卷积核太过具体化,卷积核代表一个睁开的眼睛特征,那如果一个图像中的眼睛是闭合的,就很大可能检测不出来,那么我们怎么应对这中问题呢,即如何确定卷积核的值呢?
    这就引出了反向传播算法

            什么是反向传播,以猜数字为例,B手中有一张数字牌让A猜,首先A将随意给出一个数字,B反馈给A是大了还是小了,然后A经过修改,再次给出一个数字,B再反馈给A是否正确以及大小关系,经过数次猜测和反馈,最后得到正确答案(当然,在实际的CNN中不可能存在百分之百的正确,只能是最大可能正确)。
            所以反向传播,就是对比预测值和真实值,继而返回去修改网络参数的过程,一开始我们随机初始化卷积核的参数,然后以误差为指导通过反向传播算法,自适应地调整卷积核的值,从而最小化模型预测值和真实值之间的误差。

    以上述例子为例:

                                

    梯度下降优化器:

                                
    举一个简单例子。绿色箭头代表前向传播,红色代表为反向传播过程,x、y是权重参数,L为误差,L对x、y的导数表示误差L的变化对x、y的影响程度,得到偏导数delta(x)后,x* = x-η*delta(x),其中η为学习率,从而实现权重的更新。

                                                     

    六、总结

          本文主要讲解基本CNN的原理过程,卷积层和池化层可以提取图像特征,经过反向传播最终确定卷积核参数,得到最终的特征,这就是一个大致的CNN提取特征的过程。考虑到反向传播计算的复杂性,在本文中不做重点讲解,先作为了解思路,日后专门再讲解反向传播的方法原理。

    如何训练卷积神经网络:机器学习实战13-卷积神经网络

    from:原来CNN是这样提取图像特征的。。

    from:https://mp.weixin.qq.com/s/G5hNwX7mnJK11Cyr7E5b_Q

    from:http://www.algorithmdog.com/cnn-extracts-feat?open_source=weibo_search&from=timeline

     

    展开全文
  • CNN(卷积神经网络)提取图像特征

    千次阅读 2021-02-28 14:58:52
    CNN提取图像特征原文链接

    CNN提取图像特征原文链接

    # 文中简单的 反向传播代码 python版本
    import numpy as np
    def sigmoid(x): #激活函数,将得到的值归一化在某一范围内
        return 1/(1+np.exp(-x)) #sigmoid函数: 把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。
    input1 = np.array([[0.35],[0.9],[0.58],[0.78]])
    w1 = np.random.rand(3,4)  # w1 随机初始权重 y=wx+b 利用梯度下降法优化权重
    print('w1:',w1)           # 通过调整 w使得一类x运算完之后都是0,另外一类x运算完都是1
    w2 = np.random.rand(2,3)
    print('w2:',w2)
    real = np.array([[0.5],[0.7]])
    for i in range(100):
        output1 = sigmoid(np.dot(w1,input1)) #中间层
        output2 = sigmoid(np.dot(w2,output1)) #输出层
        cost = np.square(real-output2)/2 #计算误差
        dalta2 = output2*(1-output2)*(real-output2) #梯度
        dalta1 = output1*(1-output1)*w2.T.dot(dalta2) #梯度
        w2 = w2+dalta2.dot(output1.T) #更新w2
        w1 = w1+dalta1.dot(input1.T) #更新w1
        print(output1)
        print(output2)
        print(cost)
    

    在这里插入图片描述

    展开全文
  • Mask R-CNN --CNN提取图像特征

    千次阅读 2018-12-20 15:21:22
    卷积神经网络(CNN)提取图像特征 卷积神经网络(CNN)是局部连接网络。相对于全连接网络其最大的特点就是:局部连接性和权值共享性。因为对一副图像中的某个像素p来说,一般离像素p越近的像素对其影响也就越大(局部...

    这是根据多篇文章整理的文件,仅供参考!

    卷积神经网络(CNN)提取图像特征

    卷积神经网络(CNN)是局部连接网络。相对于全连接网络其最大的特点就是:局部连接性和权值共享性。因为对一副图像中的某个像素p来说,一般离像素p越近的像素对其影响也就越大(局部连接性);另外,根据自然图像的统计特性,某个区域的权值也可以用于另一个区域(权值共享性)。这里的权值共享说白了就是卷积核共享,对于一个卷积核将其与给定的图像做卷积就可以提取一种图像的特征,不同的卷积核可以提取不同的图像特征。概况的讲,卷积层的计算方法就是根据公式

    其中”σ”表示激活函数;”imgMat”表示灰度图像矩阵; ”W”表示卷积核;”∘ ”表示卷积操作;”b”表示偏置值。

    使用一个含有3个hidden layer的的网络结构

    以此类推可以形成第一个隐藏层,注意我们的图片是28*28的,窗口是5*5的,可以得到一个24*24(24=28-5+1)个神经元的隐藏层。

    池化(Pooling)

    池化层通常接在卷积层后面目的就是为了简化卷积层的输出。不需要w,b这些参数,它只是对窗口范围内的神经元做简单的操作,如求和,求最大值,把求得的值作为池化层神经元的输入值,如下图,这是一个2*2的窗口 

    值得注意的是,我们此时的窗口每次移动两步,采用的是求最大值的方法,所有称之为max-pooling,刚刚卷积层含有24*24个神经元,经过池化后到池化层就是12*12个神经元。通常卷积层的窗口是多个的,池化层的窗口也是多个的。简单来说,卷积层用一个窗口去对输入层做卷积操作,池化层也用一个窗口去对卷积层做池化操作。但是注意这两个操作的本质区别。下面来看一个用三个卷积窗口和跟随其后的池化窗口长啥样。

     

    总的来看

    介绍完CNN的三个几本思想概念后我们把它串起来看下。

    从左往右依次是输入层,卷积层,池化层,输出层。输入层到卷积层,卷积层到池化层已经详细介绍过了。池化层到输出层是全连接,这和DNN是一样的。

    整体上把我CNN的网络架构,其实和DNN很相似,都是一层一层组合起来的,层与层之间的行为也是有对应的权值w和偏移值b决定的,并且它们的目的也是一致的:通过training data来学习网络结构中的w和b,从而能把输入的图片正确分类。

     

    展开全文
  • 采用matlab分别编写的Moravec和Forstner算子提取图像中的特征点,效果不错。
  • (5)——使用高斯滤波器提取图像特征(一)前 言(二)高斯滤波器的python实现(三)总 结 (一)前 言 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对...

    Python先生,你好!(5)——使用高斯滤波器提取图像特征

    (一)前 言

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

    (二)高斯滤波器的python实现

    这里我们要用到图像处理库OpenCV

    import cv2
    
    img = cv2.imread("输入要处理的图像",0)
    blurred = cv2.GaussianBlur(img,(11,11),0)
    gaussImg = img - blurred
    cv2.imshow("Img",gaussImg)
    cv2.waitKey()
    
    • 处理前:
      在这里插入图片描述
    • 处理后:
      在这里插入图片描述

    (三)总 结

    通过高斯滤波器,我们能很快地提取图像的特征,便于我们建立更好的图像数据集,有任何的疑问请在评论区留言,我会尽快回复,谢谢支持!

    展开全文
  • 利用vgg预训练模型提取图像特征

    万次阅读 多人点赞 2018-10-28 14:30:02
    它在图像分类和目标检测任务中都表现出非常好的结果。在2014年的ILSVRC比赛中,VGG 在Top-5中取得了92.3%的正确率。有VGG16和VGG19,模型的权重由ImageNet训练而来 1、VGG结构 下面以VGG16为例来说明: 看出VGG16...
  • 这两天在听吴恩达讲解卷积神经网络的视频,对利用卷积层检测边缘特征也就是提取图像的特征有了一定的理解,并且通过查阅资料,用python实现了提取图像特征的过程,然后趁热打铁总结一下,话不多说,直接步入正题。...
  • 原来CNN是这样提取图像特征的。。。

    万次阅读 多人点赞 2018-11-28 15:17:10
    对于即将到来的人工智能时代,作为一个有理想有追求的...答案当然是图像特征了。将一张图像看做是一个个像素值组成的矩阵,那么对图像的分析就是对矩阵的数字进行分析,而图像的特征,就隐藏在这些数字规律中。 深度...
  • caffe 提取图像特征

    千次阅读 2016-11-15 14:33:20
    建立一个目录存放特征以及一些必要的信息mkdir examples/temp1.2.生成需要提取图片的位置集合的文件find `pwd`/examples/images -type f -exec echo {} \; > examples/temp/temp.txt这里第一个路径就是你的图片所在...
  • 说白了,CNN主要作用在于提取图像的各种特征图(feature maps). CNN主要是通过卷积运算来完成特征提取的。图像卷积运算,主要是通过设定各种特征提取滤波器矩阵(卷积核,通常设定大小为3x3,或者5x5的矩阵),然后...
  • Python Opencv 提取图像特征

    千次阅读 2018-05-05 16:37:15
    灰度特征 代码如下: def img2cols(self, img): img = img.reshape(img.size, order="C") # convert the data type as np.float64 img = img.astype(np.float64) return img HOG特征 代码如下: ...
  • gabor提取图像特征原理及其matlab实现

    热门讨论 2012-11-19 18:04:06
    包括gabor滤波器及其原理,并通过matlab实现gabor算法,可供学习和参考
  • pytorch利用resnet50提取图像特征

    千次阅读 2021-02-05 09:32:43
    import os import torch import torch.nn as nn from torchvision import models,transforms from torch.autograd import Variable import numpy as np from PIL import Image import time device=torch.device(...
  • tensorflow搭建vgg16提取图像特征

    千次阅读 热门讨论 2019-01-19 19:33:26
    feature=sess.run提取的是fc8的特征,是一个tensor,如果要在会话之外调用,要设置一个会话之外的变量,将feature赋值出来,从tensor变为一个maxtrix。 fc8_feature = feature 如果要用于分类,就把fc改为...
  • 使用vl_sift提取图像特征

    千次阅读 2017-04-17 15:45:50
    1. 载入图像>> I=imread('28.jpg'); >> image(I);2. vl_sift函数的输入是一个单精度的灰度图像,灰度值区间归一化到[0, 255]。... 使用vl_sift提取特征点区域和描述子>> [f,d] = vl_sift(I);【注】 vl_si

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 141,895
精华内容 56,758
关键字:

如何提取图像特征