1. 程式人生 > >一種簡單的圖像修復方法

一種簡單的圖像修復方法

col nes gb2 tle .com splay 產生 end left

該方法可以用於美顏中的祛斑,通過快速叠代的方式去除斑點。

假設輸入圖像為:

技術分享圖片

計算方向權重:

技術分享圖片

對於其他方向,操作類似We。

最終的輸出為:

技術分享圖片

對要修復的區域,反復進行同樣的操作即可。

簡單的matlab仿真代碼如下:

clear
clc
close all

% 設定叠代次數
iter=100;

InputData = imread(‘anish.jpg‘);
InputData = rgb2gray(InputData);
InputData = double(InputData);

[height,width]=size(InputData);
mask=ones(height,width);

% 模擬產生斑點
imshow(uint8(InputData))
[x,y] = ginput();
InputData(x-3:x+3,y-3:y+3) = 0;
mask(x-3:x+3,y-3:y+3) = 0;
OutputData=InputData;

imshow(uint8(InputData)),title(‘input‘)

for t=1:1:iter
    for i=1:1:height
        for j=1:1:width
            if mask(i,j)==0
                if j>1&&j<width
                    E=j+1;
                    W=j-1;
                elseif j==1
                    E=j+1;
                    W=j+1;
                else
                    E=j-1;
                    W=j-1;
                end
                if i>1&&i<height
                    S=i+1;
                    N=i-1;
                elseif i==1
                    S=i+1;
                    N=i+1;
                else
                    S=i-1;
                    N=i-1;
                end
                Io=OutputData(i,j);
                Ie=OutputData(i,E);
                Iw=OutputData(i,W);
                In=OutputData(N,j);
                Is=OutputData(S,j);
                
                Ine=OutputData(N,E);
                Inw=OutputData(N,W);
                Ise=OutputData(S,E);
                Isw=OutputData(S,W);
                
                We=1+(Ie-Io)^2+(Ine+In-Ise-Is)^2/16;
                We=1/sqrt(We);
                
                Ww=1+(Iw-Io)^2+(Inw+In-Is-Isw)^2/16;
                Ww=1/sqrt(Ww);
                
                Ws=1+(Is-Io)^2+(Ise+Ie-Iw-Isw)^2/16;
                Ws=1/sqrt(Ws);
                
                Wn=1+(In-Io)^2+(Ine+Ie-Iw-Inw)^2/16;
                Wn=1/sqrt(Wn);
                
                OutputData(i,j)=(Ie*We+Iw*Ww+In*Wn+Is*Ws)/(We+Ww+Ws+Wn);                
            end
        end
    end
end
figure,imshow(uint8(OutputData)),title(‘output‘)

結果如下:

技術分享圖片

一般地,如果待修復的區域越大,需要叠代的次數相對就大。

一種簡單的圖像修復方法