如何在opencv中进行SVD​​的反向操作?

时间:2014-09-22 07:37:44

标签: svd

我使用opencv 2.4.9命令SVDecomp在图像上应用SVD。在返回替换时它会询问rhs数组。那个数组是什么?

命令:

     1. cv::SVDecomp(im_enc1,w,u,vt);

其中w,u,vt是SVD组件,而im_enc1是inputimage。

     2. cv::SVBackSubst(w,u,vt,rhs,im_enc2);

其中w,u,vt是SVD组件,im_enc2是输出图像。

2 个答案:

答案 0 :(得分:0)

SVD是矩阵的分解:

[ u, w, vt ] = svd( mx );

所以反过来应该是一个组合(矩阵产品):

mx = u * w * vt;

代表w可能会遇到困难。考虑以下: Matlab SVD output in opencv

答案 1 :(得分:0)

如果您通过{p>产生u w vt

 cv::SVD::compute(img,w,u,vt);

那么,保留SVD来获取img的方式就是

 img = u*cv::Mat::diag(w)*vt;

请注意,由w计算出的cv::SVD::computen*1向量,而不是n*n矩阵。