使用SVD分解的图像重建

Image reconstruction using SVD Decomposition

本文关键字:图像重建 分解 SVD 使用      更新时间:2023-10-16

我已经对图像进行了块SVD分解,我存储了结果。现在,我需要从此结果进行重建。我发现几乎没有用Matlab写的例子,这对我来说是个谜。我只需要从中重建图片的公式,或用C语言编写的示例。矩阵A等于u*s*v'。看起来将如何看待公式,例如用于计算前五个单数值(哪些行和列的乘积)?请提供公式,其中包含C型索引。u和v'是矩阵,s是向量(不是矩阵)。

不确定我是否正确地提出了问题,但是如果您只需要知道单数值,它们是中间矩阵S的对角线。作为向量存储在这里。我的意思是,只有对角存储,如果您在矩阵计算中思考,您应该想象它是矩阵。

那些对角线值是您的奇异值,如果您需要第一个最大的单数值,只需乘以矢量的5个最大值s。

引用Wikipedia:

对角线条目σi,σ的i被称为M的奇异值。 U的M列和V的N列称为左下角 M的向量和右旋向量。

在上面的报价中,Sigma是您的S,M是原始矩阵。

您已经要求提供C代码,但我希望伪代码足够了(已经很晚了,我很累)。目标矩阵 a 具有 m 行, c 列和等级rho。变量 p = min(m,n)

一种策略是首先形成中间矩阵产品 b = u s 。这是由于奇异值基质的对角线样性质而微不足道的。假设您具有rho(= 5)奇异值。您必须执行rho< = p

s 1 1 替换列Vector u 1 1 u 1

s 2 2 2 u u u u 替换列vector u 2 2 。 ...

s rho rho u u u u u rho 。

替换列vector u rho 1 用长度为M 的零向量。。

替换列vector u rho 2 用长度为M 的零向量。。

...

替换列vector u p 用长度为m 的零向量。。

接下来形式的新图像矩阵 a = b v t 。ROW r 和列 c 中的矩阵元素是 r r r 的点乘积/b>带有 v t c c

另一种策略是跳到 r a 的矩阵元素的形式,和column c 是是

a r,c = sum( s k u r,k v c,k ,{k,1,rho})

行计数器 r 从1到 m 运行;列计数器 c 从1到 n

运行