0

我正在尝试使用比信号维度更少的观察来重建图像(压缩感知)。我正在尝试运行以下代码 -

A = imread('cameraman.png');

x_i = 37;
y_i = 95;
s = 35;

A = A([x_i:x_i+s],[y_i:y_i+s]);
x = double(A(:));
figure(1),imshow(A)
xlabel('original')
n=length(x);
m=floor(n/3);
Phi=randn(m,n);   %Measurment Matrix
Psi=dftmtx(n);   %sensing Matrix( or can be dct(eye(n)) )
y=Phi*x;  %compressed signal
Theta=Phi*Psi;
%Initial Guess:  y=Theta*s => s=Theta\y
s2=Theta\y;
%Solution
s1=l1qc_logbarrier(s2, Theta,[], y, 1e-1, 1e-1);
%Reconstruction
x1=Psi*s1;
figure,imshow(reshape(x1,size(A)), [0 256] ),xlabel('OMP')

但是在运行代码时出现以下错误。

Error using linsolve
Matrix must be positive definite.

Error in l1qc_newton (line 92)
    [dx,hcond] = linsolve(H11p, w1p, opts);

Error in l1qc_logbarrier (line 104)
  [xp, up, ntiter] = l1qc_newton(x, u, A, At, b, epsilon, tau, newtontol,
  newtonmaxiter, cgtol, cgmaxiter);

Error in cs_image2 (line 23)
s1=l1qc_logbarrier(s2, Theta,[], y, 1e-1, 1e-1);

当感知矩阵是 dct 矩阵而不是 dft 矩阵时,上面的代码恢复了解决方案。有人可以指出错误所在吗?这是 l1-magic 固有的问题吗?使用不同的求解器对我有用吗?

注意:l1qc_logbarrier 是库 l1 魔术中的一个函数。http://users.ece.gatech.edu/justin/l1magic/index.html

l1qc_logbarrier 解决 -

l1 最小化

4

1 回答 1

1

错误似乎是因为使用了 dftmtx ,它输出了一个矩阵,其元素是复数,而 l1-magic 不适用于这种情况。我试图解决的问题是 l1-minimization -

在此处输入图像描述

这里磅/平方英寸很复杂。所以 l1-magic 失败了。为了克服它,我做了以下调整。让在此处输入图像描述,其中 R 是实部,C 是虚部,磅/平方英寸类似地,让在此处输入图像描述. 这给出了,

在此处输入图像描述

我们知道 b 是实数,因此,

在此处输入图像描述

合并这两个约束,我们得到,

在此处输入图像描述

这给了我们一个可以使用 l1-magic 解决的形式的单一实际约束。在此处输入图像描述

于 2016-06-04T10:33:50.720 回答