2018-01-11 15:22:31 wcl0617 阅读数 32129
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5669 人正在学习 去看看 贾志刚

图像识别过程分为图像处理图像识别两个部分。
图像识别流程程
图像处理(imageProcessing)利用计算机对图像进行分析,以达到所需的结果。
图像处理可分为模拟图像处理数字图像处理,而图像处理一般指数字图像处理
这种处理大多数是依赖于软件实现的。
其目的是去除干扰、噪声,将原始图像编程适于计算机进行特征提取的形式,主要包括图像采样图像增强图像复原图像编码与压缩图像分割

1)图像采集
图像采集是数字图像数据提取的主要方式。数字图像主要借助于数字摄像机、扫描仪、数码相机等设备经过采样数字化得到的图像,也包括一些动态图像,并可以将其转为数字图像,和文字、图形、声音一起存储在计算机内,显示在计算机的屏幕上。图像的提取是将一个图像变换为适合计算机处理的形式的第一步。

2)图像增强
图像在成像、采集、传输、复制等过程中图像的质量或多或少会造成一定的退化,数字化后的图像视觉效果不是十分满意。为了突出图像中感兴趣的部分,使图像的主体结构更加明确,必须对图像进行改善,即图像增强。通过图像增强,以减少图像中的图像的噪声,改变原来图像的亮度、色彩分布、对比度等参数。图像增强提高了图像的清晰度、图像的质量,使图像中的物体的轮廓更加清晰,细节更加明显。图像增强不考虑图像降质的原因,增强后的图像更加赏欣悦目,为后期的图像分析和图像理解奠定基础。

3)图像复原
图像复原也称图像恢复,由于在获取图像时环境噪声的影响、运动造成的图像模糊、光线的强弱等原因使得图像模糊,为了提取比较清晰的图像需要对图像进行恢复,图像恢复主要采用滤波方法,从降质的图像恢复原始图。图像复原的另一种特殊技术是图像重建,该技术是从物体横剖面的一组投影数据建立图像。

4)图像编码与压缩
数字图像的显著特点是数据量庞大,需要占用相当大的存储空间。但基于计算机的网络带宽和的大容量存储器无法进行数据图像的处理、存储、传输。为了能快速方便地在网络环境下传输图像或视频,那么必须对图像进行编码和压缩。目前,图像压缩编码已形成国际标准,如比较著名的静态图像压缩标准JPEG,该标准主要针对图像的分辨率、彩色图像和灰度图像,适用于网络传输的数码相片、彩色照片等方面。由于视频可以被看作是一幅幅不同的但有紧密相关的静态图像的时间序列,因此动态视频的单帧图像压缩可以应用静态图像的压缩标准。图像编码压缩技术可以减少图像的冗余数据量和存储器容量、提高图像传输速度、缩短处理时间。

5)图像分割技术
图像分割是把图像分成一些互不重叠而又具有各自特征的子区域,每一区域是像素的一个连续集,这里的特性可以是图像的颜色、形状、灰度和纹理等。图像分割根据目标与背景的先验知识将图像表示为物理上有意义的连通区域的集合。即对图像中的目标、背景进行标记、定位,然后把目标从背景中分离出来。目前,图像分割的方法主要有基于区域特征的分割方法、基于相关匹配的分割方法和基于边界特征的分割方法。由于采集图像时会受到各种条件的影响会是图像变的模糊、噪声干扰,使得图像分割是会遇到困难。在实际的图像中需根据景物条件的不同选择适合的图像分割方法。图像分割为进一步的图像识别、分析和理解奠定了基础。

图像识别将图像处理得到的图像进行特征提取和分类。识别方法中基本的也是常用的方法有统计法(或决策理论法)、句法(或结构)方法神经网络法模板匹配法几何变换法

1)统计法(StatisticMethod)
该方法是对研究的图像进行大量的统计分析,找出其中的规律并提取反映图像本质特点的特征来进行图像识别的。它以数学上的决策理论为基础,建立统计学识别模型,因而是一种分类误差最小的方法。常用的图像统计模型有贝叶斯(Bayes)模型和马尔柯夫(Markow)随机场(MRF)模型。但是,较为常用的贝叶斯决策规则虽然从理论上解决了最优分类器的设计问题,其应用却在很大程度受到了更为困难的概率密度估计问题的限制。同时,正是因为统计方法基于严格的数学基础,而忽略了被识别图像的空间结构关系,当图像非常复杂、类别数很多时,将导致特征数量的激增,给特征提取造成困难,也使分类难以实现。尤其是当被识别图像(如指纹、染色体等)的主要特征是结构特征时,用统计法就很难进行识别。

