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

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

1、理论

        CDD 模型是在 TV 模型的基础上改进而得到的, TV 模型先确定待修复区域的边界区域,然后使用各向异性扩散的方法从破损区的边缘向内部逐步修复,该模型不能很好地连接断裂区域,修复结果也不具有连通性,视觉效果较为生硬。在 TV 模型中扩散系数只是图像梯度模的倒数\frac{1}{|\triangledown u|} ,因此在修复时时常会出现破损区域信息填充不联通的情况。如图 展示了 TV 模型修复时视觉不连通的示意图。
CDD 模型是在 TV 模型基础上应用一种基于曲率驱动扩散的方法对图像进行修复,在图像修复中可以达到更好的视觉连通效果。 CDD 模型引入的曲率函数 𝑔 ( | 𝑘 | )如下:
其中曲率k=\triangledown \cdot [\frac{\triangledown u}{|\triangledown u|}] 。该定义可使图像在曲率较大的地方扩散强度增大,在曲率较小的地方,扩散强度减少到零。 CDD 模型方程为:
        CDD 模型求解与 TV 模型求解使用方法的相同,都是半点格式法。在 TV 模型的扩散系数只是图片梯度模的倒数 \frac{1}{|\triangledown u|},在 CDD 模型中引入了新的曲率信息,将已知信息向破损区域扩散的强度更改为\frac{g(|k|)}{\triangledown u},经过更改的扩散强度已经不仅仅依赖于图像的梯度信息,还需要考虑到等照度线的几何信息

2、matlab程序(完整代码,可直接运行)

close all;
clear;
clc;

imgoriginal=imread('yuan.png');  
figure;
subplot(1,3,1);
imshow(imgoriginal); 
title('待修复图')
[width,height] = size(imgoriginal); 
img= double(imgoriginal); 
mask = zeros(width,height/3,3); 
for j = 1:height/3
    for i = 1:width
        if ((imgoriginal(i,j,1) >220)&&(imgoriginal(i,j,2) >220)&&(imgoriginal(i,j,3) >220)) 
            mask(i,j,1) = 255; 
            mask(i,j,2) = 255; 
            mask(i,j,3) = 255; 
        else 
            mask(i,j,1) = 0; 
            mask(i,j,2) = 0;
            mask(i,j,3) = 0; 
        end 
    end 
end 
subplot(1,3,2);
imshow(mask);
title('检索的掩码图')
a=zeros(width,height);
I=cat(3,a,2*a,3*a);
J=cat(3,a,2*a,3*a);
n = 1; 
itertimes=2000; 
tic;
while n <= itertimes
    for i = 2:width-1
        for j = 2:height/3-1
           if (mask(i,j+1,1) == 255)||(mask(i,j-1,1) == 255)||(mask(i+1,j,1) == 255)||(mask(i-1,j,1) == 255)
                for k=1:3 
                grid_w(k) = (img(i,j,k)-img(i-1,j,k))^2+(1.0/16)*(img(i-1,j+1,k)+img(i,j+1,k)-img(i-1,j-1,k)-img(i,j-1,k))^2;
                grid_e(k) = (img(i,j,k)-img(i+1,j,k))^2+(1.0/16)*(img(i,j+1,k)+img(i+1,j+1,k)-img(i,j-1,k)-img(i+1,j-1,k))^2;
                grid_s(k) = (img(i,j,k)-img(i,j-1,k))^2+(1.0/16)*(img(i+1,j,k)+img(i+1,j-1,k)-img(i-1,j,k)-img(i-1,j-1,k))^2;
                grid_n(k) = (img(i,j,k)-img(i,j+1,k))^2+(1.0/16)*(img(i+1,j,k)+img(i+1,j+1,k)-img(i-1,j,k)-img(i-1,j+1,k))^2;
                I(i,j,k)=0.5*(img(i+1,j,k)-img(i-1,j,k))/sqrt(0.25*(img(i+1,j,k)-img(i-1,j,k))^2+0.25*(img(i,j+1,k)-img(i,j-1,k))^2+1);
                J(i,j,k)=0.5*(img(i,j+1,k)-img(i,j-1,k))/sqrt(0.25*(img(i+1,j,k)-img(i-1,j,k))^2+0.25*(img(i,j+1,k)-img(i,j-1,k))^2+1);
                Kw(k)=sqrt((I(i,j,k)-I(i-1,j,k)+(I(i-1,j+1,k)+I(i,j+1,k)-I(i-1,j-1,k)-I(i,j-1,k))/2)^2+(J(i,j,k)-J(i-1,j,k)+(J(i-1,j+1,k)+J(i,j+1,k)-J(i-1,j-1,k)-J(i,j-1,k))/2)^2);
                Ke(k)=sqrt((I(i+1,j,k)-I(i,j,k)+(I(i,j+1,k)+I(i+1,j+1,k)-I(i,j-1,k)-I(i+1,j-1,k))/2)^2+(J(i+1,j,k)-J(i,j,k)+(J(i,j+1,k)+J(i+1,j+1,k)-J(i,j-1,k)-J(i+1,j-1,k))/2)^2);
                Ks(k)=sqrt((I(i,j,k)-I(i,j-1,k)+(I(i+1,j,k)+I(i+1,j-1,k)-I(i-1,j,k)-I(i-1,j-1,k))/2)^2+(J(i,j,k)-J(i,j-1,k)+(J(i+1,j,k)+J(i+1,j-1,k)-J(i-1,j,k)-J(i-1,j-1,k))/2)^2);
                Kn(k)=sqrt((I(i,j+1,k)-I(i,j,k)+(I(i+1,j,k)+I(i+1,j+1,k)-I(i-1,j,k)-I(i-1,j+1,k))/2)^2+(J(i,j+1,k)-J(i,j,k)+(I(i+1,j,k)+J(i+1,j+1,k)-J(i-1,j,k)-J(i-1,j+1,k))/2)^2);
                w1(k) = Kw(k)/sqrt(1+grid_w(k))+1;
                w2(k) = Ke(k)/sqrt(1+grid_e(k))+1;
                w3(k) = Ks(k)/sqrt(1+grid_s(k))+1;
                w4(k) = Kn(k)/sqrt(1+grid_n(k))+1;
                img(i,j,k) =(w1(k)*img(i-1,j,k)+w2(k)*img(i+1,j,k)+w3(k)*img(i,j-1,k)+w4(k)*img(i,j+1,k))/(w1(k)+w2(k)+w3(k)+w4(k));
                end        
            end
        end
    end
    n = n+1;    
end 
img = uint8(floor(img)); 
toc;
subplot(1,3,3);
imshow(img,[]);
title('修复结果图')
imwrite(img,'CDD修复后.bmp');

3、运行结果

5、文献原文及代码文件点击下方连接,可直接跑通

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

6、参考文献

[1] ATF C, B JS. Nontexture Inpainting by Curvature-Driven Diffusions[J]. Journal of Visual Communication and Image Representation, 2001, 12(4):436-449.

创作不易,请尊重原创,引用请添加原文链接......

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码韵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值