多媒体技术与应用之图像修复Tv算法

131 阅读1分钟

图像修复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

所需要的时间和循环次数成正比,修复效果也和循环次数成正比