Opencv图像处理学习(二十八)——图像污点修复

图像通常伴随干扰噪声的存在,在某些场景下会出现局部区域图像污染的情形,因此需要对其进行修复。数字修复可用来解决图像中小区域污染以重构原始图像,近年来被广泛应用在去除文本和Logo图标等场景中,利用重构去除图像中的划痕和污点。常用的图像修复基于快速行进的修复算法(FMM)的原理思想是先处理待修复区域边缘上的像素点,然后扩大区域进行遍历,直到修复完所有待修复的图像像素。

Opencv中提供的inpaint函数可以实现图像修复操作,具体参数详细介绍如下:

void inpaint(src,inpaintMask,dst,inpaitRadius,flags,inpaitRadius,flags);

其中参数src表示源图像,inpaintMask为输入掩码图像,dst为输出图像,inpaintRadius用于设定像素点修复邻域半径;flag为修复算法类型选择,可选择INPAINT_NS或者INPAINT_TELEA。

图像污点修复的实现过程如下:

<1>计算边界内部区域上p点一阶导数,以p点为中心选取一个小邻域P_{\varepsilon },根据给定的q点像素及其在该点的梯度值,可以计算出p点一阶导数:

I_{q}(p)=I(p)+\bigtriangledown I(q)(p-q)

<2>计算p点新像素值,根据邻域作用差别性,引入权重函数w^{-}(p,q),权重函数的计算通过距离参数与水平集参数获得,然后通过下式来计算新的p点像素值:

I(p)=\frac{\sum _{q\epsilon p_{\varepsilon }}w(p,q)[I(q)+\bigtriangledown I(q)(p-q)]}{\sum_{q\epsilon p_{\varepsilon }}w^{-}(p,q) }

<3>对上述图像进行新像素值生成操作,先完成待修复区域边缘上的像素点,逐步收缩待修复区域的边界,直至完成整个区域的修复。

你可能感兴趣的:(学习opencv,Opencv)