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);

上記のコードは、センシング行列が dft 行列ではなく dct 行列である場合に解を回復します。誰かがエラーの場所を教えてもらえますか? l1-magic固有の問題でしょうか?別のソルバーを使用してもうまくいきますか?

: l1qc_logbarrier はライブラリ l1 magic の関数です。http://users.ece.gatech.edu/justin/l1magic/index.html

l1qc_logbarrier が解決する -

l1 最小化

4

1 に答える 1

1

エラーは、要素が複素数である行列を出力する dftmtx を使用したために発生したようで、その場合は l1-magic が機能しません。私が解決しようとしていた問題は、l1-最小化です -

ここに画像の説明を入力

ここpsiが複雑です。したがって、l1-magic は失敗します。それを克服するために、次の調整を行いました。ここここに画像の説明を入力で、R は実部、C は虚部でpsiあり、同様に letここに画像の説明を入力です。これは与える、

ここに画像の説明を入力

b が実数であることはわかっているので、

ここに画像の説明を入力

2 つの制約をマージすると、次のようになります。

ここに画像の説明を入力

これにより、 l1-magic を使用して解決できる形式の単一の実制約が得られます。ここに画像の説明を入力

于 2016-06-04T10:33:50.720 に答える