Matlab中的eig函数和Opecv中eigen()函数的区别
奇异值分解的理论参见下面的链接
http://www.cnblogs.com/pinard/p/6251584.html
https://blog.csdn.net/shenziheng1/article/details/52916278
https://blog.csdn.net/billbliss/article/details/78579308
https://blog.csdn.net/zhongkejingwang/article/details/43053513
https://blog.csdn.net/u010099080/article/details/68060274
在Matlab中的eig()函数,和Opencv中的eigen()函数,都是用来获得矩阵的特征值和特征矢量。并且,这两个函数的输入矩阵必须是对称矩阵。
Matlab中的eig()函数,常见的写法如下:
[V D]=eig(A);
D是矩阵A的特征值组成的对角矩阵,与A是同数据类型,同尺度。V是与特征值对应的特征矢量组成的矩阵。
在Opencv中的eigen()函数,常见的写法如下:
myEigen(A,D,V);
函数中的A是输入矩阵,D和V是输出的特征值矢量和特征矢量组成的矩阵。eig()函数与eigen()函数的不同之处是:
1、在eigen()中的D是一个一维特征值组成的列矢量,并且特征值是按照降序排序;而在eig()中的D则是一个以特征值为对角的对角矩阵,特征值是按照升序排序。
2、在eigen()中的V是特征矢量组成的矩阵,矩阵中的每一行就是一个特征矢量;而在eig()中的V则是以特征矢量组成的矩阵,矩阵中的每一列即是一个特征矢量。
下面是同一个实例,在Matlab中和Opencv中的比较:
首先是Matlab中的eig函数的实例代码:
clear;
clc;
A=[,,;
,,;
,,];
[V D]=eig(A);
A_r=V*D*V';
输入结果如下:

下面是Opencv中eigen函数的实例代码:
//为方便与Matlab中的eig()函数比较,我把eigen封装在一个函数里,并将特征值矢量转换成对角矩阵,与Matlab中类似
void myEigen(Mat&A,Mat&D,Mat&V)
{
eigen(A,D,V);
Mat E=Mat::eye(A.size(),A.type());
for(int i=;i<A.rows;i++)
{
E.at<double>(i,i)=D.at<double>(,i);
}
D=E.clone(); }
const double eps=2.224e-16;
int main()
{
Mat A=(Mat_<double>(,)<<
,,,
,,,
,,);
Mat D,V;
myEigen(A,D,V); Mat A_r=V.t()*D*V; cout<<"原矩阵 A ="<<endl<<A<<endl;
cout<<"重构矩阵A_r="<<endl<<A_r<<endl<<endl;
cout<<"D="<<endl<<D<<endl;
cout<<"V="<<endl<<V<<endl;
return ;
}
输出结果如下:

比较Matlab和Opencv中的D、V值:

Opencv中V的第一列,与Matlab中V的第一行数值一直,但排序相反,其它行列对比也基本一致。
Matlab中的eig函数和Opecv中eigen()函数的区别的更多相关文章
- Matlab中psf2otf()函数在opencv中的实现
在Matlab中有个psf2otf()函数,可以将小尺寸的点扩散函数,扩大尺寸,并作二维傅里叶变换,opencv中没有这个函数,所以编了这么个函数: /************************ ...
- Matlab读取cifar10 train_quick.sh输出txt中信息
感谢 网友 Vagrant的提醒.之前 一直就看个最后的accuracy.这个应该并不靠谱.最好把说有的信息都看一下.而一个一个看.根本记不住.只能把数据读取在图片中显示一下,才比较直观. 本文就是读 ...
- 表值函数与JS中split()的联系
在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...
- 借助JavaScript中的时间函数改变Html中Table边框的颜色
借助JavaScript中的时间函数改变Html中Table边框的颜色 <html> <head> <meta http-equiv="Content-Type ...
- php中引用&的真正理解-变量引用、函数引用、对象引用
php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...
- 跟着百度学PHP[5]函数篇2-PHP中的特殊形式的函数
目录...................................................... .00x1 可变函数 在PHP里面如果说将“函数名称”赋予字符串类型的变量.在调用这个 ...
- C中的qsort函数和C++中的sort函数的理解与使用
一.qsort()函数 原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); ...
- javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出!- !- !- !- !- -! -! -! -! -! 、函数三个数中的最大数)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js中的全局变量和静态变量的使用, js 的调试?- 如果js出错, js引擎 就会停止, 这会 导致 后面的 html中 refer 该函数时, 会报错 函数为定义!!
效果里面的函数, 如show, hide,slideDown等, 这些都叫 "效果"函数, 但是里面可以包含动画, 也可以 不包含动画. 动画,是指 元素 的内容 是 逐渐 显示/ ...
随机推荐
- 小程序+tgit
1.微信公众平台-设置-开发者工具 开通 腾讯云和tgit权限管理 如果遇到问题 ..用户二次验证什么的 直接去 腾讯云-安全设置 将“敏感操作”和“异地登陆” 中的保护去掉 2.微信公众平台- ...
- MongoDB——morphia
禁止保存className:@Entity(noClassnameStored = true) https://stackoverflow.com/questions/17719018/a-field ...
- VS2015 注释英文
在VS2015中,框架.NET4.5的智能提示是英文版本的,其实修改的方法很简单,手动改也十分方面,但是考虑到有时候更新后又会变成英文,其实无非就是里面的汉化包是英文版的而已.所以还是留个笔记,方便进 ...
- 验证码生成 C#
/// <summary> /// 验证码类 /// </summary> public class Rand { #region 生成随机数字 /// <summary ...
- jQuery属性操作之类样式操作
类样式的操作:指对DOM属性className进行添加.移除操作.比如addClass().removeClass().toggleClass(). 1. addClass() 1.1 概述 $(se ...
- $\LaTeX$数学公式大全3
$3\ Delimiters$$|$ |$\vert$ \vert$\|$ \|$\Vert$ \Vert$\{$ \{$\}$ \}$\langle$ \langle$\rangle$ \rangl ...
- truncate at 255 characters with xlsx files(OLEDB方式读取Excel丢失数据、字符串截断的原因和解决方法)
The TypeGuessRows setting is supported by ACE. Note the version numbers in the key may change depend ...
- IDEA项目里Maven 的Plugins出现红线的解决方法
1.删除项目里的libraries(快捷键ctrl+shift+alt+s):Project Settings->Libraries,全选删除 2.删除之前项目产生的target 3.然后再in ...
- mysql java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone.
连接数据库时报错: The server time zone value '?й???????' is unrecognized or represents more than one time zo ...
- js 处理url参数,应用导航分类
1.先上图 2.代码 html <li><a href="javascript:void(0);" data-cid = "{$v['id']}&quo ...