PCA对特征点描述子降维

降维在机器学习领域其实是很重要的一部分,因为在高维情形下回出现样本稀疏,计算距离、内积困难,是所有机器学习面临的共同问题,被称为维数灾难(Curse of dimensionality),而降维就是解决的一个办法,它不仅让运算量变简单,还因为将原始数据投影在主特征分量上可以抵抗一些噪声的干扰。因为想通过降维来缩小图像配准过程中特征点匹配的运算量,也在公众号机器学习算法工程师中看到了一些降维的方法,比如PCA、核化(kernelized,应该就是核机制吧,实现非线性降维)、流行学习、度量学习。当然最成熟的还是PCA,虽然很早就出现了PCA-SIFT,但还是想先自己动手实现一下。思路是先导出Lowe格式的特征点txt文件,然后再在import的时候修改函数降维,写入descr_pca数组中再导出,得到64维的特征点。这时再导入降维之后的数据,通过这些数据来实现图像配准。

这时候就又出现问题了,构建kd树的过程很慢,而且无法得到配准结果。后来才意识到自己用的boat的图像的特征点数据却在实验中用的beaver图像,当改正这个错误,并且导入原始的特征点数据后做实验,结果匹配对的错误率很高,怀疑是不是因为stack_imgs把两幅图像显示在一起,造成坐标变换的原因。但是最起码img1部分的特征点应该正常啊,现在的情况是完全不对。。

从调试情况来看,import部分没有问题,第一个点都是(254,297),对应的第二幅图中检测到的是(134,258),与txt中的数据吻合。在Lowe格式的txt特征点文件中,第一行是特征点个数和描述子维数,对每一个特征点,第一行四个数据依次是特征点的y坐标,x坐标,特征点的尺度,特征点的方向,然后是128个double型数字https://blog.csdn.net/masibuaa/article/details/9204157。问题似乎出在构建kd树之后的寻找匹配对的过程中。Kd树是对图2的特征点feat2构建的,对feat1中的特征点遍历,在kd树中寻找对应的匹配点。找到的第一对是(3,15)-(4,20).

源码,尤其是c语言,对指针的运用真的是好复杂。如下,在导入特征点中和对kd树中进行knn查找的过程中分别有两重指针和三重指针。

static int import_lowe_features( char*filename, struct feature** features )//静态函数,不能被其他文件使用,所以其他文件也可以有相同的函数名

int kdtree_bbf_knn( struct kd_node*kd_root, struct feature* feat, int k,

                       struct feature*** nbrs, int max_nn_chks )

在import_lowe_features函数中,有下面关键的两句:

f = calloc( n, sizeof(struct feature) );//在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针

*features = f;//相当于feature=&f??把features复数指向f //首地址赋给*features

于是,将import_features(path1, 1, &feat1);改为import_features(path1,1, import_feat1);//第三个参数是指针的指针,struct feature** import_feat1=NULL//初始化,运行的时候异常。

看来还是要用&feat1,因为源码中原始的特征点检测也是这么写的:n1 = sift_features( img1, &feat1 );

后来发现在   feat = feat1 + i;//指针的加法 之前,动态分配长度为n的内存之后,fscanf坐标值的时候就出错了。fscanf读取txt文件,要求txt文件编码方式为ANSI,这个没有出错。

fscanf( file, " %lf %lf %lf %lf", &y, &x, &s, &o ) != 4 )//%lf是double类型输入 fscanf返回读取的长度

两个格式控制符%lf之间是空格,适用于数据之间是空格,若数据之间是逗号,格式控制符之间也是逗号,这个也没有出错。

结果,尴尬了,一步步调试,看第一个特征点的各个参数,坐标是对的,一个个看128维描述子,发现到64的时候就跳变为第二个特征点了。真相大白,原来是自己在做导入降维后的txt文件时把d修改为64,在这里验证128维的时候忘记改回去了。。

如下是按照lowe格式导入特征点信息做的图像配准:


其中特征点导入费时4s左右。

这是直接对图像做的特征点检测和配准:


其中特征点检测就耗时26s

回头再看导入64维的描述子。速度奇慢,且无法完成配准。报错说找到的匹配对太少。打开降维后的txt文件:

7875 64

297.440434 254.241265 80.338874 -1.866019

 2 01 0 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0

 0 00 0 3 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0

 -1 00 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0

 0 00 0

