算法介绍:
(1)相关代码
import CV2
src = CV2.imread('1.jpg')
mask = CV2.imread('2.jpg', CV2.IMREAD_GRAYSCALE) # 灰度图(IMREAD_GRAYSCALE)方式读入水印蒙版图像
dst = CV2.inpaint(src, mask, 3, CV2.INPAINT_TELEA)
CV2.imwrite('result.jpg', dst)
(2)对应算法
INPAINT_TELEA算法是 TELEA于2004年提出的一种快速行进修复算法,该算法首先对被修复区域边缘的像素点进行处理,然后层层向内推进,直至全部修复完毕。在具体的实现过程中,首先制作一个具有相同位置的黑色底白色水印(必须是单通道灰度图),然后使用 inpaint方法处理原始图像,具体使用时可将水印区放粗,以达到最好的处理效果。
原图象,水印蒙版图及去除效果
其去除原理是:先对被修复区域边缘的像素点进行处理,然后层层向内推进,直至全部修复完成。就单一像素而言,修复过程如下:
计算示意图
例如图Ω区域将被修复,为了修复Ω中的像素,需要计算新的像素值以替代原始值。下面假定我们要修正的 p点。选择一个小邻域 B (ε),即已知点值(只要已知),并以 p为中心(如图中虚线部分)。
现在需要的是新的灰度值,用邻域 Bε(p),来计算 p点。很明显,每个象素点所起的作用应该是不同的,即引入权值函数来确定哪个像素的值对新像素值有较大的影响。
计算公式