图像修复Tv算法:
I = (imread('color.bmp'));% 读原始修复图
grey = rgb2gray(I);
[row,col,k] = size(I);% 得到图像长度与宽度
subplot(121);imshow('color.bmp');title('原图');
flag=10000;%迭代次数
lambda=0.2;
a=0.2;
I1=I;
for l=1:flag
I1 = tvdeal(I1,row,col,grey);
end
subplot(122);imshow(I1,[]);title('TV算法修复');
函数
tvdeal
function [ I1 ] = tvdeal( I1,row,col,grey_I )
lambda=0.2;
a=0.5;
for k=1:3
for i=2:row-1
for j=2:col-1
if grey_I(i,j)<4 %如果当前像素是被污染的像素,则进行处理
Un=sqrt(double(((I1(i,j,k)-I1(i-1,j,k))^2+((I1(i-1,j-1,k)-I1(i-1,j+1,k))/2)^2)));
Ue=sqrt(double(((I1(i,j,k)-I1(i,j+1,k))^2+((I1(i-1,j+1,k)-I1(i+1,j+1,k))/2)^2)));
Uw=sqrt(double(((I1(i,j,k)-I1(i,j-1,k))^2+((I1(i-1,j-1,k)-I1(i+1,j-1,k))/2)^2)));
Us=sqrt(double(((I1(i,j,k)-I1(i+1,j,k))^2+((I1(i+1,j-1,k)-I1(i+1,j+1,k))/2)^2)));
Wn=1/sqrt(Un^2+a^2);
We=1/sqrt(Ue^2+a^2);
Ww=1/sqrt(Uw^2+a^2);
Ws=1/sqrt(Us^2+a^2);
Hon=Wn/((Wn+We+Ww+Ws)+lambda);
Hoe=We/((Wn+We+Ww+Ws)+lambda);
How=Ww/((Wn+We+Ww+Ws)+lambda);
Hos=Ws/((Wn+We+Ww+Ws)+lambda);
Hoo=lambda/((Wn+We+Ww+Ws)+lambda);
I1(i,j,k)=Hon*I1(i-1,j,k)+Hoe*I1(i,j+1,k)+How*I1(i,j-1,k)+Hos*I1(i+1,j,k)+Hoo*I1(i,j,k);
end
end
end
end
end
所需要的时间和循环次数成正比,修复效果也和循环次数成正比