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