557.449920 181.560168 42.599985 1.464965

 4 -10 -1 0 0 0 3 0 0 1 0 0 0 0 0 -1 -1 0 0

 0 00 0 0 -2 1 0 0 0 0 0 3 1 -1 1 0 0 0 1

 0 21 0 0 0 0 -1 -3 0 -1 0 0 0 0 -1 -2 0 0 0

 0 00 -1

可以看到64个特征数据,分为20*3+4.而在导入的时候,特征点的坐标是取一行四个数值那行的前两个值的,这样就会把一部分描述子也误当做坐标值和尺度大小即梯度。

Pcad 过程中对特征值和特征向量的行列数还是认识不够,最后将result写成方阵才不中断。后来导出成了4*4维的描述子。这样再导入到程序中来配准,找到500多个匹配对,但是画不出匹配的连线。调试过程中发现匹配对也不正确,会不会是降维后kd树中查找knn中阈值也要改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java快速获取大图片的分辨率(大图片格式JPG,tiff ,eg)

问题描述:怎样快速获取一个20MB图片的分辨率? 程序代码: 1 package test;2 3 import java.awt.Dimension;4 import java.awt.image.BufferedImage;5 import java.io.File;6 import java.io.IOException;7 import java.util.Iterator;8 import…

C语言基础知识整理

一、 关于sizeof和strlen。Sizeof()用于计算某类型或者某变量在内存中所占空间。比如整数分为short型,int型,long整型,分别占2,2/4,4个字节,int型具体占用几个字节和编译系统有关。我们输入字符串时通常用c…

【2017-2019】Gartner战略技术趋势一览

来源:学术plus 、装备参考近期,Gartner公布了2019年十大战略技术趋势的预测,值此之际,本文总结回顾并简要分析了2017-2019三年的战略趋势变化。Gartner副总裁兼研究员David Cearley指出:在智能、数字、网格三大领域下的…

[wikioi]多源最短路

http://wikioi.com/problem/1077/ Floyd算法。精华是三层循环&#xff0c;if (dist(i,k) dist(k,j) < dist(i,j)) then dist(i,j) dist(i,k) dist(k,j)。 但循环的顺序必须k放在最外层&#xff0c;否则会错&#xff0c;因为有可能赋值给dist(i,j)的dist(i,k)和dist(k,j)都…

目标检测必看——RCNN是怎样融合了分类与回归,CNN与SVM

人和动物的区别之一是人能使用工具&#xff0c;而在人开始使用磨制石器时人类进入新石器时代。在目标检测领域&#xff0c;也有一个划时代的算法&#xff0c;在它之后目标检测开始进入深度学习的时代——它就是今天的主角&#xff1a;R-CNN。在RCNN之后&#xff0c;出现了更多优…

《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择

来源&#xff1a;36Kr电车难题原本只是一个思想实验。但是无人车的发展却绕不开这个问题。因为机器在无论如何都会撞死人的情况下必须靠预先植入的道德代码做出判断&#xff1a;该牺牲谁&#xff0c;该保谁。但是一项有全球230万人参与的调查表明&#xff1a;这个问题并不存在普…

Mac OS X Terminal 101:终端使用初级教程

文章目录1 为什么要使用命令行/如何开启命令行&#xff1f;2 初识Command Line3 关于 man 命令4 命令行&#xff0c;文件和路径 4.1 两种路径&#xff1a;绝对路径和相对路径4.2 切换到其他路径和目录4.3 处理特殊字符4.4 查看隐藏文件4.5 前往其他卷5 用Command-Line管理文件 …

Fast R-CNN整体把握

RCNN很好地解决了目标检测分类和定位的问题。但是缺点是速度太慢。 原因1&#xff1a;2k个候选区域都要经过变形成统一的正方形才能依次输入CNN进行特征提取。候选区域可能是互相包含的&#xff0c;这就导致原图同一个区域特征的重复提取。 原因2&#xff1a;RCNN的分类和回归…

2万字看完腾讯最纯粹的一届WE大会:从黑洞、虫洞到克隆猴

来源&#xff1a;虎嗅APP腾讯还有梦想&#xff0c;因为腾讯还有WE大会。5年来&#xff0c;腾讯从全世界邀请了几十位难得一见的科学家不远万里来到北京展览馆&#xff0c;比如去年邀请的剑桥大学教授、著名宇宙学家霍金&#xff08;视频演讲&#xff09;&#xff0c;不想成为绝…

深入浅出MongoDB(二)概述