2)句法识别法(Syntactic Recognition)
该方法是对统计识别方法的补充,在用统计法对图像进行识别时,图像的特征是用数值特征描述的,而句法方法则是用符号来描述图像特征的。它模仿了语言学中句法的层次结构,采用分层描述的方法,把复杂图像分解为单层或多层的相对简单的子图像,主要突出被识别对象的空间结构关系信息。模式识别源于统计方法,而句法方法则扩大了模式识别的能力,使其不仅能用于对图像的分类,而且可以用于对景物的分析与物体结构的识别。但是,当存在较大的干扰和噪声时,句法识别方法抽取子图像(基元)困难,容易产生误判率,难以满足分类识别精度和可靠度的要求。

3)神经网络方法(NeuralNetwork)
该方法是指用神经网络算法对图像进行识别的方法。神经网络系统是由大量的,同时也是很简单的处理单元(称为神经元),通过广泛地按照某种方式相互连接而形成的复杂网络系统,虽然每个神经元的结构和功能十分简单,但由大量的神经元构成的网络系统的行为却是丰富多彩和十分复杂的。它反映了人脑功能的许多基本特征,是人脑神经网络系统的简化、抽象和模拟。句法方法侧重于模拟人的逻辑思维,而神经网络侧重于模拟和实现人的认知过程中的感知觉过程、形象思维、分布式记忆和自学习自组织过程,与符号处理是一种互补的关系。由于神经网络具有非线性映射逼近、大规模并行分布式存储和综合优化处理、容错性强、独特的联想记忆及自组织、自适应和自学习能力,因而特别适合处理需要同时考虑许多因素和条件的问题以及信息不确定性(模糊或不精确)问题。在实际应用中,由于神经网络法存在收敛速度慢、训练量大、训练时间长,且存在局部最小,识别分类精度不够,难以适用于经常出现新模式的场合,因而其实用性有待进一步提高。

4)模板匹配法(TemplateMatching)
它是一种最基本的图像识别方法。所谓模板是为了检测待识别图像的某些区域特征而设计的阵列,它既可以是数字量,也可以是符号串等,因此可以把它看为统计法或句法的一种特例。所谓模板匹配法就是把已知物体的模板与图像中所有未知物体进行比较,如果某一未知物体与该模板匹配,则该物体被检测出来,并被认为是与模板相同的物体。模板匹配法虽然简单方便,但其应用有一定的限制。因为要表明所有物体的各种方向及尺寸,就需要较大数量的模板,且其匹配过程由于需要的存储量和计算量过大而不经济。同时,该方法的识别率过多地依赖于已知物体的模板,如果已知物体的模板产生变形,会导致错误的识别。此外,由于图像存在噪声以及被检测物体形状和结构方面的不确定性,模板匹配法在较复杂的情况下往往得不到理想的效果,难以绝对精确,一般都要在图像的每一点上求模板与图像之间的匹配量度,凡是匹配量度达到某一阈值的地方,表示该图像中存在所要检测的物体。经典的图像匹配方法利用互相关计算匹配量度,或用绝对差的平方和作为不匹配量度,但是这两种方法经常发生不匹配的情况,因此,利用几何变换的匹配方法有助于提高稳健性。

5)典型的几何变换方法主要有霍夫变换HT (Hough Transform)
霍夫变换是一种快速形状匹配技术,它对图像进行某种形式的变换,把图像中给定形状曲线上的所有点变换到霍夫空间,而形成峰点,这样,给定形状的曲线检测问题就变换为霍夫空间中峰点的检测问题,可以用于有缺损形状的检测,是一种鲁棒性(Robust)很强的方法。为了减少计算量和和内存空间以提高计算效率,又提出了改进的霍夫算法,如快速霍夫变换(FHT)、自适应霍夫变换(AHT)及随机霍夫变换(RHT)。其中随机霍夫变换RHT(RandomizedHough Transform)是20世纪90年代提出的一种精巧的变换算法,其突出特点不仅能有效地减少计算量和内存容量,提高计算效率,而且能在有限的变换空间获得任意高的分辨率。

