criminisi的思路是利用图像的已知区域对待修复区域进行填充。而填充的顺序是根据计算优先级确定的,填充的基本单位是自定义的像素块。
将图像分为已知区域(source region)和待填充或移除区域(target region),填充从target region 的边界开始,以边界p为中心,设置块的大小,形成像素块(fig.b),然后在已知区域中根据匹配准则找到相似的块,以及Fig.c中以q’及q"为中心的两个块,最后选取最佳匹配的块进行填充,Fig.d。
边缘轮廓填充优先级的计算准则:
红色箭头为轮廓的法线法向(垂直于轮廓切线),蓝点为点p像素梯度方向旋转90°。
根据这两个量我们可以计算两个值(confidence term 和data term),两者相乘即为该点像素的填充优先级:
算法的流程为:
1.读取待修复图片以及其掩膜;
2.根据掩膜得到待修复区域的边缘轮廓;
3.计算边缘轮廓填充次序(优先级);
4.针对对优先级最高的轮廓点,在原图已知区域寻找最佳匹配的图像块并进行填充
5.更新边缘轮廓,若边缘轮廓的大小大于零,表示还未填充完毕,则回到步骤2更新轮廓,开启新一轮迭代,直到填充完毕(没有边缘轮廓点)。