更多内容参考:原创文章作者:无敌三角猫。如若转载,请注明出处:古月居 https://www.guyuehome.com/37111

1.颜色识别

  • 该程序利用KNN实现魔方颜色识别,特征采用RGB的颜色直方图,它可以区分白、黑、红、绿、蓝、橙色、黄色和紫色,如果你想分类更多颜色或者提高分类准确率,可以通过调整训练集数据或者考虑使用其他的特征如**颜色矩)**或者颜色相关图

  • 你可以使用color_recognition_api实现实时的颜色识别,作者提供了两种识别方式,一种是摄像头实时识别颜色(color_classification_webcam.py),

另一种实现对单张图片的颜色识别(color_classification_image.py )

  • 该程序实现的功能:

    1. 特征提取:对训练集图像提取RGB颜色直方图特征。
    2. 训练KNN分类器:通过RGB颜色直方图值训练KNN分类器
    3. 通过训练好的KNN分类器分类:逐帧读取摄像头,对每帧图像进行特征提取,最后通过训练好的KNN分类器判别物体的颜色。
  • TODS:

    1. 添加新颜色。
    2. 提取新特征。
    3. 添加新分类器。

2.理论介绍

  • 在这个研究中,我们使用KNN分类器算法,分类器通过图像的RGB颜色直方图值进行训练,整体的工作流程如下图所示:
  • 对于基于机器视觉机器学习的目标检测或识别系统,应该了解两个核心点:1.特征提取(即在图片中如何表示感兴趣的特征,并与其他特征进行区分);2.分类(实现分类的算法,特别是在具体的实现中,我们称为分类器,这个分类器有时是指一个数学公式,由输入数据指向类别。)

  • 对于该项目来讲:

    1. 特征提取=颜色直方图:颜色直方图是图像中一种颜色的分布表示,对于数字图像而言,颜色直方图表示一个固定的颜色范围列表中,每个颜色范围中有像素的数量,这些颜色范围跨越图像的颜色空间,即所有可能的颜色的集合。
    2. 分类器KNN算法:KNN算法是一种简单的算法,他存储了所有可用的案例,并根据相似度距离来对新的案例进行分类(例如距离函数),KNN是一种1970年代的非参数技术,常被用于统计估计和模式识别。

3.代码实现

OpenCV库被用于颜色直方图计算和KNN分类器,Numpy用于矩阵或N维数组的计算,这个程序是在Linux环境下用Python开发的。

在“src”目录下,有两个Python类:

  • color_classification_webcam.py:测试类从网络摄像头实现实时颜色识别。
  • color_classification_image.py:测试类实现对单张图像的颜色识别。

在“color_recognition_api”目录下,有两个Python类:

  • feature_extraction.py :特征提取操作类。
  • knn_classifier.py:KNN分类器。

feature_extraction.py特征提取类的解释:

我们可以通过该Python类实现获取图像的RGB颜色直方图,例如绘制红色图像的RGB颜色直方图

  • 我决定使用直方图的RGB通道像素数量最大的对应的Bin Number来作为特征,因为我可以得到占主导地位的RGB值来创建特征向量用于训练,例如这个红色图像的占主导地位的RGB值是[254,0,2]。
  • 对于每个训练图像,使用颜色直方图我获得了占主导地位的RGB的值,然后给他们打上标签,这是因为KNN是有监督学习,然后我将这些特征向量部署到csv文件当中,因此,我创建了我的训练特征向量数据集,它保存在src目录下training.data。

knn_classifier.py注释:

这个类提供了这些主要的计算;

  • 获取训练数据。
  • 获取测试图像特征。
  • 计算欧式距离。
  • 找到K个最近邻点。
  • 预测颜色。
  • 返回预测是否正确。

color_classification_webcam.py注释:它是我们这个程序的主要类,它提供了一下功能:

  • 调用 feature_extraction.py 创造训练数据。
  • 调用knn_classifier.py)用于分类。

4结论

  • 我认为训练数据对于分类准确率有重要的影响,我非常仔细的创建了我的训练数据集,但是如果有更合适的数据集,可能效果更好。
  • 另一个重要的影响是闪光和阴影,在我的测试图像中,在光线较差或者阴影下拍摄的图片被分类错误,也许一些滤波算法可以提前处理一下测试图像,然后送给KNN分类器,以提高分类的准确性。