2018-10-14 09:24:58 weixin_35747666 阅读数 804
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5669 人正在学习 去看看 贾志刚

本系列是研一课程《图像处理与图像识别》的随堂笔记,主要内容是数字图像处理方面,根据老师的讲课内容与自己的理解所书写,还会有一些具体实现的代码,基于Python,欢迎交流。本篇主要介绍图像处理与图像识别的基础知识。

一、图像处理(ImageProcessing)

图像处理是对图像信息进行加工处理,以满足人的视觉心理和实际应用的要求。

图像处理是以人作为最终的信息接收者,主要目的是改善图像的质量。
图像处理是计算机视觉的基础。

二、图像识别(ImageRecognition)

图像识别是以机器为对象,目的是使机器或计算机能自动地识别目标,属于计算机视觉范畴内。

图像分割是数字图像处理中的关键技术之一,指的是将图像中的有意义的特征部分提取出来,包括图像中物体的边缘、区域等。图像分割是进一步进行图像识别、分析和理解的基础,例如手写数据集MNIST就是已经分割好的数据集。我们这里所述的图像分割是指传统的分割,将属于不同物体的像素分开,计算机并不知道分割出来的内容是什么,这个阶段的图像分割方法包括像Ostu、FCM、分水岭、N-Cut等,属于非监督学习;图像语义分割是更高级的分割,语义分割是在传统分割的基础之上,分类出每一个区域的语义,这个阶段的主要方法是深度学习。还有一种分割叫实例分割(Instance Segmentation),在语义分割的基础上,对属于同一类别的不同物体进行划分。图像分割的应用场景,比如自动驾驶,3D 地图重建,美化图片,人脸建模等等。图像分割是像素级的,与图像分类、目标检测区分开,是更高一级层面的
上图中的图像分割应指的是传统的分割方法,在传统的图像识别中需要先进行图像分割。

三、图像识别快速发展的原因

(1)计算性能大幅提高,底层芯片从CPU+GPU到FPGA,再到人工智能芯片,计算性能不断刷新;
(2)应用场景多样化,提升产业与技术的发展;
(3)开源工具与框架方便学习与研究,缩短理论到应用的距离。

2016-12-07 21:01:24 u013698770 阅读数 1677
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5669 人正在学习 去看看 贾志刚

图像处理

  图像处理是指对获取的二维图像进行基本的处理。比如,滤波、边缘、角点提取等。通过对图像处理可以实现降噪、特征提取等。一般来说,图像处理被用作图像数据的预处理,其主要包括滤除噪声数据及增强图像中的关键数据。

图像分类

  图像分类也称之为图像识别。图像分类是通过海量的图像数据来训练分类器,比如深度学习网络,并通过分类器来进行图像的分类。一般来说,图像分类可用于人脸识别,指纹识别等需要图像和人相对应的场景。

计算机视觉

  计算机视觉,其更准确的应该称之为机器视觉,或者机器人视觉,因为其应用的算法主要是在机器人视觉上。计算机视觉主要是通过获取得到的2维图像来还原真实的3维场景。其最基本的应用就是双目测距。

2018-03-31 13:51:30 royole98 阅读数 1424
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5669 人正在学习 去看看 贾志刚

模式识别之图像识别笔记

图像识别技术的定义为利用计算机对图像进行处理、分析和理解,以识别不同模式的目标和对象的技术。

图像识别系统可以分为三个部分:

 

 

1、图像处理

(1) 基本概念

① 定义:把输入图像转化为计算机能够接受处理的信号,再进行图像恢复、增强等预处理操作

② 目的:为之后的图像特征做准备

(2) 主要方法

① 图像的数字化:对图像进行抽样和量化,得到一个二维矩阵,矩阵的每一个元素即为一个像素,元素的值为该像素的灰度值fx,y

② 图像的频域、时域变换:经典变换方法有fourier变换和小波变换等

③ 图像增强和恢复:由于图像在传输和变换过程中会受到多种因素干扰,会使图像降质,因此需要对图像进行增强、恢复操作。

