Path: news.mathworks.com!not-for-mail
From: "sheng fang" <maelstromer@gmail.com>
Newsgroups: comp.soft-sys.matlab
Subject: The unstableness of my total variation denoising
Date: Wed, 17 Jun 2009 11:22:02 +0000 (UTC)
Organization: The MathWorks, Inc.
Lines: 40
Message-ID: <h1ajkq$av$1@fred.mathworks.com>
Reply-To: "sheng fang" <maelstromer@gmail.com>
NNTP-Posting-Host: webapp-03-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1245237722 351 172.30.248.38 (17 Jun 2009 11:22:02 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Wed, 17 Jun 2009 11:22:02 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1412410
Xref: news.mathworks.com comp.soft-sys.matlab:548233


I am using the gradient descent method for total variation regularized reconstruction. Specifically, the following code is used for the time evolution:

     xi = xi + tau*( Num./ Den*lambda + fidelity);

where the Num./Den is the PDE flow computed using the upwind finite difference scheme and the lambda is the regularization parameter. Besides, the smoothing parameter for TV norm is set as: eps=1 and the tau=0.2;

I found that the solution becomes highly unstable, if I increased the lambda for strong regualrization. Personally, I think this is  because the CFL condition is broken. However, I didn't see any literature mentioned this problem. Is there a mistake in the parameter selection such as tau and eps or is this a common phenomenon? 

Another question is how to choose the eps? In my case, it seems that eps below one may make the Den too small and result in a very large flow at some pixels. And the whole image was ruinted. However, I remembered that a small eps will have better denoising result. So I don't  know how to handle these two things simultaneously.
And I sincerely hope you guys can give me some suggestions.
Thank you so much in advance!

################################################
P.S.
Bellow is a full version of my code for the total variation reconstruction:

for kk = 1:n_iter
    tic

    % compute the fidelity term A'b - A'Ax
    q = compAx(xi,s,options);
    fidelity = b - q; % fidelity = A'b - A'Ax

        I_x = (xi(:,[2:nx nx])-xi(:,[1 1:nx-1]))/2;
        I_y = (xi([2:ny ny],:)-xi([1 1:ny-1],:))/2;
        I_xx = xi(:,[2:nx nx])+xi(:,[1 1:nx-1])-2*xi;
        I_yy = xi([2:ny ny],:)+xi([1 1:ny-1],:)-2*xi;
        Dp = xi([2:ny ny],[2:nx nx])+xi([1 1:ny-1],[1 1:nx-1]);
        Dm = xi([1 1:ny-1],[2:nx nx])+xi([2:ny ny],[1 1:nx-1]);
        I_xy = (Dp-Dm)/4;

       % compute flow
        Num = I_xx.*(ep2+I_y.^2)-2*I_x.*I_y.*I_xy+I_yy.*(ep2+I_x.^2);
        Den = (ep2+I_x.^2+I_y.^2).^(3/2);

       %% evolve image by options.tau
        xi=xi+options.tau*(Num./Den*lambda + fidelity);  

   toc
end