opencv3之SVD

14 篇文章 2 订阅
12 篇文章 1 订阅

cv::SVD::compute

static void cv::SVD::compute(InputArraysrc,
OutputArrayw,
OutputArrayu,
OutputArrayvt,
intflags = 0
)

参数:

//A=u*w*vt
src	decomposed matrix
w	calculated singular values
u	calculated left singular vectors
vt	transposed matrix of right singular values
flags	operation flags

flags可以选的参数:

Enumeratorflag
SVD::MODIFY_A1allow the algorithm to modify the decomposed matrix; it can save space and speed up processing. currently ignored.
SVD::NO_UV2indicates that only a vector of singular values w is to be processed, while u and vt will be set to empty matrices
SVD::FULL_UV4when the matrix is not square, by default the algorithm produces u and vt matrices of sufficiently large size for the further A reconstruction; if, however, FULL_UV flag is specified, u and vt will be full-size square orthogonal matrices.
//使用方法
Mat A, w, u, vt;
cv::SVD::compute(A, w, u, vt,SVD::FULL_UV);
cv::SVDecomp(A,w,u,vt,cv::SVD::MODIFY_A | cv::SVD::FULL_UV);

cv::SVDecomp

也是调用的上面函数

void cv::SVDecomp(InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags)
{
    CV_INSTRUMENT_REGION()

    SVD::compute(src, w, u, vt, flags);
}

SVD计算方法

奇异值分解定义:

有一个m×n的实数矩阵A,我们想要把它分解成如下的形式:
A = U Σ V T A=U\Sigma V^T A=UΣVT
其中UV均为单位正交阵

具体计算可以参考:https://byjiang.com/2017/11/18/SVD/

或者:奇异值分解与应用

主要利用如下性质:
A A T = U Σ V T V Σ T U T = U Σ Σ T U T A T A = V Σ T U T U Σ V T = V Σ T Σ V T AA^T=U\Sigma V^TV\Sigma^TU^T=U\Sigma\Sigma^TU^T\\ A^TA=V\Sigma^T U^TU\Sigma V^T=V\Sigma^T\Sigma V^T\\ AAT=UΣVTVΣTUT=UΣΣTUTATA=VΣTUTUΣVT=VΣTΣVT

Σ Σ T = [ σ 1 2 0 ⋯ 0 0 σ 2 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ σ m 2 ] , Σ T Σ = [ σ 1 2 0 ⋯ 0 0 σ 2 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ σ n 2 ] \Sigma\Sigma^T= \left[ \begin{matrix} \sigma_1^2 & 0 & \cdots & 0 \\ 0 & \sigma_2^2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \sigma_m^2 \\ \end{matrix} \right], \Sigma^T\Sigma= \left[ \begin{matrix} \sigma_1^2 & 0 & \cdots & 0 \\ 0 & \sigma_2^2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \sigma_n^2 \\ \end{matrix} \right] ΣΣT=σ12000σ22000σm2,ΣTΣ=σ12000σ22000σn2

参考

https://docs.opencv.org/3.1.0/d2/de8/group__core__array.html#gab477b5b7b39b370bb03e75b19d2d5109

SVD(奇异值分解)算法及其评估

https://wenku.baidu.com/view/38693ef2e109581b6bd97f19227916888486b916.html?rec_flag=default&sxts=1563780499924

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值