常用方法有:

灰度变换(把图像灰度值fx,y)经过一个变换函数T{·}变换成新的图像函数gx,y),将灰度动态范围扩大,提高图像对比度);

直方图变换(直方图均衡化,使像素灰度值动态范围最大,增强图像对比度;直方图规定化,根据需求修改直方图,可以突出图像中感兴趣的灰度范围,比如黑白二值化)

频域滤波操作,突出图像中的某一种频率成分(图像的低通部分一般为大面积的背景和变化慢的部分,而高通部分一般为图像边缘、噪声部分。通过低通滤波可以实现图像平滑处理,高通滤波可以实现图像锐化处理(理想滤波器、梯形滤波器、巴特沃斯滤波器))

 

2、特征提取

(1) 特征概念:图像特征是指图像场的原始属性。有些是视觉自然感受的自然特征,比如:图像区域亮度、边缘轮廓、纹理色彩等;有些是通过变换测量得到的人为特征,比如:变换频谱、直方图、矩等。

(2) 常用方法简介:

将图像特征分为面特征、线特征、局部区域特征、点特征和不变点特征。选取几个常用特征提取算法进行介绍:

① 图像金字塔(面特征):图像金字塔化是图像多尺度的表现形式。两个步骤:图像经过低通滤波器进行平滑操作;不断对平滑图像进行抽样,从而得到一系列尺寸缩小、分辨率降低的图像。

② 边缘检测(线特征):基本思路是先检测图像中边缘点,再按照某种策略将边缘点连接成轮廓,从而构成分割区域。常用方法有:梯度边缘算子(梯度模值大小和方向可以反映边缘的强度和趋势信息);二阶微分算子(图像在边缘处的阶跃性会导致图像二阶微分在边缘处出现零值)

③ 斑点特征检测(局部区域特征):高斯拉普拉斯算子,对图像进行卷积运算,求取相似性

④ SIFT尺度不变特征提取(不变点特征):该算法可以处理两幅图像之间发生平移、旋转、尺度变化、光照变化等问题下的特征比配匹配问题。过程可以描述为:生成高斯差分高斯金字塔(DOG),构建不同分辨率下的尺度空间》》空间极值点的检测,将每一个像素点与其所有相邻点比较,看其是否比它的图像域和尺度空间的相邻点大或者小》》稳定关键点的精确定位》》稳定关键点方向信息分配(由于极值点在不同尺度空间下,计算以关键点为中心的领域内所有点的梯度方向,将梯度方向归一化到36个方向内,生成梯度方向直方图,选取最大值代表方向作为主方向||还有辅方向)》》关键点描述(关键点周围像素区域分块,计算块内梯度直方图,生成一种独特的向量作为该区域图像的抽象表述)》》特征点匹配,即计算两组图像关键点的欧氏距离,当距离小于门限值判定匹配成功。

 

3、模式识别

模式识别是利用计算机根据样本的特征对样本进行分类。

样本特征通过上述方法得到后在进行优化,而分类需要通过图像样本进行训练,学习得到分类类别。将被识别图像的特征经过判别函数运算后,来确定被识别图像属于哪一类。分类器的设计可以等于判别函数的设计。

(1) 传统分类器(X为输入图像,为模式类别) 

 

① 最小距离分类器:给出模式类别对应的参考向量,判别公式为X的欧氏距离。X与哪个参考向量距离最近就属于哪一类

② 贝叶斯分类器:判别函数为贝叶斯公式。极大值检出。

(2) 神经网络分类器

神经网络分类器的第一级与传统分类器相同,也是计算匹配度,然后平行的输送给第二级,第二集中每个分类均有一个输出,并表现为只有一个输出强度为“高”,其余输出均为“低”。

另外,神经网络还具有一个特点。分类器的输出结果可以反馈给第一级,对第一级算法的权重进行修正。

 

4、基于深度学习的图像识别 

 

