Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >opencv中的Matlab SVD输出

opencv中的Matlab SVD输出
EN

Stack Overflow用户
提问于 2012-08-19 19:51:37
回答 2查看 4.1K关注 0票数 4

在Matlab中,SVD函数输出三个矩阵:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[U,S,V] = svd(X) 

我们可以使用S矩阵来找到尽可能少的分量,以降低X的维数以保留足够的方差。我的问题是如何使用Opencv找到S矩阵(而不是U矩阵),是否可以使用OpenCV SVD中的build找到S矩阵?我的意思是,Matlab奇异值分解函数输出三个矩阵,就像OpenCV一样,但我不知道它们是否相同。这是OpenCV中的奇异值分解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SVD::compute(InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0 ) 

这是Matlab奇异值分解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[U,S,V] = svd(X).

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-19 21:57:38

Matlab中的S和OpenCV中的w有一个简单的区别。

举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A = [2, 4;
     1, 3;
     0, 0;
     0, 0]

在Matlab中,S应该是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
S = [5.47, 0   ;
     0   , 0.37;
     0   , 0   ;
     0   , 0   ]

但是openCV以w的身份给出了以下内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
w = [5.47; 0.37]

所以,OpenCV给出了一个奇异值的数组,如果你真的想要S矩阵,你可以创建一个新的矩阵,并把w的元素放在它的对角线上。

票数 9
EN

Stack Overflow用户

发布于 2012-08-19 21:53:54

我非常确定,实际计算奇异值分解的后端对于MATLAB和OpenCV是相同的(我认为这两种情况都是用LAPACK完成的)。所以你想做的事情看起来很简单。

您可以通过创建一个具有相同大小的src矩阵来将w转换为S,该矩阵到处都是零,并且w中的值沿对角线。这只是一个简单的数据结构的改变,值将是相同的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12029486

