一、欧氏距离
二维的公式
ρ = sqrt( (x1-x2)^2+(y1-y2)^2 )
三维的公式
ρ = sqrt( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 )
n维空间的公式
n维欧氏空间是一个点集,它的每个点 X 可以表示为 (x[1],x[2],…,x[n]) ,其中 x[i](i = 1,2,…,n) 是实数,称为 X 的第i个坐标,两个点 A = (a[1],a[2],…,a[n]) 和 B = (b[1],b[2],…,b[n]) 之间的距离 ρ(A,B) 定义为下面的公式。
ρ(A,B) =sqrt [ ∑( a[i] - b[i] )^2 ] (i = 1,2,…,n)
二、K均值算法
k均值(k-means)是聚类算法的一种,聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的。组内的相似性越大,组间差别越大,聚类就越好。
举个例子,在二维平面上有几百个点,在笛卡儿坐标系中有(x,y)坐标,把它们点到纸上,问题是如何把它们分成不同组,每个组里点彼此之前都比较相近,而离其它组的成员又比较远。下面介绍的k均值就能干这种事。
基本k均值
基本k均值思想很简单,首先,选择k个初始质心,其中k是用户指定的参数,即所期望的簇的个数。每个点被指派到最近的质心,而指派到一个质心的点集为一个簇。然后根据指派到簇的点,更新每个簇的质心。重复指派和更新步骤,直到簇不发生变化,或等价的,直到质心不发生变化。
三、特征提取
1、第一步,参照网上曾经有人的做法:
为简单起见,我们使用了最简单的图像特征——黑色像素在图像中的分布来进行训练和测试。首先,我们把图像规范化为 32*32 像素的图片,然后按 2*2 分切成 16*16 共 256 个子区域,然后统计这 4 个像素中黑色像素的个数,组成 256 维的特征矢量,如下是数字 2 的一个特征矢量:
0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 2 2 4 4 2 1 0 0 0 0 0 0 1 2 3 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 4 4 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 2 4 4 4 2 2 2 2 4 3 2 2 2 2 2 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4
相应地,因为我们只需要识别 0~9 共 10 个数字,所以创建一个 10 维的矢量作为结果,数字相应的维置为 1 值,其它值为 0。数字 2 的结果如下:0 0 1 0 0 0 0 0 0 0
核心代码为:
For m_i As Integer = 1 To 16
myinitwidth = myendwidth
myendwidth += jiange
For myi As Integer = myinitwidth To myendwidth
For myj As Integer = myinitheight To myendheight
mycolor = myybcominfo.mybitmap.GetPixel(myi, myj)
If mycolor.B = 0 And mycolor.R = 255 And mycolor.G = 0 Then
While (Not Monitor.TryEnter(mymonitorobj))
Thread.Sleep(1)
End While
myjgtz(mycount) += 1
Monitor.Exit(mymonitorobj)
Thread.Sleep(1)
End If
Next
Next
mycount += 1
myendwidth += 1
Next
2、在第一步的特征基础上进一步加工,加上位置信息,以位置做为权重,调整第一步的特征矢量,核心代码为:
For mi As Integer = 0 To 15
If myjgtz(mi) > 0 Then
pictz(myii, myjj, m_j) += mi * myjgtz(mi)
End If
myjgtz(mi) = 0
Next
3、第三步计算每个数字的K均值,核心代码为:
'计算K均值
Dim mmsum As Double = 0
For myii As Integer = 0 To 9
mystr &= vbCrLf & myii & "的样本均值是:" & vbCrLf
For myk As Integer = 0 To 15
mmsum = 0
For myjj As Integer = 0 To 9
mmsum += pictz(myii, myjj, myk)
ProgressBar1.Value = count
count += 1
Next
mmsum /= 10
ktz(myii, myk) = mmsum
mystr &= ktz(myii, myk) & ","
Next
mystr &= vbCrLf
Next
最后,进行待识别数字的特征值,然后进行欧氏距离对比
Dim jqtz(16) As Integer
'欧氏距离
Dim mys(10) As Integer
Dim temp As Integer = 1000000000
Dim jgnum As Integer = -1
For m_iii As Integer = 0 To 9
mys(m_iii) = 0
For m_jjj As Integer = 0 To 15
mys(m_iii) += Pow(ktz(m_iii, m_jjj) - jqtz(m_jjj), 2)
Next
If mys(m_iii) < temp Then
temp = mys(m_iii)
jgnum = m_iii
End If
Next
jg.Text = ""
For m_iii = 0 To 9
jg.Text &= m_iii & ":" & mys(m_iii) & vbCrLf
Next
jg.Text &= "结果是:" & jgnum
实验表明,算法有较高的识别率,进一步提高需要改进算法,对于仿宋的识别率最高,达90%,黑体、楷体等识别率也可以,手写数字,只要书写较规范,然后写的位置适当,在方框较中间,识别率较高,程序见附件,如果手写识别,建议使用手写的数字做为样本,这样识别率较高,如果是本机数字识别,可以自动生成样本数据。
- 大小: 125.5 KB
- 大小: 126.7 KB
- 大小: 126.5 KB
- 大小: 127 KB
- 大小: 125.7 KB
- 大小: 128.9 KB
- 大小: 129.6 KB
- 大小: 129.6 KB
- 大小: 129.3 KB
- 大小: 129.5 KB
- 大小: 128.9 KB
分享到:
相关推荐
通过使用OpenCV和vc实现欧氏距离模板匹配手写数字识别
NULL 博文链接:https://deepfuture.iteye.com/blog/1591481
基于matlab的手写数字识别,包括样品库及体征提取,识别率高
行业教育软件-学习软件-欧氏距离计算器 1.0.zip
K-Means算法是典型的基于距离的聚类算法,其中k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此,K-Means算法又称为k-均值算法。K-Means算法是一种基于划分的聚类算法,以...
定义了一个欧氏距离和监督信息相混合的新的最近邻计算函数,从而将K-均值算法很好地应用于半监督聚类问题。针对K-均值算法初始质心敏感的缺陷,用粒子群算法的搜索空间模拟聚类的欧氏空间,迭代搜索找到较优的聚类质心...
欧氏距离法识别数字。模板和数字差别不能太大。
基于欧氏距离的K-MEANS算法优化,李轮,宋文广,对于传统的K-means聚类算法而言,在使用上有太多的局限性。文中针对K-means算法,在基于欧氏距离相似度计算的基础上,利用现有的一些�
基于核的图像欧氏距离人脸识别.pdf
最短距离方法(Minimum Distance)是一种常用的模式识别算法,用于计算样本之间的相似度或距离。该方法通过计算样本之间的欧氏距离或其他距离度量,来确定样本之间的相似程度或差异程度。 最短距离方法的具体步骤...
pca方法提取的特征值,用欧式距离进行的分类器设计,进行人脸识别。
基于MATLAB编程实现手写数字识别算法,认识手写数字数据集,本实验用到的mnist手写数字数据集训练集包含60000张图片,测试...本程序为基于类中心欧氏距离的手写数字识别程序,可以计算识别算法的准确率和算法执行时间。
针对粗糙K-均值算法的执行效率较低和对数据对象的处理不准确问题,提出了基于加权距离计算的自适应粗糙K-均值算法。该算法在粗糙集理论应用的基础上修正数据集合的隶属度函数,结合属性约简方法,根据数据属性对聚类...
欧氏距离工具根据直线距离描述每个像元与一个源或一组源的关系。
北大-图像距离课件,包含一个PPT转换过来的PDF文件,内容包括图像距离,Hausdorff 距离,切距离,欧氏距离等 。
k-近邻的分类算法,距离函数分别为欧式距离 和Manhatan 距离。
本人原创的K均值聚类算法,可支持不限维度的多维空间点的聚类。以欧氏距离为相似度量,接口分离,易改写。采用JAVA语言实现。
VC手写数字识别可执行文件,基于欧氏距离的
基于Java实现手写汉字识别系统,不使用机器学习的方法,而是使用0-1矩阵的文件来保存手写体的字形,再通过欧氏距离计算出可能的字符,是一个比较简单的手写识别系统,可以比较准确的识别出大多数的常用汉字。...