图像处理与模式识别_模式识别与图像处理 - CSDN
  • 图像处理(Image Processing) 对已有的图像进行变换、分析、重构,得到的仍是图像。 模糊、灰度化、增强对比度; 加滤镜; 腐蚀,膨胀。 增强现实(AR)——它既需要 CG...

     

    主要内容

    例子

    联系(例子)

    图像处理(Image Processing)

    对已有的图像进行变换、分析、重构,得到的仍是图像。

    模糊、灰度化、增强对比度

    加滤镜;

    腐蚀,膨胀。

    增强现实(AR)——它既需要 CG(computer Graphics),又需要 CV,当然也不会漏掉 DIP。

     

    它用 DIP 进行预处理,用 CV 进行跟踪物体的识别与姿态获取,用 CG 进行虚拟三维物体的叠加。

     

     

     

     

    计算机视觉(Computer Vision)

    给定图像,推断景象特性实现的是从模型到图像的变换,也就是说从图像数据提取信息

    景象的三维结构,运动检测,识别物体

     

    模式识别(Pattern Recognition)

    从特征空间到类别空间的变换。研究内容包括特征提取;特征选择;分类器设计等

    特征提取(PCA,LDA,LFA,Kernel,Mean Shift,SIFT,ISOMAP,LLE);特征选择;分类器设计(SVM,AdaBoost)等

    机器视觉

    就是工业数字图像处理

     

    展开全文
  • 图像识别技术原理和神经网络的图像识别技术

    千次阅读 多人点赞 2019-03-08 08:56:21
    图像识别技术是信息时代的一门...简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性降维的图像识别技术及图像识别技术的应用。从中可以总结出图像处理技术的应用...

    图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展,人类对图像识别技术的认识越来越深刻。图像识别技术的过程分为信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性降维的图像识别技术及图像识别技术的应用。从中可以总结出图像处理技术的应用广泛,人类的生活将无法离开图像识别技术,研究图像识别技术具有重大意义。

    1图像识别技术的引入

    图像识别是人工智能的一个重要领域。图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。图像识别,顾名思义,就是对图像做出各种处理、分析,最终识别我们所要研究的目标。今天所指的图像识别并不仅仅是用人类的肉眼,而是借助计算机技术进行识别。虽然人类的识别能力很强大,但是对于高速发展的社会,人类自身识别能力已经满足不了我们的需求,于是就产生了基于计算机的图像识别技术。这就像人类研究生物细胞,完全靠肉眼观察细胞是不现实的,这样自然就产生了显微镜等用于精确观测的仪器。通常一个领域有固有技术无法解决的需求时,就会产生相应的新技术。图像识别技术也是如此,此技术的产生就是为了让计算机代替人类去处理大量的物理信息,解决人类无法识别或者识别率特别低的信息。

    1.1图像识别技术原理

    其实,图像识别技术背后的原理并不是很难,只是其要处理的信息比较繁琐。计算机的任何处理技术都不是凭空产生的,它都是学者们从生活实践中得到启发而利用程序将其模拟实现的。计算机的图像识别技术和人类的图像识别在原理上并没有本质的区别,只是机器缺少人类在感觉与视觉差上的影响罢了。人类的图像识别也不单单是凭借整个图像存储在脑海中的记忆来识别的,我们识别图像都是依靠图像所具有的本身特征而先将这些图像分了类,然后通过各个类别所具有的特征将图像识别出来的,只是很多时候我们没有意识到这一点。当看到一张图片时,我们的大脑会迅速感应到是否见过此图片或与其相似的图片。其实在“看到”与“感应到”的中间经历了一个迅速识别过程,这个识别的过程和搜索有些类似。在这个过程中,我们的大脑会根据存储记忆中已经分好的类别进行识别,查看是否有与该图像具有相同或类似特征的存储记忆,从而识别出是否见过该图像。机器的图像识别技术也是如此,通过分类并提取重要特征而排除多余的信息来识别图像。机器所提取出的这些特征有时会非常明显,有时又是很普通,这在很大的程度上影响了机器识别的速率。总之,在计算机的视觉识别中,图像的内容通常是用图像特征进行描述。

    1.2模式识别

    模式识别是人工智能和信息科学的重要组成部分。模式识别是指对表示事物或现象的不同形式的信息做分析和处理从而得到一个对事物或现象做出描述、辨认和分类等的过程。

    计算机的图像识别技术就是模拟人类的图像识别过程。在图像识别的过程中进行模式识别是必不可少的。模式识别原本是人类的一项基本智能。但随着计算机的发展和人工智能的兴起,人类本身的模式识别已经满足不了生活的需要,于是人类就希望用计算机来代替或扩展人类的部分脑力劳动。这样计算机的模式识别就产生了。简单地说,模式识别就是对数据进行分类,它是一门与数学紧密结合的科学,其中所用的思想大部分是概率与统计。模式识别主要分为三种:统计模式识别、句法模式识别、模糊模式识别。

    2图像识别技术的过程

    既然计算机的图像识别技术与人类的图像识别原理相同,那它们的过程也是大同小异的。图像识别技术的过程分以下几步:信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。

    信息的获取是指通过传感器,将光或声音等信息转化为电信息。也就是获取研究对象的基本信息并通过某种方法将其转变为机器能够认识的信息。

    预处理主要是指图像处理中的去噪、平滑、变换等的操作,从而加强图像的重要特征。

    特征抽取和选择是指在模式识别中,需要进行特征的抽取和选择。简单的理解就是我们所研究的图像是各式各样的,如果要利用某种方法将它们区分开,就要通过这些图像所具有的本身特征来识别,而获取这些特征的过程就是特征抽取。在特征抽取中所得到的特征也许对此次识别并不都是有用的,这个时候就要提取有用的特征,这就是特征的选择。特征抽取和选择在图像识别过程中是非常关键的技术之一,所以对这一步的理解是图像识别的重点。

    分类器设计是指通过训练而得到一种识别规则,通过此识别规则可以得到一种特征分类,使图像识别技术能够得到高识别率。分类决策是指在特征空间中对被识别对象进行分类,从而更好地识别所研究的对象具体属于哪一类。

    3图像识别技术的分析

    随着计算机技术的迅速发展和科技的不断进步,图像识别技术已经在众多领域中得到了应用。2015年2月15日新浪科技发布一条新闻:“微软最近公布了一篇关于图像识别的研究论文,在一项图像识别的基准测试中,电脑系统识别能力已经超越了人类。人类在归类数据库Image Net中的图像识别错误率为5.1%,而微软研究小组的这个深度学习系统可以达到4.94%的错误率。”从这则新闻中我们可以看出图像识别技术在图像识别方面已经有要超越人类的图像识别能力的趋势。这也说明未来图像识别技术有更大的研究意义与潜力。而且,计算机在很多方面确实具有人类所无法超越的优势,也正是因为这样,图像识别技术才能为人类社会带来更多的应用。

    3.1神经网络的图像识别技术

    神经网络图像识别技术是一种比较新型的图像识别技术,是在传统的图像识别方法和基础上融合神经网络算法的一种图像识别方法。这里的神经网络是指人工神经网络,也就是说这种神经网络并不是动物本身所具有的真正的神经网络,而是人类模仿动物神经网络后人工生成的。在神经网络图像识别技术中,遗传算法与BP网络相融合的神经网络图像识别模型是非常经典的,在很多领域都有它的应用。在图像识别系统中利用神经网络系统,一般会先提取图像的特征,再利用图像所具有的特征映射到神经网络进行图像识别分类。以汽车拍照自动识别技术为例,当汽车通过的时候,汽车自身具有的检测设备会有所感应。此时检测设备就会启用图像采集装置来获取汽车正反面的图像。获取了图像后必须将图像上传到计算机进行保存以便识别。最后车牌定位模块就会提取车牌信息,对车牌上的字符进行识别并显示最终的结果。在对车牌上的字符进行识别的过程中就用到了基于模板匹配算法和基于人工神经网络算法。
      3.2非线性降维的图像识别技术

    计算机的图像识别技术是一个异常高维的识别技术。不管图像本身的分辨率如何,其产生的数据经常是多维性的,这给计算机的识别带来了非常大的困难。想让计算机具有高效地识别能力,最直接有效的方法就是降维。降维分为线性降维和非线性降维。例如主成分分析(PCA)和线性奇异分析(LDA)等就是常见的线性降维方法,它们的特点是简单、易于理解。但是通过线性降维处理的是整体的数据集合,所求的是整个数据集合的最优低维投影。经过验证,这种线性的降维策略计算复杂度高而且占用相对较多的时间和空间,因此就产生了基于非线性降维的图像识别技术,它是一种极其有效的非线性特征提取方法。此技术可以发现图像的非线性结构而且可以在不破坏其本征结构的基础上对其进行降维,使计算机的图像识别在尽量低的维度上进行,这样就提高了识别速率。例如人脸图像识别系统所需的维数通常很高,其复杂度之高对计算机来说无疑是巨大的“灾难”。由于在高维度空间中人脸图像的不均匀分布,使得人类可以通过非线性降维技术来得到分布紧凑的人脸图像,从而提高人脸识别技术的高效性。

    3.3图像识别技术的应用及前景

    计算机的图像识别技术在公共安全、生物、工业、农业、交通、医疗等很多领域都有应用。例如交通方面的车牌识别系统;公共安全方面的人脸识别技术、指纹识别技术;农业方面的种子识别技术、食品品质检测技术;医学方面的心电图识别技术等。随着计算机技术的不断发展,图像识别技术也在不断地优化,其算法也在不断地改进。图像是人类获取和交换信息的主要来源,因此与图像相关的图像识别技术必定也是未来的研究重点。以后计算机的图像识别技术很有可能在更多的领域崭露头角,它的应用前景也是不可限量的,人类的生活也将更加离不开图像识别技术。

    图像识别技术虽然是刚兴起的技术,但其应用已是相当广泛。并且,图像识别技术也在不断地成长,随着科技的不断进步,人类对图像识别技术的认识也会更加深刻。未来图像识别技术将会更加强大,更加智能地出现在我们的生活中,为人类社会的更多领域带来重大的应用。在21世纪这个信息化的时代,我们无法想象离开了图像识别技术以后我们的生活会变成什么样。图像识别技术是人类现在以及未来生活必不可少的一项技术。
      人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
      AI可以识别图像,但它能理解标题吗?
    http://www.duozhishidai.com/article-10635-1.html
      图像识别经历了哪几个阶段,主要应用在哪些领域?
    http://www.duozhishidai.com/article-6461-1.html
      图像识别技术是什么,应用于智能家居哪些领域
    http://www.duozhishidai.com/article-133-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • 图像处理模式识别

    2020-07-17 17:52:41
    图像处理模式识别
  • 在谈R-CNN之前,应该要先总结一下模式识别模式识别主要是对已知数据样本的特征发现和提取,比如人脸识别、...模式识别处理问题的性质和解决问题的方法角度,可以分为有监督(分类)无监督(聚类)两种。二...

    在谈R-CNN之前,应该要先总结一下模式识别。
    模式识别主要是对已知数据样本的特征发现和提取,比如人脸识别、雷达信号识别等,强调从原始信息中提取有价值的特征,在机器学习里面,好的特征所带来的贡献有时候远远大于算法本身的贡献。在番外篇中,我们使用过opencv中已经训练好的分类器,这也是模式识别的一种。
    模式识别从处理问题的性质和解决问题的方法角度,可以分为有监督(分类)与无监督(聚类)两种。二者的主要差别在于,样本是否有labels。一般说来,有监督的分类往往需要提供大量带有labels的样本,但在实际问题中,这是比较困难的,因此研究无监督的分类十分重要。(当然,模式识别已经是比较老的技术,当有监督的分类有用武之地时,更有效的神经网络已经出现了,生不逢时呀)

    1.1 分类

    1.1.1 K-Nearest Neighbour

    首先就是K最近邻(K-NN),是一种比较简单,直观的分类算法,也是计算量很大的一种算法。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。特别的,当k = 1时,该对象被分到离它最近的邻居所在的类中。不过这种算法有个缺点是,它对数据的局部结构敏感,容易过度拟合数据。作为简单的防止过拟合的方法一般都是赋给更近的邻居更大的权重,比如距离的倒数。
    参数k的选择很依赖数据,k越大,越容易忽视噪声,但边界也会更模糊。一般可以用不同的k值来训练k-NN分类器,然后验证哪个效果最好。
    如果是分两类,k最好选择一个奇数,这样不容易产生某一个点模棱两可的情况。
    还有,这个分类器对输入特征值域敏感,如果引入无关的特征会降低分类的准确性。可以将数据归一化到[0, 1]或[-1, 1]的区间内来防止。

    1.1.2 决策树算法

    决策树算法的核心,是根据先验条件构造一颗最好的决策树,来预测类别。
    举一个例子,一个公司评判员工有两个标准,一个是听话程度,一个是聪明程度;
    我们靠这两个参数来区分是否是好员工;

    聪明 听话 好员工
    8 2 no
    4 8 yes
    8 5 yes
    2 6 no

    我们有几种方法来做区分。以一种为例:用听话程度来区分:
    听话>=5 是树的左子树,听话<4是树的右叶子节点,右叶子节点均为坏员工;
    再对左子树进行区分,聪明>3为左子树,聪明<=为右子树,左子树均为好员工,右子树均为坏员工;这样就完成了一种决策树。那如何判断决策树的好坏呢?
    这种判断好坏的参数就是,信息熵增益。如果经过某个属性,划分后的数据信息熵下降最多,那么这种划分为最优。
    如我现在用的方法,第一次划分前熵为:
    -(2/4*log2(2/4)+2/4*log2(2/4)) = 1;
    划分后右子节点熵为0,左子节点熵:
    -(2/3*log2(2/3)+1/3*log2(1/3))= 0.39+0.526 = 0.916;这个熵下降就是0.084。
    第二次划分后,区分完毕,熵为0。(举的例子太弟弟了,不太明显,不过还算容易懂啦)
    经过决策属性的划分后,数据的无序度越来越低,也就是信息熵越来越小。
    具体就不细说啦 我们这可以说图像处理的,有点跑偏了。。顺便说一下,基于规则的分类器和这个大致相同,有兴趣的可以自己搜,就不在这里占用版面了。

    1.1.3 贝叶斯分类

    说贝叶斯,首先要说朴素贝叶斯。朴素贝叶斯如其名,非常朴素。核心思想就是对于待分类项,求解各个类别出现的概率,然后哪个概率最大,这个分类项就是那个类别。
    当然,这个概率获得才是NB的核心。一般我们需要一个训练样本集,统计一下条件概率估计,然后如果每个条件对概率的影响互相不相关,我们就可以算出测试集中某一个样本的各类别概率,从而顺利分类了。朴素贝叶斯一个很重要的点就是每个条件对概率的影响互相不相关。然而这个在现实中几乎不可能,所以贝叶斯分类又有了新的成员:贝叶斯网络。类似决策树(不过这个树是事先确定而不是训练),贝叶斯在每个子叶片上(全部特征区分后的)计算概率,然后用这个概率作为测试集中某一个样本按照条件走下来之后的概率。 贝叶斯网络比朴素贝叶斯更复杂,而想构造和训练出一个好的贝叶斯网络更是异常艰难。但是贝叶斯网络是模拟人的认知思维推理模式,用一组条件概率函数以及有向无环图对不确定性的因果推理关系建模,因此其具有更高的实用价值。
    贝叶斯网络要首先确定随机变量之间的拓扑结构。这也是一个容易出问题的环节。

    1.1.4 支持向量机(SVM)

    这才是重头戏嘛!偷别人一张图说明下:
    这里写图片描述
    c1,c2分别是两个类,如何把这两个类区分开呢?就是在中间画条线(废话)
    不过这个线其实很有讲究,画在哪里,角度如何呢?
    这就是svm算法所研究的核心,核心思想是:让最近的样本点距离这个超平面最远(有点小绕)。那么,我们就有了目标函数:min(样本点i到超平面的距离)。
    然后我们改变超平面的参数(这图上是线性的,就只有k,b两个),创造很多超平面,得到max(min(样本点i到超平面j的距离))。
    这是一个凸二次规划问题,用拉格朗日对偶法可以解得。网上很多求解过程,看着都累,就不搬上来了,自己搜搜看。当这种方法可以区分的比较好,但是有异常点怎么办呢?svm算法引入了松弛变量的概念,给这个线性超平面一个可以改变的偏置,下面的点只要在这个偏置最大的时候被分类就可以,上面同理。当然,在计算超平面的时候,也要保证这个松弛变量尽量小。(SMO算法)
    当样本完全线性不可分的时候怎么办呢?SVM又引入了一个概念:核函数。在我的理解例,核函数就是一个映射,把线性不可分的样本映射到一个线性可分的坐标系中,然后再用线性可分的方法来区分。核函数一般有多项式核和高斯核,除了特殊情况,一般高斯核被使用的最多,因为比较灵活啦。。
    感觉也没啥好说的,不过好像蛮重要的诶,说一下python实现的思路:

    from numpy import * 
    
    def loadDataSet(filename): #读取数据
        dataMat=[]
        labelMat=[]
        fr=open(filename)
        for line in fr.readlines():
            lineArr=line.strip().split(' ')
            dataMat.append([float(lineArr[0]),float(lineArr[1])])
            labelMat.append(float(lineArr[2]))
        return dataMat,labelMat #返回数据特征和数据类别
    
    def selectJrand(i,m): #在0-m中随机选择一个不是i的整数
        j=i
        while (j==i):
            j=int(random.uniform(0,m))
        return j
    
    def clipAlpha(aj,H,L):  #保证a在L和H范围内(L <= a <= H)
        if aj>H:
            aj=H
        if L>aj:
            aj=L
        return aj
    
    def kernel(X, A, kTup): #核函数,输入参数,X:支持向量的特征树;A:某一行特征数据;kTup:('lin',k1)核函数的类型和参数
        m,n = shape(X)
        K = mat(zeros((m,1)))
        if kTup[0]=='lin': #线性函数
            K = X * A.T
        elif kTup[0]=='rbf': # 径向基函数(radial bias function)
            for j in range(m):
                deltaRow = X[j,:] - A
                K[j] = deltaRow*deltaRow.T
            K = exp(K/(-1*kTup[1]**2)) #返回生成的结果
        return K
    
    
    #定义类,方便存储数据
    class optStruct:
        def __init__(self,dataMatIn, classLabels, C, toler, kTup):  # 存储各类参数
            self.X = dataMatIn  #数据特征
            self.labelMat = classLabels #数据类别
            self.C = C #软间隔参数C,参数越大,非线性拟合能力越强
            self.tol = toler #停止阀值
            self.m = shape(dataMatIn)[0] #数据行数
            self.alphas = mat(zeros((self.m,1)))
            self.b = 0 #初始设为0
            self.eCache = mat(zeros((self.m,2))) #缓存
            self.K = mat(zeros((self.m,self.m))) #核函数的计算结果
            for i in range(self.m):
                self.K[:,i] = kernel(self.X, self.X[i,:], kTup)
    
    
    def calcEk(oS, k): #计算Ek
        fXk = float(multiply(oS.alphas,oS.labelMat).T*oS.K[:,k] + oS.b)
        Ek = fXk - float(oS.labelMat[k])
        return Ek
    
    #随机选取aj,并返回其E值
    def selectJ(i, oS, Ei):
        maxK = -1
        maxDeltaE = 0
        Ej = 0
        oS.eCache[i] = [1,Ei]
        validEcacheList = nonzero(oS.eCache[:,0].A)[0]  #返回矩阵中的非零位置的行数
        if (len(validEcacheList)) > 1:
            for k in validEcacheList:
                if k == i:
                    continue
                Ek = calcEk(oS, k)
                deltaE = abs(Ei - Ek)
                if (deltaE > maxDeltaE): #返回步长最大的aj
                    maxK = k
                    maxDeltaE = deltaE
                    Ej = Ek
            return maxK, Ej
        else:
            j = selectJrand(i, oS.m)
            Ej = calcEk(oS, j)
        return j, Ej
    
    
    def updateEk(oS, k): #更新os数据
        Ek = calcEk(oS, k)
        oS.eCache[k] = [1,Ek]
    
    #首先检验ai是否满足KKT条件,如果不满足,随机选择aj进行优化,更新ai,aj,b值
    def innerL(i, oS): #输入参数i和所有参数数据
        Ei = calcEk(oS, i) #计算E值
        if ((oS.labelMat[i]*Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or ((oS.labelMat[i]*Ei > oS.tol) and (oS.alphas[i] > 0)): #检验这行数据是否符合KKT条件 参考《统计学习方法》p128公式7.111-113
            j,Ej = selectJ(i, oS, Ei) #随机选取aj,并返回其E值
            alphaIold = oS.alphas[i].copy()
            alphaJold = oS.alphas[j].copy()
            if (oS.labelMat[i] != oS.labelMat[j]): 
                L = max(0, oS.alphas[j] - oS.alphas[i])
                H = min(oS.C, oS.C + oS.alphas[j] - oS.alphas[i])
            else:
                L = max(0, oS.alphas[j] + oS.alphas[i] - oS.C)
                H = min(oS.C, oS.alphas[j] + oS.alphas[i])
            if L==H:
                print("L==H")
                return 0
            eta = 2.0 * oS.K[i,j] - oS.K[i,i] - oS.K[j,j] 
            if eta >= 0:
                print("eta>=0")
                return 0
            oS.alphas[j] -= oS.labelMat[j]*(Ei - Ej)/eta 
            oS.alphas[j] = clipAlpha(oS.alphas[j],H,L) 
            updateEk(oS, j)
            if (abs(oS.alphas[j] - alphaJold) < oS.tol): 
                print("j not moving enough")
                return 0
            oS.alphas[i] += oS.labelMat[j]*oS.labelMat[i]*(alphaJold - oS.alphas[j])
            updateEk(oS, i) #更新数据
            b1 = oS.b - Ei- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.K[i,i] - oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.K[i,j]
            b2 = oS.b - Ej- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.K[i,j]- oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.K[j,j]
            if (0 < oS.alphas[i]<oS.C):
                oS.b = b1
            elif (0 < oS.alphas[j]<oS.C):
                oS.b = b2
            else:
                oS.b = (b1 + b2)/2.0
            return 1
        else:
            return 0
    
    
    #SMO函数,用于快速求解出alpha
    def smoP(dataMatIn, classLabels, C, toler, maxIter,kTup=('lin', 0)): #输入参数:数据特征,数据类别,参数C,阀值toler,最大迭代次数,核函数(默认线性核)
        oS = optStruct(mat(dataMatIn),mat(classLabels).transpose(),C,toler, kTup)
        iter = 0
        entireSet = True
        alphaPairsChanged = 0
        while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)):
            alphaPairsChanged = 0
            if entireSet:
                for i in range(oS.m): #遍历所有数据
                    alphaPairsChanged += innerL(i,oS)
                    print("fullSet, iter: %d i:%d, pairs changed %d" % (iter,i,alphaPairsChanged)) #显示第多少次迭代,那行特征数据使alpha发生了改变,这次改变了多少次alpha
                iter += 1
            else:
                nonBoundIs = nonzero((oS.alphas.A > 0) * (oS.alphas.A < C))[0]
                for i in nonBoundIs: #遍历非边界的数据
                    alphaPairsChanged += innerL(i,oS)
                    print("non-bound, iter: %d i:%d, pairs changed %d" % (iter,i,alphaPairsChanged))
                iter += 1
            if entireSet:
                entireSet = False
            elif (alphaPairsChanged == 0):
                entireSet = True
            print("iteration number: %d" % iter)
        return oS.b,oS.alphas
    
    def testRbf(data_train,data_test):
        dataArr,labelArr = loadDataSet(data_train) #读取训练数据
        b,alphas = smoP(dataArr, labelArr, 200, 0.0001, 10000, ('rbf', 1.3)) #通过SMO算法得到b和alpha
        datMat=mat(dataArr)
        labelMat = mat(labelArr).transpose()
        svInd=nonzero(alphas)[0]  #选取不为0数据的行数(也就是支持向量)
        sVs=datMat[svInd] #支持向量的特征数据
        labelSV = labelMat[svInd] #支持向量的类别(1或-1)
        print("there are %d Support Vectors" % shape(sVs)[0]) #打印出共有多少的支持向量
        m,n = shape(datMat) #训练数据的行列数
        errorCount = 0
        for i in range(m):
            kernelEval = kernel(sVs,datMat[i,:],('rbf', 1.3)) #将支持向量转化为核函数
            predict=kernelEval.T * multiply(labelSV,alphas[svInd]) + b  #这一行的预测结果,注意最后确定的分离平面只有那些支持向量决定。
            if sign(predict)!=sign(labelArr[i]): #sign函数 -1 if x < 0, 0 if x==0, 1 if x > 0
                errorCount += 1
        print("the training error rate is: %f" % (float(errorCount)/m)) #打印出错误率
        dataArr_test,labelArr_test = loadDataSet(data_test) #读取测试数据
        errorCount_test = 0
        datMat_test=mat(dataArr_test)
        labelMat = mat(labelArr_test).transpose()
        m,n = shape(datMat_test)
        for i in range(m): #在测试数据上检验错误率
            kernelEval = kernel(sVs,datMat_test[i,:],('rbf', 1.3))
            predict=kernelEval.T * multiply(labelSV,alphas[svInd]) + b
            if sign(predict)!=sign(labelArr_test[i]):
                errorCount_test += 1
        print("the test error rate is: %f" % (float(errorCount_test)/m))
    
    #主程序
    def demo1():
        filename_traindata='C:\\Users\\Administrator\\Desktop\\data\\traindata.txt'
        filename_testdata='C:\\Users\\Administrator\\Desktop\\data\\testdata.txt'
        testRbf(filename_traindata,filename_testdata)
    
    if __name__=='__main__':
        demo1()

    代码来源:https://blog.csdn.net/csqazwsxedc/article/details/71513197(代码比较容易看懂)
    总觉得要买一本《统计学习方法》呀,等找完工作再处理这些事情(希望能找到)

    1.2 聚类

    接下来说无监督的模式识别,也就是聚类。
    聚类最著名,经典的应该就是k-means了,其他还有DBSCAN(基于密度)、CLIQUE(基于网络)、FCM(模糊c均值)等等等等,太多了,先说k-means,其他后面看心情吧,反正又不搞数据挖掘(目前),再说再说

    1.2.1 k-means算法

    k-means是一种基于距离聚类的算法。
    k-means的算法核心思想是:
    1.先选择k个点作为质心;
    2.再把每个点指派到距离最近的质心,每进行一次,都重新计算一次每个簇的质心;
    一直到簇的质心不发生变化或者达到最大迭代次数为止。
    这个算法有一个很重要的问题,就是k值怎么定,k个质心选在哪里。
    k值的话,对于可以确定K值不会太大但不明确精确的K值的场景,可以进行迭代运算,然后找出代价函数最小时所对应的K值,这个值往往能较好的描述有多少个簇类。 (不过,也不是最小的时候对应的k值最好,当代价函数下降的不明显时,就可以选择那个k值(肘部法则))
    此外,还有用层次聚类方法预估计k值的,用canopy算法进行初始划分的,在这里先不仔细提。(简单说一下,canopy算法是先将相似的对象放到一个子集中,canopy可以互相重叠;对每个canopy可以使用传统的聚类。)
    还有的方法是选取小样本(比如10000个中选取1000个)来预估计k值和质心的位置,目的都是一样,减少聚类时的计算量并优化结果(Mini Batch k-Means)。
    对于初始质心的选取,最常见的就是随机,多次取,找到最好的值。这种策略简单,但计算量大,取决于数据集和簇的个数。
    还有就是在取小样本的时候,可以用随机选一个点,然后选离重心最远的点作为下一个质点;然后再重复到合适位置。
    还有一个方法,就是用层次聚类的方法提取几个簇,作为初始质心。当样本较小,且k值相对较小的时候才合适。
    当然,用canopy算法也可以。。
    k-means算法的优点在于,原理简单,超参只有一个k值,调节简单;扩展性强。速度还可以。
    缺点在于,对k值太敏感,对初始质心位置敏感,对离群点敏感;当样本量大,时间开销非常大;不能处理所有类型的簇。
    改进型有各种,比如bisecting K-means(二分k均值); K-modes;K-prototype等。。这里就不列举了。。

    1.2.2 DBSCAN

    1.首先确定半径r和minPoints. 从一个没有被访问过的任意数据点开始,以这个点为中心,r为半径的圆内包含的点的数量是否大于或等于minPoints,如果大于或等于minPoints则改点被标记为central point,反之则会被标记为noise point。
    2.重复1的步骤,如果一个noise point存在于某个central point为半径的圆内,则这个点被标记为边缘点,反之仍为noise point。重复步骤1,知道所有的点都被访问过。
    优点:不需要知道簇的数量;可以发现任何形状的簇;可以找出异常点。
    缺点:需要确定距离r和minPoints,调参较为复杂;如果簇间密度不同,不合适;样本集太大时,收敛时间较长。

    1.2.3 CLIQUE

    CLIQUE是基于网格的聚类算法。首先先以一个步长(参数1)分割整个域,然后扫描每个网格内的样本数目,判断是否是密集网格(阈值:参数2)。
    然后就把聚类问题化简为类似空间内求01连通域问题,每一个联通域就是一个簇。
    优点:高效;单遍数据扫描就可以完成目的。
    缺点;两个参数,调参较为复杂;对不同密度的簇不合适;对于高维空间,效果会很不好。

    1.2.4 基于GMM的EM聚类

    GMM首先假设了数据点是呈高斯分布的,就像K-means假定数据点是圆分布。高斯分布是椭圆的,所以要更灵活一些。
    要做聚类就要找到样本的均值和标准差,这时采用EM算法,过程是:
    1. 首先选择簇的数量并随机初始化每个簇的高斯分布参数(期望和方差)。也可以先观察数据给出一个相对精确的均值和方差。
    2. 给定每个簇的高斯分布,计算每个数据点属于每个簇的概率。一个点越靠近高斯分布的中心就越可能属于该簇。
    3. 基于这些概率我们计算高斯分布参数使得数据点的概率最大化,可以使用数据点概率的加权来计算这些新的参数,权重就是数据点属于该簇的概率。
    4. 重复迭代2和3直到在迭代中的变化不大。
    GMMs的优点:GMMs使用均值和标准差,簇可以呈现出椭圆形而不是仅仅限制于圆形;GMMs是使用概率,所有一个数据点可以属于多个簇。例如数据点X可以有百分之20的概率属于A簇,百分之80的概率属于B簇。
    行了行了 又说多了,本来想说图像检测的东西来着,一搞模式识别说了一大堆。。模式识别还有很多其他的方式,比如层次识别啊 模糊均值啊 请大家动动手指去百度吧(其实我有些也是百度来的,发出来是为了让自己更有印象)
    图像检测下一节总结!

    展开全文
  • 学习图像处理与模式识别一点体会

    万次阅读 2012-04-17 23:21:05
    最近一直研究图像处理与模式识别的问题,通过同高手的交流,结合牛人的指点,现把自己的感受和体会跟大家分享,尤其是目标检测识别这一块,如有不对的地方,希望高手指点一下!   如果有读关于目标检测和识别...

    最近一直研究图像处理与模式识别的问题,通过同高手的交流,结合牛人的指点,现把自己的感受和体会跟大家分享,尤其是目标检测与识别这一块,如有不对的地方,希望高手指点一下!

     

    如果有读关于目标检测和识别西文文献比较多的朋友,一定能够发现大多数的文献检测和识别的目标都是如下两类:人脸、汽车。但是对于类内差异较大的物体类,研究其检测与识别的文献并不多见。由此,引发了我的几点思考,和诸位共享。
    首先:人脸是一类类内差异很小的目标,什么叫类内差异呢?我们可以这样理解:就是说它的configuration是不变的。不管是什么人种,都是两眼一鼻一嘴构成,因此对他的检测,采用模板匹配、Hmm、 基于Fragment的方法都可以达到较好的效果。然而,我们会发现,对人脸的识别研究的方法就寥寥可数了。人脸对于识别来说,他的类内差异就是相当大。目前在工程上最为有效的方法就是模板匹配,图像中的人脸和人脸库中的图像一一匹配,相似度最大的即为该人。同样,汽车也是一类类内差异不大的物体,它的显著且不变性特征就是车轮。车身可能万变,但车轮都如出一辙。因此,在图像中若能较好的检测出车轮,也就能检测到车辆了。


    其次:为什么研究其他类目标的文献并不多见呢?难度大。难度大的原因就是要找出恒一不变的特征很难。比如:刚性物体——水杯。水杯的种类万千,要找出他们的共性不容易。柔性物体之类的则更加了。比如:检测树。


    最后:给出我的一点研究启发:

              第一,在研究课题之前,一定要选择好研究的图像目标。其实也可以是大家都在研究的一类物体,并不需要标新立异,当然如果你有针对这类目标的好的检测方法,那也是惟愿如此。

             第二,并不一定要求你的方法放之四海皆准,只需要对某一类目标有效果,你同样可以发高水平的文章。

             第三,多尝试从数学的角度去理解图像的机理,从美术家的角度去理解图像的构造。

     

    展开全文
  • 在我的理解里,要实现计算机视觉必须有图像处理的帮助,而图像处理倚仗与模式识别的有效运用,而模式识别是人工智能领域的一个重要分支,人工智能机器学习密不可分。纵观一切关系,发现计算机视觉的应用服务于机器...
  • 虽然考试都结束了,手头还是累积了不少活儿要补,不多写了,晒个小项目,之前一直做的,后来当做模式识别课程的大作业交了。 大体框架如下: 还是之前的火灾检测,但是在一些简单的颜色、运动检测的基础上增加...
  • 第七届SPIE多谱图像处理与模式识别国际学术会议征文通知 2011年11月4日~11月6日 中国·桂林 多谱图像处理与模式识别国际学术会议是国际光学工程学会(SPIE)中国联合组织的国际学术会议,已成功...
  • 模式识别及其在图像处理中的应用》 1、模式识别基本框架 一般认为,模式识别是通过具体的事物进行观测所得到的具有时间、空间分布的信息,模式所属的类别或同一类中模式的总体成为模式类,其中个别具体的模式...
  • 图像处理模式识别资源收藏

    千次阅读 2004-12-28 17:12:00
    北邮模式识别与智能系统实验室,提供了大量的电子书籍、源代码、资源下载。 朱虹图像处理研究室,提供了图像处理的讲义下载,并且有许多资源下载。 Fast Artificial Nerual Network Library,C语言实现的多层人工...
  • 图象处理与模式识别专业前景

    万次阅读 2006-10-15 15:04:00
    我不是这个专业的,但是一直在做图像处理,看到相关的就贴出来了。中国移动推出了二维码业务,其中关键技术不是二维码的编码和解码,而是用手机摄像头采集二维码时对二维码的定位问题。这恰恰就是一个典型的图像识别...
  • 模式识别图像处理工程师的要求

    千次阅读 2017-11-13 16:29:02
    既然学了模式识别这个专业,研究生期间主要方向是机器学习,计算机视觉,图像处理。所以很想了解现在这个领域的就业方向及相关要求。 今天在“增强视觉 | 计算机视觉 增强现实”上看到一则招聘智能图像/视频处理...
  • 虽然考试都结束了,手头还是累积了不少活儿要补,不多写了,晒个小项目,之前一直做的,后来当做模式识别课程的大作业交了。 大体框架如下: 还是之前的火灾检测,但是在一些简单的颜色、运动检测的...
  • (先汇总,后续整理) 三者之间既有区别,又有联系。  计算机图形学是给定关于景象结构、表面反射特性、光源配置及...模式识别则是从特征空间到类别空间的变换。研究内容包括特征提取(PCA,LDA,LFA,Kernel,Mean
  • 图像处理是将输入图像转换为输出图像的过程,人是图像处理的效果的最终解释者; 在计算机视觉中,计算机是图像的解释者;图像处理仅仅是计算机视觉系统中的一个模块; 计算机图形学的主要工作是从三维描述到二维...
  • (1) IEEE Transactions on Pattern Analysis and Machine Intelligence,IEEE模式分析机器智能汇刊,简称PAMI,是IEEE最重要的学术性汇刊之一。 (2) ACM Transactions on Graphics,美国计算机协会图形汇刊,简称...
  • 图像处理与识别

    千次阅读 2016-07-01 08:45:03
    图像处理与识别学习小结   数字图像处理是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多...
  • 图像模式识别的方法

    万次阅读 2015-07-05 12:24:17
    图像模式识别的方法很多,从图像模式识别提取的特征对象来看,图像识别方法可分为以下几种:基于形状特征的识别技术、基于色彩特征的识别技术以及基于纹理特征的识别技术。其中,基于形状特征的识别方法,其关键是...
  • 图像处理与模式书籍推荐

    千次阅读 2016-03-06 16:46:34
    图像处理模式识别、模式分类、机器视觉推荐图书汇总  1、数字图像处理,冈萨雷斯,阮秋琦(译),电子工业出版社; 2、opencv基础篇,于仕琦,刘瑞祯,北京航空航天大学出版社; 3、Learning OpenCV ...
1 2 3 4 5 ... 20
收藏数 87,985
精华内容 35,194
关键字:

图像处理与模式识别