2016-06-03 15 views
0

Я пытаюсь восстановить изображение, используя меньшее количество наблюдений, чем размеры сигнала (сжатие). Я пытаюсь запустить следующий фрагмент кода:l1 magic error - matlab

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 magic. http://users.ece.gatech.edu/justin/l1magic/index.html

l1qc_logbarrier решает -

l1 minimization

+0

Что такое 'l1qc_logbarrier' ?? Включите его код в свой пост! –

+0

l1qc_barrier - это функция из библиотеки l1 magic. http://users.ece.gatech.edu/justin/l1magic/index.html – pyronic

ответ

1

ошибка, кажется, пришли из-за использование dftmtx, который выводит матрицу, элементы которой является сложными номера и l1-магия не работает для этого случая , Проблема, которую я пытался решить это l1 минимизации -

enter image description here

Здесь psi сложно. Так l1-magic терпит неудачу. Чтобы справиться с этим, я сделал следующие корректировки. Пусть enter image description here, где R - вещественная и C - мнимая часть psi и аналогичным образом, пусть enter image description here. Это дает,

enter image description here

Мы знаем, что б реально, поэтому,

enter image description here

Объединение 2 ограничений, мы получаем,

enter image description here

Это дает нам a real ограничение формы enter image description here, которая может быть решена с использованием l1-magic.

+0

В Matlab это выглядело бы примерно так: R = real (Theta); C = imag (Theta); Theta2 = [R-C; C R]; s1 = l1qc_logbarrier ([s2; ... нули (длина (s1), 1)], ... Theta, [], ... [y; нули (длина (y), 1)] , 1e-1, 1e-1); Обратите внимание, что последняя половина s1 в основном бесполезна и должна быть отброшена. –