使用SVD分解的图像重建
Image reconstruction using SVD Decomposition
我已经对图像进行了块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 。
- 通过递归进行因子分解
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有人能分解一下这个c++模板的语法吗
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- 从单个图像进行3D面部重建
- 使用SVD分解的图像重建
- 使用OpenCV?从一组2D图像切片重建3D模型
- 在没有关于相机的信息的情况下从2个图像进行三维重建
- 从一些没有校准的图像重建3D
- Qt中的基本图像处理,如何将图像分解为数组,准备对其执行傅里叶变换