(图源李宏毅机器学习PPT

(1) 发展

神经网络有大量参数,虽然多维参数有利于图像的描述,但是也常常出现过拟合问题。由于神经网络被提出之初训练样本数量少,计算机计算能力有限,训练一个网络需要时间过长,因此最初神经网络并没有体现出很大的优势,更多的学者采用支持向量机SVM、最近邻等分类器,这些分类器采用的是手工设计的特征,例如上文提到的SIFTDoG等。

深度学习的突破是在2012年,欣顿的研究小组提出AlexNet网络,首次将深度学习运用到图像分类领域,并且赢得了ImageNet图像分类比赛的冠军,且准确率远超第二名10%左右。这引起了深度学习热潮。

此后,谷歌的GoogleNet和微软的ResNet相继提出,不断推动着深度神经网络性能的提高。

(2)优势

① 传统图像识别采用手工设计特征,依靠设计者的先验知识,且耗时长;深度学习采用的特征是从大数据中自动学习得到,可以包含大量的参数,且速度快。

② 早期的浅层神经网络模型,提供的只是局部表达,在表达相同分类函数时,需要更多的参数和训练样本。而深度学习通过重复利用中间层的计算单元,可以有效减少参数。以人脸识别为例:最底层学习刻画局部的边缘和纹理特征,中间层将各种边缘滤波器进行组合,描述不同类型人脸器官,最高层描述是整个人脸的全局特征。

 

 


2019-03-05 22:06:00 sinat_31117133 阅读数 207
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5669 人正在学习 去看看 贾志刚

 

我们理解图像识别,总体上分三步:

  • 图像的采集
  • 图像的处理
  • 图像的识别

其中,图像采集和处理是相辅相成的,如果图像的采集能够保证明暗色彩等要素的稳定和统一,那么在处理图像时成功率会提升很多;反之如果图像处理的算法足够强大,对图像采集的要求就会相对的降低。

而只有正确的进行了图像的处理后,图像才能够被识别。

 

图像的采集

图像采集需尽可能的保证图像的一致性,即图像的明暗程度、角度一致,这样能够为图像处理和识别提供很大的便利,提升成功率。

 

图像的处理

目的:

图像处理的最终目的是:截取便于识别的图像区域。

 

:识别出图中温度计上的数字。

 

原理:

图像是由若干像素点构成,每个像素点的颜色都是由光的三原色(红、绿、蓝)组合而成。因此每个像素点都可以用一个元组(R,G,B)表示。其中R、G、B为0-255范围的数字, R即red,G即green,B即blue。(0,0,0)即黑色,(255,255,255)即白色,(255,0,0)即红色,(255,255,0)即黄色…图片其实就是一个二维数组,数组中的每个元素都是(R,G,B)元组。对图像的处理实际上就是对这个二维数组的处理。分辨率就是Image[m][n]这个数组的m和n。

 

Step1——压缩与灰度图

照相机采集到的图像,分辨率可能很大,在处理图片前,先根据实际需要对图片进行压缩,我们把它压缩到800*600:

image = cv.resize(image, (800, 600), interpolation=cv.INTER_AREA)

图像处理第一步通常是把彩色的图像变成灰度图:

gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

灰度图其实是利用了人类心理对于不同色彩的亮度的认知,经典转换公式:

Gray=(R*0.299+G*0.587+B*0.114)

效果如下图,这样每个像素点的描述就从(R,G,B)三个向量变成了一个亮度的数值Gray(0-255)。这是进行后续算法的基础。

 

Step2——二值化

灰度图中每个像素点都是用0-255中的一个数字表示的,而二值化的意思是设置一个阈值,按照阈值把灰度变成黑白,阈值之上都是255,阈值之下都是0。由于此图中数字是黑色的,所以我们需要反转黑白,让数字显示为白色:

(_, thresh) = cv.threshold(gray, 55, 255, cv.THRESH_BINARY_INV)

效果如下图,需要注意的是,这个阈值的设置是与图像采集重要相关的。可以采用参考系来选定阈值。

另外,我们可以看到图像中除了数字外还有很多白色或黑色的无用噪点。接下来应对噪点进行处理。

 

Step3——腐蚀和膨胀

为了去掉二值图中除了数字之外的白颜色的“噪声”,我们使用的方法是,先腐蚀,然后再膨胀

腐蚀的意思是,扩展图像中黑色的部分。由于图像中白色的噪声与数字相比要细小,所以腐蚀后白色噪声会消失,而数字会变细变小。

膨胀的意思是,扩展图像中白色的部分。这样可以去掉黑色的噪点,数字变细后,再膨胀,把数字部分适当的扩大。

erode = cv.erode(thresh, None, iterations=5)
pic = cv.dilate(erode, None, iterations=15)

效果如下图,代码中进行了5次腐蚀,之后进行了15次膨胀,这样图像中数字的范围会比真实的数字略大,保证切割出的数字范围内包括了数字的全体。

 

Step4——横向模糊

为划定数字的范围,需要把Step3图中白色数字框起来。由于数字间依然存在黑色的缝隙和孔洞,所以我们要进行模糊,用白色填充上这些缝隙。我们想把两行数字分开划分区域,因此只做横向的模糊:

rectkernel = cv.getStructuringElement(cv.MORPH_RECT, (100, 1))
closed = cv.morphologyEx(pic, cv.MORPH_CLOSE, rectkernel)

效果如右图,这里用的是闭运算方法,本质上也是先膨胀后腐蚀。横向上做大范围的闭运算,纵向上基本忽略。

 

Step5——获取矩形轮廓

利用OpenCV提供的API,获取Step4图中白色区域的矩形轮廓,并对轮廓的大小做出限定(宽度小于400像素)。

(cnts, _) = cv.findContours(closed.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
image_parts = []
for cnt in cnts:
    x, y, w, h = cv.boundingRect(cnt)
    if w < 400:
        cv.rectangle(image,(x,y),(x+w,y+h),(0,255,0),3)
        image_parts.append(gray[y:y + h, x:x + w])

这样就可以获得到数字的范围了。

把Step1中的灰度图按照Step5得到的数字范围截取下来,就可以进行下一步的处理了。

 

Step6——数字图像部分处理

为了进行后续的图像识别算法,要把图像部分进行再次的二值化、去噪处理,这样就得到了我们目标的图像:

(_, thresh) = cv.threshold(gray_image, THRESHOLD, 255, cv.THRESH_BINARY)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 1))
dilate = cv.dilate(thresh, kernel)
pic = cv.erode(dilate, kernel)

