《OpenCV轻松入门》学习打卡第十天

第十八章 视频处理(暂定)

第十九章 绘图与交互(暂定)

第二十章 K近邻算法

该章会粗略的涉及到机器学习,当然是比较基础,也是比较简单的机器学习。K近邻算法虽然在实际运用中应用的较少,但是适合于新手入门机器学习

机器学习算法是从数据中产生模型,也就是进行学习的算法。 我们把经验提供给算法,它就能根据经验数据产生模型。在面对新的情况的时候模型就会为我们提供预判(预测)结果。从数据集中学得模型的这一过程称为学习(learning)或者训练(training)。在训练过程中所使用的数据称为训练数据,其中的每个样本称为训练样本,训练样本所组成的集合称为训练集。大多数的机器学习算法都来源于日常生活实践。K近邻算法是最简单的机器学习算法之一,主要用于将对象划分到已知类中,在生活中被广泛使用。
1.理论基础
K近邻算法的本质是将指定对象根据已知特征值分类。在实际的分类数据中往往参数特别多,因此为了提高算法的可靠性,在实施的时候会取k个近邻点,这k个点中属于哪一类的较多,然后将当前待识点划分为哪一类。为了方便判断,k值通常取奇数,这和为了能得到明确的投票结果通常将董事会成员安排成奇数的道理是一样的。
一般采用k近邻算法实现的具体步骤如下:
(1)对于各种类别收集一定数量的样例形成数据集
(2)确定几个用来识别类别的重要特征,并使用这些特征来标注不同类别的数据集里的样例。这样每数据集各有n个这样的特征值,得到不同类别的数值特征集
(3)计算待识别图像T的特征,并使用特征值表示图像T
(4)计算图像T的特征值与中各特征值之间的距离
(5)找出产生其中k个最短距离的样本点(找出离T最近的k个邻居),统计k个样本点中属于的样本点数目,属于哪个数据集的样本点最多,就将T确认为哪个类别的图像
以上就是K近邻算法的基本思想
2.计算
1)归一化
对于简单的情况,直接计算与特征值的距离(差距)即可,当有多个参数时,一般将这些参数构成列表(数组)进行综合判断。当然,在计算与特征值的距离时要充分考虑不同参数之间的权值。通常情况下,由于各个参数的量纲不一致等原因,需要对参数进行处理,让所有参数具有相等的权值。
一般情况下,对参数进行归一化处理即可。做归一化处理时,通常使用特征值除以所有特征值中的最大值(或最大值与最小值的差)
2)距离计算
在之前的讨论中,我们多次计算了距离。使用的方式是先将特征值中对应的元素相减,然后再求和。而为了避免正负抵消的情况,我们通常会计算绝对值的和。取绝对值以后再求和,这种用绝对值之和表示的距离叫做曼哈顿距离。像这种计算距离基本上已经满足要求了,但是还有更好的方法。更普遍的形式是计算平方和的平方根,这种距离就是被广泛使用的欧式距离
3.手写数字识别的原理
在实际应用中,可能存在着更多特征维度需要计算。手写数字识别的原理就是把手写的数字依次与每个数字的图像比较,计算距离,与哪个数字图像最近,就认为是什么数字

1)特征值提取
步骤1:把数字图像划分为很多小块,此外每个小块是由很多个像素点组成的,我们把这些小块记为B(Bigger),将B里面的像素点记为S(Smaller),所以可以将待识别的数字理解为一个个B组成
步骤2:计算每个小块B内,有多少个黑色的像素点
步骤3:为了处理上的方便,我们把得到的特征值排成一行(写成数组形式)
步骤4:与我们待识别的数字图像类似,每个数字图像的特征值都可以用一行数字来表示,一般来说,类似于我们的身份证号码,这一行数字具有唯一性
2)数字识别
数字识别要做的就是比较待识别图像与图像集中的哪个图像最近,这里指的是二者之间的欧氏距离最短。
上面介绍的是K近邻算法中只考虑一个近邻的情况,相当于K近邻中k = 1的情况
4.自定义函数手写数字识别
OpenCV提供了函数cv2.KNearest()用来实现K近邻算法,在OpenCV中可以直接调用高函数。为了进一步了解K近邻算法及其实现方式我们自己编写一个函数来实现这个
1)数据初始化
2)读取特征图像
3)提取特征图像的特征值
4)计算待识别图像的特征值
5)计算待识别图像与特征图像之间的距离
6)获取k个最短距离及索引
7)识别

手写数字识别就相当于机器学习的Hello world,关于如何建立模型,有很多教程,我建议大家可以去看看斋藤康毅的《深度学习入门:基于Python的理论与实现》1

到此为止,这本书的学习笔记就暂时结束了。这本书对于OpenCV库讲解的比较全面,也深入浅出的给我们介绍了一些函数原理。我认为还是需要结合项目实际来运用,不然很快就会慢慢遗忘。大家可以网上找找资源或者自己动手想想实现一个小小的图像分割提取的任务,这样能加深自己对函数的理解和效果,也能加深记忆。无他,但手熟尔。

若有侵权,请联系删除

本读书笔记来源于教材。2


  1. 斋藤康毅. 深度学习入门:基于Python的理论和实现[M]. 北京. 人民邮电出版社: 斋藤康毅著. 陆宇杰译. 2019.7 ↩︎

  2. 李立宗. OpenCV轻松入门: 面向python[M].北京. 电子工业出版社: 李立宗. 2019.5 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值