随着AI技术的进步,图像修复的概念更加具体了,并且图像修复技术已经可以很成熟的应用到各种场景当中去。比如,AI购的技术可以用于防止图像质量的进一步被损坏;可用于添加或删除图片中的一些元素,同时可用于图像编辑:删除非必要的图像要素,匹配合理的内容填充来替换删除的内容。

目前,图像修复比较成熟的应用有滤波、后聚焦、散焦修复、单HDR、超级夜景、修复(快速去噪)、图像超分辨率等。比如在快联科技中,图像超分辨率,可以利用最新的图像处理和深度学习技术,在不损失照片质量的情况下提高其分辨率,让内容的呈现更加清晰震撼。


python opencv给图像添加高斯模糊 opencv模糊图像变清晰_深度学习


图1 图像修复前后对比

图像修复的基本流程如下:


python opencv给图像添加高斯模糊 opencv模糊图像变清晰_人工智能_02


图2 图像修复流程

数据获取

数据获取的功能,是将输入的图片转换到颜色空间。只有在RGB图像的前提下,才能更改RGB图像的线条。在图像修复的参数中,有两个主要参数: code和dstCn,其中,Code参数是将RGB转换到色彩空间的参数。

图像掩码获取之二值化

灰度值在理论上是channel的三维数组,实际上是二维数组,那么我们将对其进行二值化。这样可以突出需要修复的部分,并与未修复的图像进行比较。

图像掩码获取之去噪点

去噪点的原理是形态学运算,一般可以去构造一个结构化的元素,在使用过程中比较抽象。它的函数参数包括形状和元素形状。

图像修复

在OpenCV中,使用inpaint函数来实现修复算法。

C++
void inpaint( const Mat& src, constMat& inpaintMask, Mat& dst, double inpaintRange, int flags );
Python
dst = cv2.inpaint(src, inpaintMask,inpaintRadius, flags);
Src:源图像
inpaintMask:二进制掩码,指示要修复的像素。
Dst:结果图像
inpaintRadius:表示修复的半径
flags:修复算法,主要有INPAINT_NS(Navier-Stokes based method) or INPAINT_TELEA (Fast marching based method)

实现该功能的关键是确定图像掩膜,可以通过阈值选择,也可以手动选择。根据这一思想,采用下面的方法生成掩膜,并比较了图像修复的效果。


python opencv给图像添加高斯模糊 opencv模糊图像变清晰_深度学习_03


图3 图像修复代码

瓶颈和未来发展

一般来说,如果图像修复方法没有涉及到深度学习技术,那么很可能是利用了图像其余部分的统计信息来填补了空缺,通常这种方法会受限于图像的可用统计信息,因此,不具备视觉语义的概念。反之,使用了深度学习技术的图像修复方法,采用卷积滤波,可以用固定值替换缺失的内容。上述方法依赖于初始空位的值,空位区域缺乏纹理,且周围有明显的颜色对比或人工边缘响应。

总之,深度学习技术是当前图像修复的趋势,利用神经网络让图像拥有更高分辨率,能够处理缺陷的各种不规则,或者能处理任何部位缺陷的算法将是下一步的发展方向,让我们拭目以待。