【图像处理-图像修复】TV图像修复方法(附matlab代码)

一个愿意伫立在巨人肩膀上的农民......

1、理论

        TV模型是通过等照度线来修复图像,将图像修复问题转换为能量泛函问题。该方法是把图像看作是一个分段的平滑函数,并通过求解方程计算破损区域的像素值,进而达到修复图像的效果。
并且TV图像修复模型还具有它自身的去噪效果,因此该方法广泛应用于一些破损区域较小的图像修复。其主要的修复思想如下所示:
        如图,假设 𝐷 为待修复区域, 𝐸 为待修复区域的外区域,则修复后的区域为 𝐸 ∪ 𝐷。我们记修复后区域上的像素值为 𝑢,定义代价函数为:
式中 𝑢 ( 𝑥, 𝑦 ) 是像素值 𝑢 ( 𝑥, 𝑦 ) 的梯度。由于 TV 模型受噪声影响较大,故我们应有一个方程对噪声进行约束。有噪声方程式如下:
        使用 Lagrange 乘子法可以把图像修复问题转变为无约束条件极值问题,从而得到 TV 模型的求解方程:
        此方程式是非线性偏微分方程,故实际求解时一般用近似数字差分方程代替求解,并且使用半点格式对上 式进行离散化。图给出了目标像素及邻域点的示意图。
        其中 𝑂 是目标像素。以点 𝑒 为例,目标像素的邻域节点为 ( 𝑁, 𝑆, 𝑊, 𝐸 ) ,半像素邻域点为 ( 𝑛, 𝑠, 𝑤, 𝑒 ) 。点 𝑒 的散度可以近似看作如下公式:
其中, 为步长,因考虑到离散化,故一般取 = 1 。因此可求解出 TV 模型的最终修复迭代公式为:
记:

其中, 𝑢 0 表示此时正在处理的像素, 𝑢 𝑝 表示的是邻域像素, 𝜆 为自定义的平滑系数, 𝑎 自定义给出。
        由以上公式可以看出该模型对图像进行修复的原理与 BSCB 相似,但是该模型是一种加权平均算法,对边界区域的噪声比较敏感。使用该模型进行图像修复前需先确保破损区域边界上的噪声不能超过一定范围。

2、matlab程序

close all;
clear;
clc;

img=double(imread('lena.jpg'));
mask=rgb2gray(imread('ma.jpg'))>160;
[m n]=size(img);
for i=1:m
    for j=1:n
        if mask(i,j)==0
            img(i,j)=0; 
        end
    end
end
imshow(img,[]); %合成的需要修复的图像
lambda=0.2;
a=0.5;
imgn=img;
for l=1:300 %迭代次数
    for i=2:m-1
        for j=2:n-1
            if mask(i,j)==0 %如果当前像素是被污染的像素,则进行处理
               Un=sqrt((img(i,j)-img(i-1,j))^2+((img(i-1,j-1)-img(i-1,j+1))/2)^2);
               Ue=sqrt((img(i,j)-img(i,j+1))^2+((img(i-1,j+1)-img(i+1,j+1))/2)^2);
               Uw=sqrt((img(i,j)-img(i,j-1))^2+((img(i-1,j-1)-img(i+1,j-1))/2)^2);
               Us=sqrt((img(i,j)-img(i+1,j))^2+((img(i+1,j-1)-img(i+1,j+1))/2)^2);
               Wn=1/sqrt(Un^2+a^2);
               We=1/sqrt(Ue^2+a^2);
               Ww=1/sqrt(Uw^2+a^2);
               Ws=1/sqrt(Us^2+a^2);
               Hon=Wn/((Wn+We+Ww+Ws)+lambda);
               Hoe=We/((Wn+We+Ww+Ws)+lambda);
               How=Ww/((Wn+We+Ww+Ws)+lambda);
               Hos=Ws/((Wn+We+Ww+Ws)+lambda);
               Hoo=lambda/((Wn+We+Ww+Ws)+lambda);
               imgn(i,j)=Hon*img(i-1,j)+Hoe*img(i,j+1)+How*img(i,j-1)+Hos*img(i+1,j)+Hoo*img(i,j);
            end
        end
    end
img=imgn;
end
figure;
imshow(img,[]);
imwrite(uint8(img), 'result.jpg')
结果:

3、带图片素材的完整程序文件可点击下方连接获取

https://download.csdn.net/download/weixin_41809117/88564727?spm=1001.2014.3001.5503icon-default.png?t=N7T8https://download.csdn.net/download/weixin_41809117/88564727?spm=1001.2014.3001.5503

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值