上次的博文深入浅出MongoDB&#xff08;一&#xff09;NoSQL中我们已经简单介绍了一下NoSQL的基本概念&#xff0c;这次我们来了解一下MongoDB的相关概念。 1、简介 MongoDB是一款由C编写的高性能、开源、无模式的常用非关系型数据库产品&#xff0c;是非关系数据库当中功能最…

Fater R-CNN 整体把握

在R-CNN中提到过&#xff0c;候选区域的提取和之后的目标检测其实是独立的&#xff0c;所以我们可以使用任意的算法如SS。Fast-RCNN改进的是目标检测部分&#xff0c;但是其实候选区域的提取也挺费时的&#xff0c;Faster R-CNN就把改进方向放在了这里。 我们已经领略到了CNN的…

马斯克,特斯拉首席小白鼠

来源&#xff1a;量子位伊隆马斯克&#xff0c;比你想的还要激进。作为特斯拉CEO&#xff0c;马斯克经常一边自己坐在Model S上&#xff0c;一边召开电话会议。车辆的驾驶交给Autopilot&#xff0c;也就是那个时不时会出次意外的自动驾驶系统。他这么做不仅仅是想节约时间&…

每天进步一点点:andriod学习从零开始

第一章 前引 滚滚长江东逝水   浪花淘尽英雄   是非成败转头空   青山依旧在   几度夕阳红   白发渔樵江渚上   惯看秋月春风   一壶浊酒喜相逢   古今多少事   都付笑谈中   智能的机操作系统经过多盘厮杀&#xff0c;到现在形成了三足鼎…

windows下caffe+CPUOnly实现MNIST手写分类

工具下载 微软官方移植的Caffe&#xff1a;https://github.com/Microsoft/caffe 对属性表的操作需要把实例属性表的后缀改成vs可用的.props 打开同一个文件夹下的Caffe.sln&#xff0c;查看其中的属性表<CpuOnlyBuild>true</CpuOnlyBuild><UseCuDNN>false<…

Yann LeCun专访:我不觉得自己有天分,但是我一直往聪明人堆里钻

来源&#xff1a;AI 科技评论摘要&#xff1a;纽约大学教授、Facebook 副总裁与首席 AI 科学家 Yann LeCun 由于对深度学习的突出贡献&#xff0c;被誉为深度学习的「三驾马车」之一&#xff0c;更被称为「CNN」之父。Yann LeCun 也一直非常活跃&#xff0c;发论文、教学、创立…

任务分配调整

在经过新一轮分工讨论后&#xff0c;我们将我们最初的分工做了一次更新。截图于此。但是同样&#xff0c;基于敏捷开发的原则&#xff0c;任务将会在过程中为适应遇到的情况而不断更新。 请大家及时完成各自任务&#xff0c;并每天22点之前在tfs上更新完毕&#xff0c;同时将当…

以LeNet-5为例理解CNN

在用caffe实现对MNIST手写数字分类的过程中发现利用的网络是LetNet-5.决定从这个网络入手好好认识一下CNN。 LeNet-5早在1998年就出现了&#xff08;5表示5层模型&#xff09;&#xff0c;标志着CNN的诞生。以其作者YannLeCun的名字命名。但是却没有得到广泛的应用&#xff0c;…

设置IE默认文本模式的方法

设置IE默认文本模式的方法 <meta http-equiv"X-UA-Compatible" content"IE8" /> IE5、6、7等都可以&#xff0c; 如果要让IE浏览器默认以最高级别文本模式显示&#xff0c;设置 IEedge 转载于:https://www.cnblogs.com/wshiqtb/p/3393653.html

任正非最新谈话:直到2006年,我才真正抛弃自杀的念头

来源&#xff1a;世界科技创新论坛摘要&#xff1a;日前&#xff0c;一份任正非会见索尼CEO吉田宪一郎会谈纪要流出&#xff0c;这份纪要以吉田宪一郎发问任正非的视角&#xff0c;揭开了不少华为鲜为人知的故事&#xff0c;其中涉及华为的管理、创业之初的故事&#xff0c;还有…

LeNet网络配置文件 lenet_train_test.prototxt

.prototxt文件 定义了网络的结构&#xff0c;我们可以通过它了解网络是如何设计的&#xff0c;也可以建立属于自己的网络。这种格式来源于Google的Protocol Buffers&#xff0c;后来被开源&#xff0c;主要用于海量数据存储、传输协议格式等场合。https://blog.csdn.net/liuyuz…