前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SVD分解 Eigen库 opencv库[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-11-02 16:03:34
7240
发布2022-11-02 16:03:34
举报

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

Eigen 库:

代码语言:javascript
复制
#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库:

代码语言:javascript
复制
#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; }

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档