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 运行结果

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

【图像修复】基于改进的Criminisi算法实现图像修复附matlab代码_参考文献_02

编辑

【图像修复】基于改进的Criminisi算法实现图像修复附matlab代码_最优匹配_03

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

编辑

4 参考文献

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

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

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