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

问题描述 投票:0回答:2

我使用opencv 2.4.9命令SVDecomp对图像进行SVD操作,在进行反向替换时,它询问rhs数组,这个数组是什么?

命令。

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

其中w,u,vt是SVD组件,im_enc1是输入图像。

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

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

svd
2个回答
0
投票

SVD是一个矩阵的分解。

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

所以反过来应该是一个组成(矩阵积)。

mx = u * w * vt;

困难可能出现在w的表示上. 考虑以下:Matlab SVD在opencv中的输出结果


0
投票

如果你屈服 u w vt

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

那么你预留SVD获取img的方法是

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

请注意 w 计算方式 cv::SVD::compute 是一个 n*1 矢量而不是 n*n 矩阵:

© www.soinside.com 2019 - 2024. All rights reserved.