lsqr结果很大程度上取决于重量

时间:2016-02-25 17:01:34

标签: matlab least-squares

我需要解决:

argmin||W*FT^-1(Ax)-W*p||

使用lsqr。 p是图像,x是k空间矩阵,A是矩阵,W是加权矩阵。为了将它们传递给matlab lsqr,我将p,x和W向量化。

这是我的代码:

b=W.*p;
x=lsqr(@(x1,modo)FUNC(x1,W_vector,A,modo),b,tol,maxit);
X_k_lsqr=reshape(x,dim(1),dim(2),dim(3));
X_lsqr=real(ifftn(X_k_lsqr)).*MASK(:,:,:,1);

%%辅助功能

function [result modo]=FUNC(x1,W_vector,A,modo)
    %Computes y=A*x for modo='notransp'
    %Computes y=A'*x for modo='transp'
    switch modo
        case 'notransp'
            res=A*x1;
            R1=reshape(res,norient,dim(1)*dim(2)*dim(3));
            for co=1:norient
                R2(:,:,:,co)=reshape(R1(co,:),dim(1),dim(2),dim(3));
                FR(:,:,:,co)=ifftn(R2(:,:,:,co));
                aux=FR(:,:,:,co);
                R3(co,:)=aux(:).';
            end
            result=W.*R3(:); 
        case 'transp'
            RR1=reshape(x1./(W+eps),norient,dim(1)*dim(2)*dim(3));
            for co=1:norient
                RR2(:,:,:,co)=reshape(RR1(co,:),dim(1),dim(2),dim(3));
                FRR(:,:,:,co)=fftn(RR2(:,:,:,co));
                aux=FRR(:,:,:,co);
                RR3(co,:)=aux(:).'; 
            end
            result=A'*RR3(:); 
    end
end

由于W出现在最小化问题的两个方面,我原本期望得到的图像几乎与W值无关。

如果我改变W,图像看起来质量相同,但它的值很大程度上依赖于W.我不知道我的代码是否有问题。

我是否应该为不同的W实际获得几乎相同的值?

1 个答案:

答案 0 :(得分:1)

一个问题:你检查过国旗了吗?你确定你在标志为0时使用结果吗? 一个论点:我可以假设W也作为一个开关来确定我想要最小化的p的哪些组件。如果W *(Ax-b)实际上等于0,那么你是对的,但是在这里我们知道没有精确解,它变成W *(Ax-b)< W *宽容。因此,您依赖于算法的终点和W的元素以及容差。