Matlab中的eig函数和Opecv中eigen()函数的区别

时间:2023-01-26 23:20:32

奇异值分解的理论参见下面的链接

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';

输入结果如下:

Matlab中的eig函数和Opecv中eigen()函数的区别   Matlab中的eig函数和Opecv中eigen()函数的区别

下面是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中的eig函数和Opecv中eigen()函数的区别

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

Matlab中的eig函数和Opecv中eigen()函数的区别  Matlab中的eig函数和Opecv中eigen()函数的区别

Opencv中V的第一列,与Matlab中V的第一行数值一直,但排序相反,其它行列对比也基本一致。

Matlab中的eig函数和Opecv中eigen()函数的区别的更多相关文章

  1. Matlab中psf2otf&lpar;&rpar;函数在opencv中的实现

    在Matlab中有个psf2otf()函数,可以将小尺寸的点扩散函数,扩大尺寸,并作二维傅里叶变换,opencv中没有这个函数,所以编了这么个函数: /************************ ...

  2. Matlab读取cifar10 train&lowbar;quick&period;sh输出txt中信息

    感谢 网友 Vagrant的提醒.之前 一直就看个最后的accuracy.这个应该并不靠谱.最好把说有的信息都看一下.而一个一个看.根本记不住.只能把数据读取在图片中显示一下,才比较直观. 本文就是读 ...

  3. 表值函数与JS中split&lpar;&rpar;的联系

    在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...

  4. 借助JavaScript中的时间函数改变Html中Table边框的颜色

    借助JavaScript中的时间函数改变Html中Table边框的颜色 <html> <head> <meta http-equiv="Content-Type ...

  5. php中引用&amp&semi;的真正理解-变量引用、函数引用、对象引用

    php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...

  6. 跟着百度学PHP&lbrack;5&rsqb;函数篇2-PHP中的特殊形式的函数

    目录...................................................... .00x1 可变函数 在PHP里面如果说将“函数名称”赋予字符串类型的变量.在调用这个 ...

  7. C中的qsort函数和C&plus;&plus;中的sort函数的理解与使用

    一.qsort()函数 原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); ...

  8. javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出&excl;- &excl;- &excl;- &excl;- &excl;- -&excl; -&excl; -&excl; -&excl; -&excl; 、函数三个数中的最大数)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. js中的全局变量和静态变量的使用&comma; js 的调试&quest;- 如果js出错&comma; js引擎 就会停止&comma; 这会 导致 后面的 html中 refer 该函数时&comma; 会报错 函数为定义&excl;&excl;

    效果里面的函数, 如show, hide,slideDown等, 这些都叫 "效果"函数, 但是里面可以包含动画, 也可以 不包含动画. 动画,是指 元素 的内容 是 逐渐 显示/ ...

随机推荐

  1. &lbrack;CareerCup&rsqb; 9&period;5 Permutations 全排列

    9.5 Write a method to compute all permutations of a string. LeetCode上的原题,请参加我之前的博客Permutations 全排列和P ...

  2. phpstorm编辑器智能提示框架代码

    按照上面的步骤就可以智能提示代码了!

  3. 扯一扯前端css的整体架构设计:(2)base基础类的那些事儿

    周一下午在实验室写了第一篇博文,有几个人捧场,那咱就得接着下去啊.然后我觉得现在写的内容更多的偏向于谈一下我对于前端css架构的理解和前端经验的一个小总结,所以就把标题里原来的[项目总结]给删掉了.但 ...

  4. 第一章 SQL基础

    第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...

  5. rac各节点实例需设置为相同的一些参数

    RAC Parameters That Require Identical Settings • ACTIVE_INSTANCE_COUNT • ARCHIVE_LAG_TARGET • COMPAT ...

  6. &lt&semi;锋利的jQuery&gt&semi;读书笔记

  7. operator new和operator delete

    从STL源码剖析中看到了operator new的使用 template<class T> inline void _deallocate(T* buffer) { ::operator ...

  8. 函数--&gt&semi;指定函数---&gt&semi;默认函数---&gt&semi;动态函数--&gt&semi; 动态参数实现字符串格式化--&gt&semi;lambda表达式&comma;简单函数的表示

    #一个函数何以接受多个参数#无参数#show(): ---> 执行:show() #传入一个参数 def show(arg): print(arg) #执行 show(123) #传入两个参数 ...

  9. 论YUV422&lpar;YUYV&rpar;与YUV420相互转换

    Example 2.13. V4L2_PIX_FMT_YUYV 4 × 4 pixelimage start + 0: Y'00 Cb00 Y'01 Cr00 Y'02 Cb01 Y'03 Cr01 ...

  10. PHP中php&lowbar;sapi&lowbar;name&lpar;&rpar;与array&lowbar;map&lpar;&rpar;

    1,php_sapi_name() php_sapi_name返回web服务器和php之间的接口类型.函数说明: string php_sapi_name(void) 返回描述php所使用的接口类型的 ...