opencv中SVD分解并恢复重构矩阵
2016-05-16 23:55
696 查看
opencv中SVD分解并恢复重构矩阵
特征值分解可以用在主成分分析(PCA)中,当使用opencv对一个矩阵进行了特征值分解后,可以根据分解出的u,w,v矩阵将原矩阵恢复回来。//@cpp #include<opencv.hpp> using namespace std; using namespace cv; int main() { Mat image = imread("image.jpg", 0);//以灰度图打开一张360X480的image.jpg Mat temp(image.size(), CV_32FC1, Scalar(0)); image.convertTo(image, CV_32FC1); Mat U, W, V; SVD::compute(image, W, U, V);//opencv得到的V与MATLAB相比已经经过转置了,要想再转置一遍可以用V=V.t(); image.convertTo(image, CV_8UC1); imshow("0", image); Mat w(360, 360, CV_32FC1, Scalar(0));//opencv进行SVD分解后得到的奇异值不是放入对角矩阵,而是一个列向量中,所以需要自己将其变换为对角矩阵 for (int i = 0;i < 10;i++) w.ptr<float>(i)[i] = W.ptr<float>(i)[0]; temp = U*w*V; temp.convertTo(temp, CV_8UC1); imshow("1", temp); waitKey(6000); }
效果图
原始图片100%还原
20%还原,也就是只取奇异值前百分之二十对应的U和V
只取前15个奇异值对应的U和V
写在后边
继5月14日博文。上周的课题还没有做到满意的地步,对视频的监控虽然写出框架和初步的匹配了,但是精度不够高,仔细想了想应该是数据挖掘方面的知识不够,于是今天看了看特征值、奇异值、协方差,发现大一时候学的全都还给了老师。现在重新结合实际才发现这些概念的应用空间还是很大。下一步我会把视频监控识别的匹配算法部分再考虑一下,用奇异值分解的方法将数据矩阵降维后匹配。另外奇异值相关的理解我是看了知乎(奇异值的物理意义是什么?)一文后深刻理解的,希望大家能前去学习一下。相关文章推荐
- tomcat session复制
- Linux系统下的ssh面密码登陆
- Linux Proc文件系统
- Mac下配置远程Linux 服务器SSH密钥认证自动登录
- shell脚本下常用的符号组合及转移字符
- hadoop 2.6.0 分布式 + Spark 1.1.0 集群环境
- 【1】Android体系与系统架构——Android群英传开发笔记
- shell脚本的使用---for循环
- Linux Kernel Makefile解析(一)
- Linux常用命令
- OpenGL超级宝典笔记——操作矩阵
- Spark中组件Mllib的学习6之ALS测试(apache spark 含隐式转换)
- Java MVC三层架构在各框架中的特征
- Spark中组件Mllib的学习5之ALS测试(apache spark)
- linux中find指令详解
- linux北京老男孩博客学习地址
- linux运维人员必会的22道shell编程面试题及视频讲解
- 【Linux】shell之正则表达式
- 开发shell脚本检查Nginx实战分享
- 一道企业shell编程实战题-看看谁能快速搞定