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代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。