51 views (last 30 days)

Show older comments

Dear all,

I am trying to apply SGD to solve a classical image processing problem as in this link . I am not sure what should I change. Here is the Gradient Descent Code:

niter = 500; % number of iterations

x = u; % initial value for x, u is the input noisy image

for i=1:niter

% smoothed total variation of the image

gdx = grad(x).^2;

sgdx=gdx(:,:,1)+gdx(:,:,2);

NormEps = sqrt( epsilon^2 + sgdx );

J = sum(NormEps(:)) ; % this is a scalar value

% functional to minimize, lambda is weight of J

nm=sum((x(:)-u(:)).^2);

f = 1/2 * nm^2 + lambda * J;

% normalized gradient of J

GradJ =-div( grad(x)./repmat(NormEps, [1 1 2]) );

% Gradient Descent update equation

% the gradient of the functional function f is:

% x - y + lambda * GradJ

x = x - tau * ( x - u + lambda * GradJ);

end

clf;

imageplot(clamp(x)); % this is the result denoised image

I understand that in SGD we took only random part of the image at each iteration then we compute the minimum, but if I apply this on the input noisy image, I will denoise (badly) small part of the image at each iteration, right? an explanation based on the code above would be excellent!

Best regards,

Ibraheem

Dan
on 23 Jun 2017

Hi Ibraheem, I have updated an existing algorithm to apply SGD : https://www.google.co.il/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0ahUKEwjI9I_R1tTUAhUsCMAKHc0HB0MQFgg5MAM&url=https%3A%2F%2Fwww.mathworks.com%2Fmatlabcentral%2Ffileexchange%2F62921-ecc-registration-100x-faster&usg=AFQjCNGFD-abP0KTXE9Lvsi7dfId74JIUw

Enjoy, Dan

Xilin Li
on 2 Feb 2017

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!