📜  使用 OpenCV 进行图像修复

📅  最后修改于: 2022-05-13 01:55:52.353000             🧑  作者: Mango

使用 OpenCV 进行图像修复

图像修复是消除图像上的损坏,例如噪声、笔划或文本的过程。它在修复可能有划痕边缘或墨点的旧照片时特别有用。这些可以通过这种方法以数字方式删除。

图像修复通过用与相邻像素相似的像素替换损坏的像素来工作,因此,使它们不显眼并帮助它们与背景很好地融合。考虑下图。

图像右侧有一些标记。为了修复这个图像,我们需要一个遮罩,它本质上是一个黑色图像,上面有白色标记来指示需要校正的区域。在这种情况下,掩码是在 GIMP 上手动创建的。

修复算法 –

OpenCV 实现了两种修复算法:

  1. “一种基于快速行进法的图像修复技术”,Alexandru Telea,2004:
    这是基于快速行进方法 (FMM)。查看要修复的区域,该算法首先从边界像素开始,然后进入边界内的像素。它将每个要修复的像素替换为背景中像素的加权和,并为更近的像素和边界像素赋予更大的权重。
  2. “Navier-Stokes、流体动力学以及图像和视频修复”,Bertalmio、Marcelo、Andrea L. Bertozzi 和 Guillermo Sapiro,2001 年:
    该算法受到偏微分方程的启发。从边缘(已知区域)到未知区域,它传播等光线(连接相同强度点的线)。最后,最小化区域的变化以填充颜色。

FMM 可以使用cv2.INPAINT_TELEA调用,而 Navier-Stokes 可以使用cv2.INPAINT_NS调用。下面的Python代码使用 Navier-Stokes 修复了猫的图像。

import numpy as np
import cv2
  
# Open the image.
img = cv2.imread('cat_damaged.png')
  
# Load the mask.
mask = cv2.imread('cat_mask.png', 0)
  
# Inpaint.
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)
  
# Write the output.
cv2.imwrite('cat_inpainted.png', dst)

输出: