最近学习了人体姿态的相似性评价。需要用到KNN来统计与当前姿态相似的k个姿态信息。

假设我们已经有了矩阵W和给定的测试样本姿态Xi,需要寻找与Xi相似的几个姿态,来估计当前Xi的姿态标签。

//knn操作
//读入一帧测试帧 去训练集里面求距离
/*
1、计算已知类别数据集合汇总的点与当前点的距离
2、按照距离递增次序排序
3、选取与当前点距离最近的K个点
4、确定距离最近的前K个点所在类别的出现频率
5、返回距离最近的前K个点中频率最高的类别作为当前点的预测分类
*/

//knn操作
//读入一帧测试帧 去训练集里面求距离
/*
1、计算已知类别数据集合汇总的点与当前点的距离
2、按照距离递增次序排序
3、选取与当前点距离最近的K个点
4、确定距离最近的前K个点所在类别的出现频率
5、返回距离最近的前K个点中频率最高的类别作为当前点的预测分类
*/
//test mat 输入是 1*60的或者1*n的 matrix需要平方。。才是马氏距离矩阵
//
int knn(vector<Mat>&trainSample, vector<int>&trainLabel, Mat &test, Mat& matrix, int k, string prefix)
{
int label,n = trainSample.size();
map<float, vector<int>>mp;//记录距离与训练集的索引 距离从小到大排列 ofstream of(prefix+"\\distance.txt"); for (int i = ; i < n;i++)
{
Mat diff = test - trainSample[i]; Mat dis = diff * matrix * matrix.t() * diff.t();//不开方了 cout <<i<<"距离---"<< dis << endl;
float distance = dis.at<float>(, ); of << distance << " ";
mp[distance].push_back(i);
}
of << endl;
of.close(); map<int,int>testLabel;//统计label出现次数
for (auto it = mp.begin(); it != mp.end() && k>;it++)
{
for (int j = ; j < it->second.size() && k>; j++)
{
testLabel[trainLabel[it->second[j]]]++;
k--;
}
}
int temp = ;//找到出现次数最多的label作为测试的标签
for (auto it = testLabel.begin(); it != testLabel.end();it++)
{
if (temp < it->second)
{
label = it->first;
temp = it->second;
}
}
return label;
}

如下是准备训练和测试数据,并评估当前knn实验结果。

//测试一下knn是否跑通 跑正确
//
void testknn()
{
vector<Mat> trainSample, testSample;
vector<int> trainLabel, testLabel;
string prefix = "E:\\laboratory\\dataset\\synthesisdata\\mypartresults";
int row = , col = ;//groundtruth是60=20*3列 聚类特征是22*3=66
int k = ;
int label,correct=; Mat matrix = InitMat("E:\\code_bsm\\bsm\\W_bsm_d=5_kc=1_kr=0.1_eps1=0.0001_eps2=1e-06.txt", , , false, label);
getTrainAndTestData(trainSample, testSample, trainLabel, testLabel, prefix, row, col); for (int i = ; i < testSample.size();i++)
{
label = knn(trainSample, trainLabel, testSample[i], matrix, k,prefix);
if (label == testLabel[i])
{
correct++
;
}
}

cout << correct << "/" << testSample.size() << endl;
}

参考文献:

辛永佳. 基于分层稀疏表示模型的人体姿态和行为相似性度量[D]. 北京工业大学, 2016.

人体姿态的相似性评价基于OpenCV实现最近邻分类KNN K-Nearest Neighbors的更多相关文章

  1. 快速人体姿态估计:CVPR2019论文阅读

    快速人体姿态估计:CVPR2019论文阅读 Fast Human Pose Estimation 论文链接: http://openaccess.thecvf.com/content_CVPR_201 ...

  2. Java基于opencv实现图像数字识别(二)—基本流程

    Java基于opencv实现图像数字识别(二)-基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条:来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程. 我做的主要 ...

  3. Facebook提出DensePose数据集和网络架构:可实现实时的人体姿态估计

    https://baijiahao.baidu.com/s?id=1591987712899539583 选自arXiv 作者:Rza Alp Güler, Natalia Neverova, Ias ...

  4. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  5. 人体姿态和形状估计的视频推理:CVPR2020论文解析

    人体姿态和形状估计的视频推理:CVPR2020论文解析 VIBE: Video Inference for Human Body Pose and Shape Estimation 论文链接:http ...

  6. [转载]卡尔曼滤波器及其基于opencv的实现

    卡尔曼滤波器及其基于opencv的实现 源地址:http://hi.baidu.com/superkiki1989/item/029f65013a128cd91ff0461b 这个是维基百科中的链接, ...

  7. 基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)

    GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的 ...

  8. 基于OpenCv的人脸检测、识别系统学习制作笔记之一

    基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...

  9. 基于opencv网络摄像头在ubuntu下的视频获取

     基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参 ...

随机推荐

  1. 【转】CPU与内存的那些事

    下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址: ...

  2. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理) 转

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...

  3. [extjs(2)] extjs第一个组件treepanel

    刚刚在接触extjs这个前段插件,由于公司是用这个来做前段的,所以有必要花点时间来掌握一下,下面是我自己的非常浅的学习总结,后期会慢慢添加的!! 一.TreePanel基本配置参数: animate: ...

  4. svn 提交 working copy is not up-to-date

    svn在提交时报错信息如下: working copy is not up-to-date svn:commit failed(details follow): svn:file "xxxx ...

  5. 【机器学习实战】第 10 章 K-Means(K-均值)聚类算法

    第 10 章 K-Means(K-均值)聚类算法 K-Means 算法 聚类是一种无监督的学习, 它将相似的对象归到一个簇中, 将不相似对象归到不同簇中.相似这一概念取决于所选择的相似度计算方法.K- ...

  6. Bluetooth A2DP --Audio payload type

    数据结构: 字段解释: payload type: 0x60(96), dynamic type type 定义: https://www.iana.org/assignments/rtp-param ...

  7. HTML5须知十件事

    英文原文:10 things you should know about HTML5 一两年前,HTML5似乎还是一个模糊的概念,只有少数几个互联网的书呆子才会关心.而现在,却感觉仿佛HTML5无所不 ...

  8. [译]ASP.NET Core 2.0 视图引擎

    问题 如何在ASP.NET Core 2.0中使用Razor引擎来创建视图? 答案 新建一个空项目,修改Startup.cs,添加MVC服务和请求中间件: public void ConfigureS ...

  9. L2-2. 链表去重

    L2-2. 链表去重 时间限制300 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的 ...

  10. Easy UI下拉列表默认选中(多行)与为文本框赋值

    1.为单行文本框赋值 var data2 = $('#LoadArea').combobox("getData"); if (data2) { $('#id).combobox(' ...