clear;clc;%全变分去噪算法
imgpath=strcat('f:\lena.jpg');%指定图像路径
figure(1)
i=imread(imgpath);%读入图像
imshow(i);%显示图像
title('原图');
j=imnoise(i,'speckle');%加噪声
figure(2)
imshow(j);%显示加噪声之后的图像
Image=double(j);
[Image_h Image_w] = size(Image);
g = 1; dt = 1/4; nbrOfIterations = 5;
Image = double(Image);
Theta=20;
p = zeros(Image_h,Image_w,2);
d = zeros(Image_h,Image_w,2);
div_p = zeros(Image_h,Image_w);
for i = 1:nbrOfIterations
for x = 1:Image_w
for y = 2:Image_h-1
div_p(y,x) = p(y,x,1) - p(y-1,x,1);
end
end
for x = 2:Image_w-1
for y = 1:Image_h
div_p(y,x) = div_p(y,x) + p(y,x,2) - p(y,x-1,2);
end
end
% Handle boundaries
div_p(:,1) = p(:,1,2);
div_p(:,Image_w) = -p(:,Image_w-1,2);
div_p(1,:) = p(1,:,1);
div_p(Image_h,:) = -p(Image_h-1,:,1);
% Update u
u = Image-Theta*div_p;
% Calculate forward derivatives
du(:,:,2) = u(:,[2:Image_w, Image_w])-u;
du(:,:,1) = u([2:Image_h, Image_h],:)-u;
% Iterate
d(:,:,1) = (1+(dt/Theta/g).*abs(sqrt(du(:,:,1).^2+du(:,:,2).^2)));
d(:,:,2) = (1+(dt/Theta/g).*abs(sqrt(du(:,:,1).^2+du(:,:,2).^2)));
p = (p-(dt/Theta).*du)./d;
end
I=mat2gray(u);
figure(3);
imshow(I)
title('rof处理图');
评论4
最新资源