SVD分解 Eigen库 opencv库[通俗易懂]

SVD分解 Eigen库 opencv库[通俗易懂]如题,使用库函数进行svd分解,形如A=U*S*VT.Eigen库:#include#include#include//usingEigen::MatrixXf;usingnamespaceEigen;usingnamespaceEigen::internal;usingnamespaceEigen::Architect

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

如题,使用库函数进行svd分解,形如 A = U * S * VT.

Eigen 库:

#include <iostream> #include <Eigen/SVD> #include <Eigen/Dense> //using Eigen::MatrixXf; using namespace Eigen; using namespace Eigen::internal; using namespace Eigen::Architecture; int main() { //-------------------------------svd测试 eigen Matrix3f A; A(0,0)=1,A(0,1)=0,A(0,2)=1; A(1,0)=0,A(1,1)=1,A(1,2)=1; A(2,0)=0,A(2,1)=0,A(2,2)=0; JacobiSVD<Eigen::MatrixXf> svd(A, ComputeThinU | ComputeThinV ); Matrix3f V = svd.matrixV(), U = svd.matrixU(); Matrix3f S = U.inverse() * A * V.transpose().inverse(); // S = U^-1 * A * VT * -1 std::cout<<"A :\n"<<A<<std::endl; std::cout<<"U :\n"<<U<<std::endl; std::cout<<"S :\n"<<S<<std::endl; std::cout<<"V :\n"<<V<<std::endl; std::cout<<"U * S * VT :\n"<<U * S * V.transpose()<<std::endl; system("pause"); //-------------------------------svd测试 eigen return 0; }


OpenCV库:

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace std; using namespace cv; void print(CvMat& m){ for (int row = 0; row < m.rows; row++){ float* ptr = (float*)(m.data.ptr + row * m.step);//第row行数据的起始指针 for (int col = 0; col < m.cols; col++) cout<<*(ptr+3*col)<<" "; std::cout<<std::endl; } } int main () { float abt[3 * 3] = { 1,0,1, 0,1,1, 0,0,0 }; float abt_d[3 * 3]={0}, abt_u[3 * 3]={0}, abt_v[3 * 3]={0}; CvMat ABt = cvMat(3, 3, CV_64F, abt);//CvMat 取对数组的引用而不是拷贝 CvMat ABt_D = cvMat(3, 3, CV_64F, abt_d); CvMat ABt_U = cvMat(3, 3, CV_64F, abt_u); CvMat ABt_VT = cvMat(3, 3, CV_64F, abt_v); cvSVD(&ABt, &ABt_D, &ABt_U, &ABt_VT, CV_SVD_V_T);//最后一个参数用于控制返回 UT或U  VT或V std::cout<<"A : "<<std::endl; print(ABt); std::cout<<"U : "<<std::endl; print(ABt_U); std::cout<<"S : "<<std::endl; print(ABt_D); std::cout<<"V : "<<std::endl; print(ABt_VT); system("pause"); return 0; }



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180353.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vue-router路由懒加载_懒加载分页延时vue

    vue-router路由懒加载_懒加载分页延时vue安装:https://www.npmjs.com/package/babel-plugin-syntax-dynamic-import配置:路由文件:

  • Sublime Text3 的 Markdown 实时预览全面总结

    Sublime Text3 的 Markdown 实时预览全面总结如前文《SublimeText3的插件管理工具(PackageControl)的安装及使用方法》所说,Sublime有强大的插件扩展功能,本文介绍如何在用Sublime写Markdown文档时,做到效果预览。1.插件介绍先介绍两个有关Markdown的常用插件:MarkdownEditing和MarkdownPreviewMarkdownEditing顾名思义,Ma…

  • 如何学习FPGA「建议收藏」

    如何学习FPGA「建议收藏」PS:笔者强烈建议诸位注册一个EETOP的账号,每天签到或者发贴、回贴就有积分了,里面的资源非常丰富,各种软件、资料都能找到。一、入门首先要掌握HDL(HDL=verilog+VHDL)。第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间…

  • JMM内存模型介绍「建议收藏」

    JMM内存模型介绍「建议收藏」一、JMM的定义1.什么是JMM《Java虚拟机规范》中曾试图定义一种“Java内存模型”(JavaMemoryModel简称JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java内存模型是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM是围绕原子性,有序性、可见性展开。2.主内存与工作内存Java内存模型的主要目的是定义程

    2022年10月27日
  • validation[通俗易懂]

    validation[通俗易懂]validation说明后台开发需要对对象的传进来的参数进行校验,有专门的校验工具,validationbean是基于JSR-303标准开发出来的,使用注解方式实现,及其方便,但是这只是一个接

  • Java web的简单介绍

    Java web的简单介绍

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号