www.gusucode.com > 非纹理的曲率驱动扩散的图像修复matlab源码程序 > CDDinpainting/L3_29.m
function [B] = L3_29() R=imread('L4_6.jpg'); %读入待修复图像 R=double(R); %把图像值uint8型转为double型 [nrow ncol]=size(R); %读图像大小,nrow为图像高度,ncol为图像宽度 % R_mask=imread('mask.jpg');%读模版 mask=double(R>80 & R<150); %把模版转换成0、1阵列,待修复为1,其他为0;同时把数值转为double型,使之可以参与MATLAB里的数值计算。 %系数设定 p=1; dt=1;%时间步长 I=R; tic %计时开始 for n=1:2000 %迭代次数,其值可以任选 for i=3:nrow-2 for j=3:ncol-2 %选择开始点和终点,以消除在图像边缘,进行中心差分法时,数值溢出;因为待修复区在图像内部,去除图像边缘点,不影响结果 if mask(i,j)==1 %求J_e^1 deta_I1=((I(i,j+1)-I(i,j))^2+(0.25*(I(i-1,j+1)+I(i-1,j)-I(i+1,j+1)-I(i+1,j)))^2+eps)^(1/2); k1_x=(I(i,j+2)+I(i,j)-2*I(i,j+1))/((I(i,j+2)+I(i,j)-2*I(i,j+1))^2+(I(i-1,j+1)+I(i+1,j+1)-2*I(i,j+1))^2+eps)^(1/2)... -((I(i,j+1)+I(i,j-1)-2*I(i,j))/((I(i,j+1)+I(i,j-1)-2*I(i,j))^2+(I(i-1,j)+I(i+1,j)-2*I(i,j))^2+eps)^(1/2)); k1_y=0.25*((I(i-2,j+1)+I(i,j+1)-2*I(i-1,j+1))/((I(i-1,j+2)+I(i-1,j)-2*I(i-1,j+1))^2+(I(i-2,j+1)+I(i,j+1)-2*I(i-1,j+1))^2+eps)^(1/2)... +(I(i-2,j)+I(i,j)-2*I(i-1,j))/((I(i-1,j+1)+I(i-1,j-1)-2*I(i-1,j))^2+(I(i-2,j)+I(i,j)-2*I(i-1,j))^2+eps)^(1/2)... -(I(i,j+1)+I(i+2,j+1)-2*I(i+1,j+1))/((I(i+1,j+2)+I(i+1,j)-2*I(i+1,j+1))^2+(I(i,j+1)+I(i+2,j+1)-2*I(i+1,j+1))^2+eps)^(1/2)... -(I(i,j)+I(i+2,j)-2*I(i+1,j))/((I(i+1,j+1)+I(i+1,j-1)-2*I(i+1,j))^2+(I(i,j)+I(i+2,j)-2*I(i+1,j))^2+eps)^(1/2)); k1=abs(k1_x+k1_y); Ve_1=(I(i,j+1)-I(i,j))*(k1^p)/deta_I1; %求J_w^1 deta_I2=((I(i,j)-I(i,j-1))^2+(0.25*(I(i-1,j-1)+I(i-1,j)-I(i+1,j-1)-I(i+1,j)))^2+eps)^(1/2); k2_x=(I(i,j+1)+I(i,j-1)-2*I(i,j))/((I(i,j+1)+I(i,j-1)-2*I(i,j))^2+(I(i-1,j)+I(i+1,j)-2*I(i,j))^2+eps)^(1/2)... -(I(i,j)+I(i,j-2)-2*I(i,j-1))/((I(i,j)+I(i,j-2)-2*I(i,j-1))^2+(I(i+1,j-1)+I(i-1,j-1)-2*I(i,j-1))^2+eps)^(1/2); k2_y=0.25*((I(i-2,j-1)+I(i,j-1)-2*I(i-1,j-1))/((I(i-2,j-1)+I(i,j-1)-2*I(i-1,j-1))^2+(I(i-1,j)+I(i-1,j-2)-2*I(i-1,j-1))^2+eps)^(1/2)... +(I(i-2,j)+I(i,j)-2*I(i-1,j))/((I(i-2,j)+I(i,j)-2*I(i-1,j))^2+(I(i-1,j-1)+I(i-1,j+1)-2*I(i-1,j))^2+eps)^(1/2)... -(I(i,j-1)+I(i+2,j-1)-2*I(i+1,j-1))/((I(i,j-1)+I(i+2,j-1)-2*I(i+1,j-1))^2+(I(i+1,j)+I(i+1,j-2)-2*I(i+1,j-1))^2+eps)^(1/2)... -(I(i,j)+I(i+2,j)-2*I(i+1,j))/((I(i,j)+I(i+2,j)-2*I(i+1,j))^2+(I(i+1,j+1)+I(i+1,j-1)-2*I(i+1,j))^2+eps)^(1/2)); k2=abs(k2_x+k2_y); Vw_1=(I(i,j)-I(i,j-1))*(k2^p)/deta_I2; %求J_n^2 deta_I3=((0.25*(I(i-1,j+1)+I(i,j+1)-I(i-1,j-1)-I(i,j-1)))^2+(I(i,j)-I(i-1,j))^2+eps)^(1/2); k3_x=0.25*((I(i-1,j+2)+I(i-1,j)-2*I(i-1,j+1))/((I(i-1,j+2)+I(i-1,j)-2*I(i-1,j+1))^2+(I(i-2,j+1)+I(i,j+1)-2*I(i-1,j+1))^2+eps)^(1/2)... +(I(i,j+2)+I(i,j)-2*I(i,j+1))/((I(i,j+2)+I(i,j)-2*I(i,j+1))^2+(I(i-1,j+1)+I(i+1,j+1)-2*I(i,j+1))^2+eps)^(1/2)... -(I(i-1,j)+I(i-1,j-2)-2*I(i-1,j-1))/((I(i-1,j)+I(i-1,j-2)-2*I(i-1,j-1))^2+(I(i,j-1)+I(i-2,j-1)-2*I(i-1,j-1))^2+eps)^(1/2)... -(I(i,j)+I(i,j-2)-2*I(i,j-1))/((I(i,j)+I(i,j-2)-2*I(i,j-1))^2+(I(i+1,j-1)+I(i-1,j-1)-2*I(i,j-1))^2+eps)^(1/2)); k3_y= (I(i-2,j)+I(i,j)-2*I(i-1,j))/((I(i-2,j)+I(i,j)-2*I(i-1,j))^2+(I(i-1,j+1)+I(i-1,j-1)-2*I(i-1,j))^2+eps)^(1/2)... -(I(i-1,j)+I(i+1,j)-2*I(i,j))/((I(i-1,j)+I(i+1,j)-2*I(i,j))^2+(I(i,j+1)+I(i,j-1)-2*I(i,j))^2+eps)^(1/2); k3=abs(k3_x+k3_y); Vn_2=(I(i-1,j)-I(i,j))*(k3^p)/deta_I3; %求J_s^2; deta_I4=(((I(i+1,j+1)+I(i,j+1)-I(i+1,j-1)-I(i,j-1))*0.25)^2+(I(i+1,j)-I(i,j))^2+eps)^(1/2); k4_x=0.25*((I(i+1,j+2)+I(i+1,j)-2*I(i+1,j+1))/((I(i+1,j+2)+I(i+1,j)-2*I(i+1,j+1))^2+(I(i,j+1)+I(i+2,j+1)-2*I(i+1,j+1))^2+eps)^(1/2)... +(I(i,j+2)+I(i,j)-2*I(i,j+1))/((I(i,j+2)+I(i,j)-2*I(i,j+1))^2+(I(i-1,j+1)+I(i+1,j+1)-2*I(i,j+2))^2+eps)^(1/2)... -(I(i+1,j)+I(i+1,j-2)-2*I(i+1,j-1))/((I(i+1,j)+I(i+1,j-2)-2*I(i+1,j-1))^2+(I(i,j-1)+I(i+2,j-1)-2*I(i+1,j-1))^2+eps)^(1/2)... -(I(i,j)+I(i,j-2)-2*I(i,j-1))/((I(i,j)+I(i,j-2)-2*I(i,j-1))^2+(I(i+1,j-1)+I(i-1,j-1)-2*I(i,j-1))^2+eps)^(1/2)); k4_y=(I(i-1,j)+I(i+1,j)-2*I(i,j))/((I(i-1,j)+I(i+1,j)-2*I(i,j))^2+(I(i,j+1)+I(i,j-1)-2*I(i,j))^2+eps)^(1/2)... -(I(i,j)+I(i+2,j)-2*I(i+1,j))/((I(i,j)+I(i+2,j)-2*I(i+1,j))^2+(I(i+1,j+1)+I(i+1,j-1)-2*I(i+1,j))^2+eps)^(1/2); k4=abs(k4_x+k4_y); Vs_2=(I(i,j)-I(i+1,j))*(k4^p)/deta_I4; %求delta_J deta_J=Ve_1-Vw_1+Vn_2-Vs_2; %迭代公式 I(i,j)=I(i,j)+dt*deta_J; end end end end toc %计时结束,输出循环所用时间 figure,imshow(uint8(R));%输出原待修复图 figure,imshow(mask); %输出模版 figure,imshow(uint8(I)); %输出修复后图像