【颜色识别】【Python+OpenCV】KNN(K近邻算法)实现魔方颜色识别【 3-1】相关推荐

  1. knn K近邻算法python实现

    本文主要内容: knn K近邻算法原理 sklearn knn的使用,以及cross validation交叉验证 numpy 实现knn knn改进方法 1 knn K近邻算法原理 K近邻算法:给定 ...

  2. Python实现KNN(K近邻)回归模型(KNeighborsRegressor算法)并应用网格搜索算法寻找最优参数值项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 K近邻算法回归模型则将离待预测样本点最近的K个训练样本点的平均值 ...

  3. 【20210922】【机器/深度学习】KNN (K近邻) 算法详解

    一.算法概念 KNN, K-near neighbor,即最近邻算法.它是一种分类算法,算法思想是:一个样本与数据集中的 k 个样本最相似,如果这 k 个样本中的大多数属于某一个类别,则该样本也属于这 ...

  4. 【机器学习实战】k近邻算法实战——手写识别系统

    文章目录 手写识别系统 步骤: 准备数据:将图像转换为测试向量 测试算法:使用k-近邻算法识别手写数字 [完整代码] 手写识别系统 为了简单起见,这里构造的系统只能识别数字0到9,参见图2-6.需要识 ...

  5. opencv的K近邻算法

    K Nearest Neighbors 计算待测数据与样本库中每个样本的距离,得到距离最小的前K个,进行投票表决,前K个中某一类的样本数最多,则判断待测数据为此类. 一.opencv 中主要的函数有: ...

  6. python机器学习---1. K近邻算法

    机器学习的方法是基于数据产生的"模型" (model) 的算法,也称"学习算法" (learning algorithm).包括有监督学习(supervised ...

  7. knn(k近邻算法)——matlab

    目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 读取数据 4.2 分离训练集和测试集 4.3 归一化处理 4.4  ...

  8. KNN K近邻算法学习

    KNN算法.k-nearest neighbor,或者K-近邻算法是一种经典的机器学习算法,可以完成分类和回归任务. KNN算法主要思想: 对于输入的特征X,选取与他记录最近的K个点,统计这K个点所属 ...

  9. K近邻算法KNN的简述

    什么是KNN K近邻算法又称KNN,全称是K-Nearest Neighbors算法,它是数据挖掘和机器学习中常用的学习算法,也是机器学习中最简单的分类算法之一.KNN的使用范围很广泛,在样本量足够大 ...

  10. 【模式识别】实验二:K近邻算法(KNN)

    KNN是模式识别中的经典算法,本次实验就MNIST数据集来做KNN算法的实验,并结合前一次的LDA降维对数据进行进一步处理. 实验报告图片版 pdf版本可以戳这:模式识别实验报告:KNN K近邻算法 ...

最新文章

  1. 通过异或运算符加密解密 难度二星
  2. Java新手看招 常用开发工具介绍
  3. linux下安装mysql笔记
  4. 一个命名管道可以被多个客户端访问吗_Redis 的事务机制和管道技术Pipelining
  5. .NET做人脸识别并分类
  6. 化工原理物性参数_化工原理知识点总结整理
  7. python 程序停止打印日志_停止 Spring Boot 服务的几种优雅姿势
  8. mysql jdbc 单利_java单利模式设计
  9. FPGA系统时间戳偶尔异常分析及定位
  10. 05章 体检套餐管理系统
  11. 110个oracle常用函数总结(7),oracle110个最常用函数
  12. 教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor
  13. linux 播放器系统,Linux 中的十大开源视频播放器
  14. 基于深度学习的图像篡改识别
  15. echarts动态循环出多个相同图表但不同数据动态渲染图表
  16. c语言around用法,around 的用法
  17. 使用Java对PDF进行电子签章
  18. Windows上解除宽带限速(网速明显提升)
  19. pyspark 数据类型转换_apache spark-将pyspark字符串转换为日期形式
  20. Mac版docker安装

热门文章

  1. Python socket.send()与socket.sendall()的区别
  2. 01. View C++ as a federation of languages
  3. 归并排序MergeSort
  4. 堆排序HeapSort
  5. c# export server 调用sql_C# 如何调用 SPL 脚本
  6. long 雪花算法_Snowflake 雪花算法
  7. 人脸图像特征提取方法(HOG、Dlib、CNN)简述
  8. mysql 5.1 开启慢查询_mysql开启慢查询
  9. recyclerview 横向卡片效果_UI设计中卡片式应如何设计
  10. vbs比较两个数组里的数的大小_BAT 高频面试题:寻找两个有序数组的中位数