【图像修复】基于改进的Criminisi算法实现图像修复附matlab代码

1 内容介绍

针对Criminisi算法难以获得理想的修复效果,且存在修复时间过长等缺陷,提出一种改进Criminisi算法的图像修复算法。改进优先权计算方式找到最优待修复块,完善最优匹配块搜索策略,找到最优匹配块,采用新的置信值更新方式以获得更为理想修复效果,通过仿真实验测试算法性能,结果表明,相较于Criminisi算法,改进Criminisi算法不仅获得了较理想的图像修复效果,而且大幅度减少了修复时间,提高了图像修复的效果。​

2 仿真代码

%全局搜索,寻找最佳匹配块

function Block=whole_match(zx,zy,img,Wpatch,sourceRegion)

%zx,zy为图像的大小

wpatch=rgb2gray(Wpatch);

aa=size(wpatch,1);

bb=size(wpatch,2);%得到的待修复块的实际大小

sx=zx-aa+1;

sy=zy-bb+1;%确定搜索范围的最大值

min=1.0000e+10;%赋初值

p=0;

%计算找到的匹配块与待修复块在已知像素点处的距离

for i=1:sx

    for j=1:sy

        mpatch=img(i:i+aa-1,j:j+bb-1,:);%得到图像中和待修复块同样大小的块

        for x=i:i+aa-1;

            for y=j:j+bb-1;

                if sourceRegion(i,j)==0

                    p=1;

                end

            end

        end

        if any(p(:))%说明有破损点,不作为待修复块的最佳匹配块

            continue;

        end

        E=0;

        r=mpatch(:,:,1);

        g=mpatch(:,:,2);

        b=mpatch(:,:,3);

        R=Wpatch(:,:,1);

        G=Wpatch(:,:,2);

        B=Wpatch(:,:,3);

        rc=r-R;gc=g-G;bc=b-B;

        E=rc.^2+gc.^2+bc.^2;

        if E<min

            min=E;%取使得误差最小的块,并记住它们在图像中的起始位置

            hk=i;

            lk=j;

        end

    end

end

rows=hk:hk+aa-1;

cols=lk:lk+bb-1;%误差最小的块就是最佳匹配块 

Block=form_patch(rows,cols,zx);

3 运行结果

4 参考文献

[1]李爱菊, 钮文良. 基于改进Criminisi算法的图像修复[J]. 计算机工程与应用, 2014, 50(18):167-170.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值