【发布时间】:2014-06-03 13:41:12
【问题描述】:
为了过滤图像,我有一个优化问题要解决。
我创建了一个处理稀疏矩阵的问题的线性方程。
首先我会展示问题。
一、问题的拉普拉斯(邻接)矩阵:
矩阵 Dx / Dy 是前向差分算子 -> 因此它的转置是后向差分算子。
矩阵 Ax / Ay 是对角矩阵,其权重是图像梯度的函数(逐点,即该值仅取决于该像素本身的梯度)。
权重为:
其中 Ix(i) 是输入图像在第 i 个像素处的水平梯度(当对输入图像进行矢量化时)。
假设输入图像 G -> g = vec(G) = G(:)。
我想找到并成像 U -> u = vec(U) = U(:) s.t.:
我的问题是:
- 如何有效地构建矩阵 Dx / Dy / Ax / Ay(它们都是稀疏的)?
- 通过设置M = (I + \lambda * {L}_{g}),有没有优化的方式直接创建M?
- 在 MATLAB 中解决此线性问题的最佳方法是什么?有没有办法绕过内存限制(即处理大图像并且仍然能够解决它)?
- 有没有开源库可以在内存资源有限的情况下解决?任何带有 MATLAB API 的库?
谢谢。
【问题讨论】:
-
您可以使用
sparse命令构建稀疏矩阵。如果您知道那些非零条目的行和列索引以及这些数字在那些非零位置中应该是什么,您可以轻松地在稀疏中构建它。要开始构建矩阵,请慢慢开始并使用for循环制作它们。我们希望确保您正确获取矩阵。一旦你这样做了,你可以简单地应用 \ 运算符来求解逆,并且非常针对稀疏矩阵进行了优化。 -
对于开源库,\ 的速度几乎与您将得到的一样快。有 iterative 方法,以防 \ 由于内存限制而无法工作。你可以看看连续的过度放松方法。以下是一些帮助您入门的代码:github.com/burakbayramli/kod/blob/master/books/Olver/sor.m。
w是控制方法收敛的权重,在0 < w < 2之间。 -
@rayryeng,你能帮我完成第一个“循环”步骤吗?谢谢。
-
您能否进一步了解
Dx和Dy的结构? -
它们是应用前向差分的矩阵算子。在 MATLAB 中,我认为您可以通过
diff(eye(size(inputImage)))获得它。
标签: matlab image-processing optimization mathematical-optimization