复制
相关文章
matlab输出语句fprintf例子_matlab中compose函数
golang需要的基础是:首先初学Go语言要弄懂基础语法和概念;然后掌握文件操作、网络编程、锁、协程、对象序列化和反序列化,以及各种数据格式的封装等;最后接触数据库等,就可以模块化开发。
全栈程序员站长
2022/09/28
1.9K0
matlab输出语句fprintf例子_matlab中compose函数
SVD分解 Eigen库 opencv库[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
7880
MATLAB的循环_matlab循环输出
不用 for, if,直接 length(find(diff(a) == 1)) 就可以了 如果非要用for, if s = 0; for n = 1:length(a)-1, if a(n+1) – a(n) == 1, s = s + 1; end end s matlab 基本语句 1.循环语句for for i=s1:s3:s2 循环语句组 end 解释:首先给i赋值s1;然后,判断i是否介于s1与s2之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。 例:求1到100的和,可以编程如下: sum=0 for i=1:1:100 sum=sum+i end 这个程序也可以用while语句编程。 注:for循环可以通过break语句结束整个for循环. 2.循环语句while 例:sum=0;i=1; while(i,=,=90 chji=’优秀’ elseif n>=80 chji=’良好’ elseif n>=70 chji=’中等’ elseif n>=60 chji=’及格’ else chji=’不及格’ end 练习二:将例2写入M-文件编辑器,然后在command window 调用这个程序。 (2) switch语句 switch语句可以替代多分支的if语句,而且switch语句简洁明了,可读性更好。其格式为: switch 表达式 case 数值1 程序模块1 case 数值2 程序模块2 …… otherwise 程序模块n end 其中的otherwise模块可以省略。 switch语句的执行过程是:首先计算表达式的值,然后将其结果与每一个case后面的数值依次进行比较,如果相等,则执行该case的程序模块;如果都不相等,则执行otherwise模块中的语句。如图3所示。 例3 用switch…case开关结构将百分制的学生成绩转换为五分制的成绩输出。 程序: clear x=58 switch fix(x/10)
全栈程序员站长
2022/11/08
2.2K0
MATLAB的循环_matlab循环输出
matlab输出矩阵格式_matlab中uint8函数用法
1、uint8与double double函数只是将读入图像的uint8数据转换为double类型,一般不使用;常用的是im2double函数,将 uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变。 MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double。因此 I2=im2double(I1) :把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生 溢出。默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型 (uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。 im2double():将图象数组转换成double精度类型 im2uint8():将图象数组转换成unit8类型 im2uint16():将图象数组转换成unit16类型 2、uint8和im2uint8 在数据类型转换时候uint8和im2uint8的区别,uint8的操作仅仅是将一个double类型的小数点后面的部 分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所 有其他值乘以255。 图像数据在计算前需要转换为double,以保证精度;很多矩阵数据也都是double的。要想显示其,必须先 转换为图像的标准数据格式。如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间) ,那么可以直接使用im2uint8。如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255( 超过255的按255)。最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double) 3、double类型图像的显示 图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精度。很多矩阵的很多矩 阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式。如果直接运行imshow(I),我们会 发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都 是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被 不正常得显示为白色图像了。具体方法有: imshow(I/256); ———-将图像矩阵转化到0-1之间 imshow(I,[]); ———-自动调整数据的范围以便于显示 (注意这里,必须是灰度图,否 则不行) imshow(uint8(I)); imshow(mat2gray(I)); 上面的mat2gray是将最终获得的矩阵转化为灰度图像。常用的为: A = im2uint8(mat2gray(result)) 这样就将result矩阵转化为uint8类型的图像。
全栈程序员站长
2022/09/30
2.7K0
Matlab实现类似于OpenCV中的findContours()函数。
1、点击[Matlab] 2、点击[命令行窗口] 3、按<Enter>键
裴来凡
2022/05/28
1.2K0
Matlab实现类似于OpenCV中的findContours()函数。
opencv实现imfill_使用opencv实现matlab中的imfill填充孔洞功能
2. 使用floodFill函数给新图像进行填充,种子点设置为Point(0, 0),填充颜色为全白。因为原始图像四周加了一圈0,因此使用floodFill填充之后,整个图像除了原始图像中内部的点是黑色之外其他地方全是白色。
全栈程序员站长
2022/09/30
6860
opencv remap matlab,如何使用OpenCV的remap函数?
这只是对文件的一个简单的误解,我不怪你——我也花了几次摸索才明白。文档很清楚,但是这个函数可能没有按您预期的方式工作;事实上,它在与我最初预期相反的方向工作。
全栈程序员站长
2022/11/15
1.2K0
opencv remap matlab,如何使用OpenCV的remap函数?
matlab 循环矩阵_matlab循环输出数组
clc;clearall;closeall;t0=[11];a=[12;34]t=t0;t(1,:)=t0’\an=10;fori=2:nt(i,:)=t(i-1,:)’\a;endt
全栈程序员站长
2022/11/08
3.3K0
SVD在推荐系统中的应用
参考自:http://www.igvita.com/2007/01/15/svd-recommendation-system-in-ruby/
AIHGF
2019/02/18
1.6K0
SVD在推荐系统中的应用
SVD | 简介推荐场景中的协同过滤算法,以及SVD的使用
有没有思考过一个问题,当我们在淘宝或者是某东这类电商网站购物的时候。我们一进首页,就会看到首页展出了很多商品。这些商品往往质量很高,很吸引人,一旦逛起来可能就没个结束。那么问题来了,电商平台拥有那么多商品,它是怎么知道我们可能会喜欢什么样的商品的呢?这背后的逻辑是什么?
TechFlow-承志
2020/07/16
1.2K0
在MATLAB中使用opencv
我们来说说第二类,需要做的事情是先编译opencv的源码、再编译matlab可用的mex文件夹,这两步的编译器必须是同一个,而最近几年的新版本matlab都推荐使用MinGW-w64编译器来使用mex、可是mexopencv提供的编译辅助函数在Windows系统上默认使用Visual Studio或者Windows SDK来编译,如果觉得自己需要Visual Studio的其他功能,安装一下也是挺好的
万木逢春
2019/10/09
6.2K0
在MATLAB中使用opencv
matlab输出论文仿真图
一般来说学校对于学术论文的图像都有一定的要求,比如线性、字体大小等,本文将讲解怎么出高清的图和绘制符合要求的图。
用户9925864
2022/07/27
1.1K0
matlab输出论文仿真图
C++ OpenCV输出中文
以前的文章《C++ OpenCV视频操作之图像输出文字》介绍了OpenCV中的putText函数可以输出文字,但是这个函数只能输出英文,如果输入的是中文会变为乱码,今天我们就来实现OpenCV输出中文(只在windows环境下)。
Vaccae
2020/11/09
4.4K0
C++ OpenCV输出中文
MATLAB 对文件输入输出
在科研中经常采用MATLAB对文件(文本数据)进行操作,因此首先遇到的问题是如何采用MATLAB对文件进行读取,然后以一种特定的格式输出。
联远智维
2022/01/20
6440
matlab保存图片去掉白边_matlab输出图像不留白
name_mask = [ currentpath,’\data_prepare_fig\’ name ‘_mask.tif’];
全栈程序员站长
2022/11/04
2.4K0
矩阵分解之SVD和SVD++
上述两个问题,在矩阵分解中可以得到解决。原始的矩阵分解只适用于评分预测问题,这里所讨论的也只是针对于评分预测问题。
abs_zero
2018/04/24
3.5K0
矩阵分解之SVD和SVD++
如何用matlab输出论文级图片?
用matlab辛辛苦苦计算出来的数据结果,只可惜苦于无法输出一幅高质量的图片,不得不复制粘贴数据到其他绘图软件中绘制。之前在网上搜到一款叫export fig的图像工具箱,可惜效果也不胜理想。今天给大家介绍一个 matlab 自带的非常实用的图片输出命令 —— print 函数。
巴山学长
2019/07/15
3.1K0
如何用matlab输出论文级图片?
matlab中@的用法[通俗易懂]
@是用于定义函数句柄的操作符。函数句柄既是一种变量,可以用于传参和赋值;也是可以当做函数名一样使用。
全栈程序员站长
2022/09/13
2.6K0
matlab中@的用法[通俗易懂]
Matlab中的括号()[]{}
Matlab中经常会用到括号去引用某Array或者是cell的内容,但三者有什么具体区别呢? [ ] 中括号用来构建向量(Vectors)或者是矩阵(Matrices)。 如[6.9 9.64 sqrt(-1)] 就是一个有三个元素的向量。 [11 12 13; 21 22 23]是一个二乘三的矩阵. 分号(;)用来结束一行。中括号的另一个作用是在函数中,分配输出参数。 { } 大括号,用于cell型的数组的分配或引用。 比如A(2,1) = {[1 2 3; 4 5 6]}, or A{2
听城
2018/04/27
2.3K0
Matlab中的括号()[]{}
高能!8段代码演示Numpy数据运算的神操作
Numpy是Numerical Python extensions 的缩写,字面意思是Python数值计算扩展。Numpy是Python中众多机器学习库的依赖,这些库通过Numpy实现基本的矩阵计算,Python的OpenCV库自然也不例外。
IT阅读排行榜
2019/06/14
1.5K0

相似问题

opencv matlab svd返回不同的结果

12

将matlab图像svd方法转换为opencv

11

在Matlab和OpenCV中计算SVD的不同结果

32

SVD Matlab实现

10

Matlab中符号矩阵的SVD

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文