一种简单的图像修复方法

Posted hudalikm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一种简单的图像修复方法相关的知识,希望对你有一定的参考价值。

该方法可以用于美颜中的祛斑,通过快速迭代的方式去除斑点。

假设输入图像为:

计算方向权重:

对于其他方向,操作类似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\')

 结果如下:

一般地,如果待修复的区域越大,需要迭代的次数相对就大。

 

 

以上是关于一种简单的图像修复方法的主要内容,如果未能解决你的问题,请参考以下文章

Android在滚动时修复了滚动视图中的背景图像

分享前端开发常用代码片段

自定义对话框片段

关于js----------------分享前端开发常用代码片段

如何在来自 Firebase 存储的片段 ImageView 中显示图像

基于超像素分割和图像配准的深度图像修复方法