请教如何在cuda中实现求解矩阵的特征值

baidu_35844392 2016-08-11 09:19:17
矩阵式复数对称矩阵,只要求出最大的两个特征值和特征向量就行,拜托大神指点

另外,好像有cula这么个库,不知道有没有大神用过
...全文
1621 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxiaoccen 2016-12-26
  • 打赏
  • 举报
回复
现成的肯定有吧。 就算没有,矩阵向量乘法肯定有,你用一下幂迭代法就能求出最大特征值和特征向量。 因为你的要求不高,挺好弄得。
【资源说明】 基于C和C++实现的单目多视图立体重建系统源码+项目说明.zip * 数据读取 * 特征点提取和匹配 * 稀疏重建,生成稀疏点云以及估计视图位姿 * 稠密重建,生成每张视图对应的深度图(这里可以进一步生成稠密点云,通过深度图) 数据读取 主要读取输入视图数据,对于无内参的图形,并估计内参(采用张正友相机标定法)。 特征点提取和匹配 * 特征点提取,本项目采用两种特征提取方法,STIF算法和ORB,你可以根据自己的数据和时间要求进行选择,同时你也可以采用一些神经网络的方法来代替此方法。 * 特征点匹配,对于不同的数据量,实则有三种匹配方法,这里只提供第一种: * 对于输入图片属于非连续稀疏图片,采用两两匹配的方式,注意这里不用全部两两匹配,例如A-B匹配完,不用再执行B-A匹配。匹配示意图类似于上三角矩阵。只用匹配对角线以上或者以下的图像对,降低匹配时间。 * 对于连续时间帧图片,采用和相邻时间帧图片进行匹配。例如匹配 [t-50,t+50]区间之间的。 * 对于大数据量图片进行匹配,需要采用词汇树进行匹配。降低匹配复杂度。 以上匹配均采用多线程实现 稀疏重建 本项目给的示例代码是全局增量重建代码,主要分为以下步骤: 1.计算每个图像特征点的Track,也就是图像每个特征点和几个其他图像特征点对应。为了让重建结果更加鲁棒,对于Track小于阈值的特征点进行滤除。 2.建立图像之间的Edge,滤出图像间Track对大于一定阈值的建立Edge 3.选取重建初始图像对,这里选取的思想是,sum=0.6*AB+0.2*A+0.2*B;这里AB是A图像和B图像对应特征点的个数,A是A图像与所有其他图像特征点的个数和,B是B图像与所有其他图像特征点的个数和。取sum最大的图像对。同时该图像对应该满足夹角在一定阈值范围里,保证三角化计算不会有太大误差。 4.三角化求取三维点云信息,这里对于步骤三选取的图像对,选取其与其他图像特征点数最大的图像的相机位置作为世界坐标系,然后通过分解本质矩阵求解另一个图像的位姿信息进行三角化。 5.选取一下一张待重建图像,这个选取的标准是,下一张待重建图像对应该满足特征点数和已重建的三维点交集最大。可以保证通过PNP方法求取初始值相对正确的相机位姿。 6.进行bundle_adjuestment。这里需要对三维点云进行预处理,淘汰那些重投影误差大于一定阈值的三维点,淘汰相机参数不合理的图像。防止在bundle_adjuestment过程拉偏优化方向。主要借助Ceres库实现,Ceres库主要是一些优化算法例如牛顿高斯法,LM算法等等,借助最小二乘法和泰勒展开去计算让代价函数值最小的变量移动方向和步长。 7.继续重复第5-6步,直到没有合适的图像 8.保存将相机位姿和三维点云 9.对重建结果进行评价,通过.ply文件直接肉眼查看重建形状是否正确,也可以通过统计重投影误差的平均值、最大值、最小值、方差来进行评价。 稠密重建 稠密重建阶段,本项目采用的是patchMatchStereo的方法,为了提高速度通过CUDA实现并行处理。 在稀疏重建阶段已经实现了图像位姿的求解,因此本项目没有采用传统PatchMatchStereo极线对齐的方法,而且是通过单应矩阵来计算对应同名点,并且支持多视图PatchMatchStereo。其一些实现方法参考了《Massively Parallel Multiview Stereopsis by Surface Normal Diffusion》这篇论文。核心算法主要有四个部分: * 多视图代价计算:在此部分,代价计算的方式和原始的PatchMatchStereo一致。对于多视图代价计算,通过计算参考视图和每个其他视图之间的代价,淘汰不满足阈值的代价,并求其平均值,作为最终代价。 * 空间传播:考虑到原始的PatchMatchStereo算法需要通过左上和右下来传播,但是对于并行计算无法实现,因此应该红黑块的方法。 * RefinePlane:和原始的PatchMatch 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
【资源说明】 基于C++实现的单目多视图立体重建系统源码+项目说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 单目多视图立体重建系统,此项目是针对单目多视图立体重建的方法。本项目从分为四个部分:** * 数据读取 * 特征点提取和匹配 * 稀疏重建,生成稀疏点云以及估计视图位姿 * 稠密重建,生成每张视图对应的深度图(这里可以进一步生成稠密点云,通过深度图) ### 数据读取 主要读取输入视图数据,对于无内参的图形,并估计内参(采用张正友相机标定法)。 ### 特征点提取和匹配 * 特征点提取,本项目采用两种特征提取方法,STIF算法和ORB,你可以根据自己的数据和时间要求进行选择,同时你也可以采用一些神经网络的方法来代替此方法。 * 特征点匹配,对于不同的数据量,实则有三种匹配方法,这里只提供第一种: * 对于输入图片属于非连续稀疏图片,采用两两匹配的方式,注意这里不用全部两两匹配,例如A-B匹配完,不用再执行B-A匹配。匹配示意图类似于上三角矩阵。只用匹配对角线以上或者以下的图像对,降低匹配时间。 * 对于连续时间帧图片,采用和相邻时间帧图片进行匹配。例如匹配 [t-50,t+50]区间之间的。 * 对于大数据量图片进行匹配,需要采用词汇树进行匹配。降低匹配复杂度。 以上匹配均采用多线程实现 ### 稀疏重建 本项目给的示例代码是全局增量重建代码,主要分为以下步骤: 1.计算每个图像特征点的Track,也就是图像每个特征点和几个其他图像特征点对应。为了让重建结果更加鲁棒,对于Track小于阈值的特征点进行滤除。 2.建立图像之间的Edge,滤出图像间Track对大于一定阈值的建立Edge 3.选取重建初始图像对,这里选取的思想是,sum=0.6*AB+0.2*A+0.2*B;这里AB是A图像和B图像对应特征点的个数,A是A图像与所有其他图像特征点的个数和,B是B图像与所有其他图像特征点的个数和。取sum最大的图像对。同时该图像对应该满足夹角在一定阈值范围里,保证三角化计算不会有太大误差。 4.三角化求取三维点云信息,这里对于步骤三选取的图像对,选取其与其他图像特征点数最大的图像的相机位置作为世界坐标系,然后通过分解本质矩阵求解另一个图像的位姿信息进行三角化。 5.选取一下一张待重建图像,这个选取的标准是,下一张待重建图像对应该满足特征点数和已重建的三维点交集最大。可以保证通过PNP方法求取初始值相对正确的相机位姿。 6.进行bundle_adjuestment。这里需要对三维点云进行预处理,淘汰那些重投影误差大于一定阈值的三维点,淘汰相机参数不合理的图像。防止在bundle_adjuestment过程拉偏优化方向。主要借助Ceres库实现,Ceres库主要是一些优化算法例如牛顿高斯法,LM算法等等,借助最小二乘法和泰勒展开去计算让代价函数值最小的变量移动方向和步长。 7.继续重复第5-6步,直到没有合适的图像 8.保存将相机位姿和三维点云 9.对重建结果进行评价,通过.ply文件直接肉眼查看重建形状是否正确,也可以通过统计重投影误差的平均值、最大值、最小值、方差来进行评价。 ### 稠密重建 稠密重建阶段,本项目采用的是patchMatchStereo的方法,为了提高速度通过CUDA实现并行处理。 在稀疏重建阶段已经实现了图像位姿的求解,因此本项目没有采用传统PatchMatchStereo极线对齐的方法,而且是通过单应矩阵来计算对应同名点,并且支持多视图PatchMatchStereo。其一些实现方法参考了《Massively Parallel Multiview Stereopsis by Surface Normal Diffusion》这篇论文。核心算法主要有四个部分: * 多视图代价计算:在此部分,代价计算的方式和原始的PatchMatchStereo一致。对于多视图代价计算,通过计算参考视图和每个其他视图之间的代价,淘汰不满足阈值的代价,并求其平均值,作为最终代价。 * 空间传播:考虑到原始的PatchMatchStereo算法需要通过左上和右下来传播,但是对于并行计算无法实现,因此应该红黑块的方法。

353

社区成员

发帖
与我相关
我的任务
社区描述
CUDA高性能计算讨论
社区管理员
  • CUDA高性能计算讨论社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