2016-02-25 45 views
0

,我需要解决LSQR结果在很大程度上取决于权重

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获得几乎相同的值吗? 非常感谢您的帮助。

编辑:我添加了一个初始的猜测,现在结果不依赖W.有谁知道为什么?

回答

1

问题:你检查过国旗吗?你确定你使用的结果,而国旗是0?一个论点:我可以假设W也是一个开关,它决定了我希望最小化p的哪些组件。如果W *(Ax-b)真的等于0,那么你是对的,但在这里我们知道没有一个精确的解决方案,它变成W *(Ax-b)W *公差。所以,你要根据W的元素和容差算法的终点。

+0

我检查了这个标志,它是0,但结果仍然取决于W.例如:对于W,获得的值在1e-2的范围内;对于10 * W他们在1e-4的范围内 – Marta

+0

我希望,我可以产生同样的问题。我看到了只有次优解决方案的这种依赖关系。所以,在这种情况下,解决方案取决于初始猜测,权重和解算器公差。我不确定,但你的答案意味着这个W操纵解算器精度,正如我在前面的答案中所说的那样。因此,解算器停止残留容量接近W *的地方。 – Winsoft

+0

我添加了一个初始猜测,现在结果不依赖于W.我仍然没有获得我希望的结果,但至少这个问题似乎已经解决了。谢谢! – Marta

相关问题