效果如右图,图像处理部分就结束了。

下面开始识别切割下的数字的图像中的内容。

 

图像的识别

OCR(Optical Character Recognition,光学字符识别)

电子设备检查纸上或图像中的字符,通过检测暗亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字

数字识别采用的步骤如下:

  • 分割为单个数字
  • 对每个数字采集特征值
  • 把特征值与数据库中数字的特征值比较,

      得到结果

其中,分割成单个数字是指把26.3分割成2 6 . 3四个部分,然后再进一步的识别每个部分。

采集特征值,由于0-9包括小数点每个数字的特征都比较明显,为提升执行速度,我们用了相对简单的算法采集特征。

数据库是指特征值数据库,这个数据库是用户通过训练建立的。

 

Step1——分割为单个数字

数字图片边缘存在黑边(图片采集时的阴影)。边缘阴影特点是越靠近边缘越宽(长)。图片此时实际上是以数组的数组形式保存的,每一行像素都是个数组,像素值是0(白)或1(黑)。可以通过遍历边缘向内侵蚀的方法把与边缘接壤的1全部变成0。

把数组中上下左右全部为0的边缘部分切掉。

在切掉边缘后,找数组中黑色部分的起始和终止点,可以得知单个数字的个数和单个数字的范围。

在获取单个数字范围后,切割下每个数字,后续识别特征值。

 

Step2——采集特征值

特征值采集我们采用的算法是把数字分割成四份,每份中黑色部分占整体的比例保存成一个值,设为a。整个数字中黑色占整体的比例保存成一个值,设为A。这样就有一个5维的向量: (a1,a2,a3,a4,A)

这个向量就是这个数字的特征值。

在进行特征值比较前,我们需要对所有的数字(0-9,.)进行特征值的采集,并保存到数据库中。这个过程叫做训练。由于图像采集的结果,每个数字可能存在微小的差异,我们训练采集到的特征值越多,最后特征比较的结果就越准确。

 

Step3——特征值识别

比较两个向量,向量最接近的就是最相似的。

 

效果:

图像识别初识

阅读数 1787

图像识别过程

阅读数 598

没有更多推荐了,返回首页