9. KNN和Sparse构图
一、前言
图是一种重要的数据结构,本文主要表示图像的无向图。所谓无向图是指,图的节点间通过没有方向的边连接。
无向图的表示:
void SparseGraphic::KNNSparseGraphics(const QString fileName, const QPoint curPos,
const int K, QVector<QPoint> &resPoint, const int flag)
{
if(curPos.x()< || curPos.y()<)
return;
cv::Mat Img = GDALOpenCV::GDAL2Mat(fileName);
int row = Img.rows;
int col = Img.cols;
if(curPos.x()>=col || curPos.y() >= row)
return;
if(flag != && flag != )
return;
cv::Mat imgVec = Img.reshape(,row*col);
cv::transpose(imgVec,imgVec);
int curPosVec = curPos.y()*col + curPos.x();
cv::Mat Dict;
if(curPosVec != )
{
cv::Mat Dict1 = imgVec.colRange(,curPosVec-);
cv::Mat Dict1_T = Dict1.t();
cv::Mat Dict2 = imgVec.colRange(curPosVec,imgVec.cols);
cv::Mat Dict2_T = Dict2.t();
Dict1_T.push_back(Dict2_T);
cv::Mat Dict_T = Dict1_T.clone();
Dict = Dict_T.t();
Dict = Dict.clone();
Dict1.release();
Dict2.release();
Dict_T.release();
Dict1_T.release();
Dict2_T.release();
}else
{
cv::Mat Dict1 = imgVec.colRange(,imgVec.cols);
Dict = Dict1.clone();
Dict1.release();
}
cv::Mat curPosImgVec = imgVec.colRange(curPosVec-,curPosVec);
QVector<int> index;
for(int i = ;i<row*col;i++)
index.push_back(i);
index.removeAt(curPosVec); if(flag == )
{
cv::Mat tmpCurPosImgVec = cv::repeat(curPosImgVec,,Dict.cols);
cv::Mat subMat = Dict - tmpCurPosImgVec;
subMat = subMat.mul(subMat);
cv::sqrt(subMat,subMat);
cv::reduce(subMat,subMat,,CV_REDUCE_SUM);
QuickSort(subMat,index,,row*col-);
for(int i = ;i<K;i++)
{
int r = index[i]/col;
int c = index[i]%col;
QPoint mPos;
mPos.setX(c);
mPos.setY(r);
resPoint.push_back(mPos);
}
}else
{
QVector<int> tmpIndex;
cv::Mat A = ormpSparseRepresentation::ompSparseL2(Dict,curPosImgVec,tmpIndex,K);
for(int i = ;i<K;i++)
{
int r = index[tmpIndex[i]]/col;
int c = index[tmpIndex[i]]%col;
QPoint mPos;
mPos.setX(c);
mPos.setY(r);
resPoint.push_back(mPos);
}
}
}
三、显示

9. KNN和Sparse构图的更多相关文章
- PRML读书会第七章 Sparse Kernel Machines(支持向量机, support vector machine ,KKT条件,RVM)
主讲人 网神 (新浪微博: @豆角茄子麻酱凉面) 网神(66707180) 18:59:22 大家好,今天一起交流下PRML第7章.第六章核函数里提到,有一类机器学习算法,不是对参数做点估计或求其分 ...
- 深度学习与计算机视觉系列(2)_图像分类与KNN
作者: 寒小阳 &&龙心尘 时间:2015年11月. 出处: http://blog.csdn.net/han_xiaoyang/article/details/49949535 ht ...
- 机器学习笔记(5) KNN算法
这篇其实应该作为机器学习的第一篇笔记的,但是在刚开始学习的时候,我还没有用博客记录笔记的打算.所以也就想到哪写到哪了. 你在网上搜索机器学习系列文章的话,大部分都是以KNN(k nearest nei ...
- 美团店铺评价语言处理以及分类(tfidf,SVM,决策树,随机森林,Knn,ensemble)
第一篇 数据清洗与分析部分 第二篇 可视化部分, 第三篇 朴素贝叶斯文本分类 支持向量机分类 支持向量机 网格搜索 临近法 决策树 随机森林 bagging方法 import pandas as pd ...
- ISSCC 2017论文导读 Session 14: A 28nm SoC with a 1.2GHz Prediction Sparse Deep-Neural-Network Engine
A 28nm SoC with a 1.2GHz 568nJ/Prediction Sparse Deep-Neural-Network Engine with >0.1 Timing Erro ...
- 用KNN实现iris的4分类问题&测试精度
import matplotlib.pyplot as plt from scipy import sparse import numpy as np import matplotlib as mt ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- kd树和knn算法的c语言实现
基于kd树的knn的实现原理可以参考文末的链接,都是一些好文章. 这里参考了别人的代码.用c语言写的包括kd树的构建与查找k近邻的程序. code: #include<stdio.h> # ...
随机推荐
- [转] unix/linux下线程私有数据实现原理及使用方法
在维护每个线程的私有数据的时候,我们可能会想到分配一个保存线程数据的数组,用线程的ID作为数组的索引来实现访问,但是有一个问题是系统生成的线程 ID不能保证是一个小而连续的整数,并且用数组实现的时候 ...
- Android 打造形形色色的进度条 实现可以如此简单
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重 ...
- Linux命令vi/vim编辑
一.vi的基本概念基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:a) 命令 ...
- android内存优化之图片压缩和缓存
由于手机内存的限制和网络流量的费用现在,我们在加载图片的时候,必须要做好图片的压缩和缓存. 图片缓存机制一般有2种,软引用和内存缓存技术. 1.压缩图片:压缩图片要既不能模糊,也不能拉伸图片. 图片操 ...
- UILabel 的使用,属性详解
·UILable是iPhone界面最基本的控件,主要用来显示文本信息. ·常用属性和方法有: .创建 CGRect rect = CGRectMake(, , , ); UILabel *label ...
- onsubmit提交前先验证(验证不通过阻止form提交)
<form onsubmit = "return val();"> <input type="submit" value="提交& ...
- 洛谷 P1241 括号序列
P1241 括号序列 题目描述 定义如下规则序列(字符串): 1.空序列是规则序列: 2.如果S是规则序列,那么(S)和[S]也是规则序列: 3.如果A和B都是规则序列,那么AB也是规则序列. 例如, ...
- GTD:是一种态度
时间管理发展的四个阶段: 第一代理论着重利用便条与备忘录,在忙碌中调配时间与精力: 第二代理论强调行事历与日程表,反映出时间管理已注意到规划未来的重要: 第三代理论正是目前流行的优先级观念.也就是依据 ...
- Ruby和Rails开发环境安装
更新包管理 sudo apt-get update 安装curl sudo apt-get install curl *安装rvm via curl \curl -L https://get.rvm. ...
- CentoS7装机
按delete进入BIOS 选择UEFI 网上关于CentOS 7 的安装教程挺多的,但在前期的引导配置上很多都没有写清楚,让人很郁闷,以致于昨天安装的时候总是到不了安装界面.经过一番胡乱倒腾,终于找 ...