基於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);

實驗結果:
圖一  損壞圖
圖一 損壞圖

圖二 待修復區域掩模
在這裏插入圖片描述
圖三 修復後的圖片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章