资讯专栏INFORMATION COLUMN

opencv python K最近邻

ThinkSNS / 2731人阅读

Understanding k-Nearest Neighbour

我们将Red系列标记为Class-0(由0表示),将Blue 系列标记为Class-1(由1表示)。 我们创建了25个系列或25个训练数据,并将它们标记为0级或1级.在Matplotlib的帮助下绘制它,红色系列显示为红色三角形,蓝色系列显示为蓝色方块.

import numpy as np
import cv2
import matplotlib.pyplot as plt

# Feature set containing (x,y) values of 25 known/training data
trainData = np.random.randint(0,100,(25,2)).astype(np.float32)

# Labels each one either Red or Blue with numbers 0 and 1
responses = np.random.randint(0,2,(25,1)).astype(np.float32)

# Take Red families and plot them
red = trainData[responses.ravel()==0]
plt.scatter(red[:,0],red[:,1],80,"r","^")

# Take Blue families and plot them
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:,0],blue[:,1],80,"b","s")

plt.show()

接下来初始化kNN算法并传递trainData和响应以训练kNN(它构造搜索树).然后我们将对一个new-comer,并在OpenCV的kNN帮助下将它归类为一个系列.KNN之前,我们需要了解一下我们的测试数据(new-comer),数据应该是一个浮点数组,其大小为numberoftestdata×numberoffeatures.然后找到new-comer的最近的邻居并分类.

newcomer = np.random.randint(0,100,(1,2)).astype(np.float32)
plt.scatter(newcomer[:,0],newcomer[:,1],80,"g","o")

knn = cv2.ml.KNearest_create()
knn.train(trainData, cv2.ml.ROW_SAMPLE, responses)
ret, results, neighbours ,dist = knn.findNearest(newcomer, 3)

print( "result:  {}
".format(results) )
print( "neighbours:  {}
".format(neighbours) )
print( "distance:  {}
".format(dist) )

plt.show()

输出:

result:  [[1.]]

neighbours:  [[1. 1. 0.]]

distance:  [[ 29. 149. 160.]]

上面返回的是:

newcomer的标签,如果最近邻算法,k=1

k-Nearest Neighbors的标签

从newcomer到每个最近邻居的相应距离

如果newcomer有大量数据,则可以将其作为数组传递,相应的结果也作为矩阵获得.

newcomers = np.random.randint(0,100,(10,2)).astype(np.float32)


plt.scatter(newcomers[:,0],newcomers[:,1],80,"g","o")

knn = cv2.ml.KNearest_create()
knn.train(trainData, cv2.ml.ROW_SAMPLE, responses)
ret, results, neighbours ,dist = knn.findNearest(newcomers, 3)

print( "result:  {}
".format(results) )
print( "neighbours:  {}
".format(neighbours) )
print( "distance:  {}
".format(dist) )

plt.show()

输出:

result:  [[1.]
 [0.]
 [1.]
 [0.]
 [0.]
 [0.]
 [0.]
 [0.]
 [0.]
 [0.]]

neighbours:  [[0. 1. 1.]
 [0. 0. 0.]
 [1. 1. 1.]
 [0. 1. 0.]
 [1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 0.]
 [0. 1. 0.]
 [0. 0. 0.]
 [0. 0. 1.]]

distance:  [[ 229.  392.  397.]
 [   4.   10.  233.]
 [  73.  146.  185.]
 [ 130.  145. 1681.]
 [  61.  100.  125.]
 [   8.   29.  169.]
 [  41.   41.  306.]
 [  85.  505.  733.]
 [ 242.  244.  409.]
 [  61.  260.  493.]]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42107.html

相关文章

  • OpenCV闯关记——kNN算法在OpenCV中的实践

    摘要:什么是算法邻近算法,或者说最近邻,分类算法是数据挖掘分类技术中最简单的方法之一。方法在类别决策时,只与极少量的相邻样本有关。 什么是kNN算法 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。kNN算法的核心思想是如果一个样本在特征...

    baihe 评论0 收藏0
  • Python:SIFT算法的实现

    摘要:安装我们可以使用库中的函数实现,但由于专利保护,很多版本的库已无法提供该函数,目前仅版本的库可使用此函数。算法选择其中最优的四个点程序结果 本文侧重于如何使用Pyt...

    Lsnsh 评论0 收藏0
  • 验证码破解技术四部曲之环境搭建篇(一)

    摘要:最容易破解的验证码直接使用库识别。验证码使用卷积神经网络训练识别。说明项目源码可以帮我点个开发语言编写爬虫编写图像处理部分以及机器学习算法开发环境依赖库环境搭建安装安装安装安装的库安装的库下载项目源码 前言 转眼就变成大四狗了,大学期间做的比较深入的技术是爬虫,但是爬虫也有很多高级的技术没有涉及,比如说验证码的破解便是其中之一,再加上我对其非常感兴趣,于是乎,开始苦学图像处理、学习机器...

    Null 评论0 收藏0
  • 使用深度学习进行自动车牌检测和识别

    摘要:在智能设备中,提到了车辆牌照检测和识别系统。道路安全该系统用于检测超过一定速度的车牌,将车牌读取系统与道路雷达耦合。车牌检测为了检测许可证,我们将使用基于卷积神经网络的深度学习对象检测体系结构。为确保正确分割,必须执行初步处理。 点击上方小白学视觉,选择加星标或置顶 重磅干货,第一时间送...

    fsmStudy 评论0 收藏0
  • opencv python 特征匹配

    摘要:匹配器匹配非常简单,首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行描述符距离测试,最后返回距离最近的关键点对于匹配器,首先我们必须使用创建对象。 Feature Matching Brute-Force匹配器 Brute-Force匹配非常简单,首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行(描述符)距离测试,最后返回距离最近的关键点. 对于...

    macg0406 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<