基于CDD修复模型的图像修复算法

CDD修复模型如下:
在这里插入图片描述
其中u0表示原始图像。
在这里插入图片描述
令:
在这里插入图片描述
那么在修复区域D中,我们迭代一下式子:
在这里插入图片描述
其中u和j的上标指迭代次数,Δt=1。

数值实现:
使用中点差分的方法来求:
在这里插入图片描述
在以图像中某一像素为中电的四领域中,由如下光系:
在这里插入图片描述
j为一个向量,如果我们令j为:
在这里插入图片描述
其中括号中的j的上标表示j向量的分量。
我们可以推导得出
在这里插入图片描述
其中j的下标表示j的位置。
在半点处的梯度求法如下,我们以(1/2,0)处的梯度位列:
在这里插入图片描述
其中h为步长,在这里为一个像素,u为原图像素电,这样我们就可以求得图像的中点梯度了。
则:
在这里插入图片描述
其中:
在这里插入图片描述
实验代码(matlab):

clear all;close all;clc
I=imread('t.tif');
imshow(I);
[wid,hei]=size(I);
Ix=zeros(wid,hei);
Iy=zeros(wid,hei);
mask=zeros(wid,hei);

for i=1:wid
    for j=1:hei
        if(I(i,j)>220)
            mask(i,j)=255;
        else
            mask(i,j)=0;
        end
    end
end
I=double(I);
figure,imshow(mask);
count=0;
while(count<1000)
    for i=2:wid-1
        for j=2:hei-1
            if(mask(i+1,j)==255||mask(i-1,j)==255||mask(i,j-1)==255||mask(i,j+1)==255)
                Ix(i,j)=0.5*(I(i,j+1)-I(i,j-1))/sqrt(0.25*(I(i+1,j)-I(i-1,j))^2+0.25*((I(i,j+1)-I(i,j-1))^2)+1);
                Iy(i,j)=0.5*(I(i+1,j)-I(i-1,j))/sqrt(0.25*(I(i+1,j)-I(i-1,j))^2+0.25*((I(i,j+1)-I(i,j-1))^2)+1);                Ke=sqrt(((Ix(i,j+1)-Ix(i,j))+(Ix(i+1,j+1)+Ix(i+1,j)-Ix(i-1,j+1)-Ix(i-1,j))/2)^2+((Iy(i,j+1)-Iy(i,j))+(Iy(i+1,j+1)+Iy(i+1,j)-Iy(i-1,j+1)-Iy(i-1,j))/2)^2);
                Kw=sqrt(((Ix(i,j)-Ix(i,j-1))+(Ix(i+1,j)+Ix(i+1,j-1)-Ix(i-1,j)-Ix(i-1,j-1))/2)^2+((Iy(i,j)-Iy(i,j-1))+(Iy(i+1,j)+Iy(i+1,j-1)-Iy(i-1,j)-Iy(i-1,j-1))/2)^2);
                Ks=sqrt(((Iy(i+1,j)-Iy(i,j))+(Iy(i+1,j+1)+Iy(i,j+1)-Iy(i,j-1)-Iy(i+1,j-1))/2)^2+((Ix(i+1,j)-Ix(i,j))+(Ix(i+1,j+1)+Ix(i+1,j+1)-Ix(i,j-1)-Ix(i,j-1))/2)^2);
                Kn=sqrt(((Iy(i,j)-Iy(i-1,j))+(Iy(i-1,j+1)+Iy(i,j+1)-Iy(i-1,j-1)-Iy(i,j-1))/2)^2+((Ix(i,j)-Ix(i-1,j))+(Ix(i,j+1)+Ix(i,j+1)-Ix(i-1,j-1)-Ix(i-1,j-1))/2)^2);
                Ige=((I(i,j+1)-I(i,j)))^2+(1/16)*(I(i+1,j+1)+I(i+1,j)-I(i-1,j+1)-I(i-1,j))^2;
                Igw=((I(i,j)-I(i,j-1)))^2+(1/16)*(I(i+1,j-1)+I(i+1,j)-I(i-1,j-1)-I(i-1,j))^2;
                Igs=((I(i+1,j)-I(i,j)))^2+(1/16)*(I(i+1,j+1)+I(i,j+1)-I(i+1,j-1)-I(i,j-1))^2;
                Ign=((I(i,j)-I(i-1,j)))^2+(1/16)*(I(i-1,j+1)+I(i,j+1)-I(i-1,j-1)-I(i,j-1))^2; 
                We=Ke/sqrt(1+Ige)+1;
                Ww=Kw/sqrt(1+Igw)+1;
                Ws=Ks/sqrt(1+Igs)+1;
                Wn=Kn/sqrt(1+Ign)+1;                I(i,j)=(We*I(i,j+1)+Ww*I(i,j-1)+Ws*I(i+1,j)+Wn*I(i-1,j))/(We+Ww+Ws+Wn);
            end
        end
    end
    count=count+1;
end
img=uint8(I);
figure,imshow(img);

实验结果:
图一  损坏图
图一 损坏图

图二 待修复区域掩模
在这里插入图片描述
图三 修复后的图片

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值