【OpenCV-Python】教程:8-2 图像修复 Image Inpainting

OpenCV Python 图像修复

【目标】

  • 去除小噪声和笔画等;

【理论】

大多数人家里都会有一些旧照片,上面有一些黑点,一些笔画等。你想过把它修复回来吗?我们不能简单地在油漆工具中删除它们,因为它只会用白色结构取代黑色结构,这是没有用的。在这些情况下,使用一种称为图像修补的技术。基本的想法很简单:用邻近的像素替换那些不好的标记,这样它看起来就像邻近的像素。看看下面这张图片(来自维基百科):

在这里插入图片描述

为此设计了几种算法,OpenCV提供了其中两种。两者都可以通过同一个函数访问;cv.inpaint()

第一种算法是基于Alexandru Telea在2004年发表的论文**“一种基于快速行进方法的图像修补技术”**。它是基于快速行进法的。考虑图像中要补绘的区域。算法从该区域的边界开始,在区域内部逐步填充边界内的所有东西。它需要一个小的邻域,围绕邻域上的像素进行内绘。该像素被附近所有已知像素的归一化加权和所取代。权重的选择是一件重要的事情。对靠近点的像素、靠近边界法线的像素和位于边界轮廓上的像素给予更多的权重。一旦一个像素被嵌入,它移动到下一个最近的像素使用快速行进方法。FMM确保已知像素附近的像素首先被补绘,因此它就像手动启发式操作一样工作。该算法通过使用标志来启用,cv.INPAINT_TELEA.

第二种算法基于Bertalmio, Marcelo, Andrea L. Bertozzi和Guillermo Sapiro在2001年发表的论文**“Navier-Stokes,流体动力学,and Image and Video Inpainting”**。该算法以流体动力学为基础,利用偏微分方程。基本原理是启发式的。它首先沿着边缘从已知区域移动到未知区域(因为边缘意味着连续的)。它在修补区域边界处匹配梯度向量的同时,继续等距(相同强度的线连接点,就像等高线连接点一样)。为此,使用了流体动力学中的一些方法。一旦它们被获得,就填充颜色以减少该区域的最小方差。该算法通过使用标志来启用,cv.INPAINT_NS.

【代码】

在这里插入图片描述

import numpy as np 
import cv2 

img = cv2.imread("assets/messi2.jpg")
mask = cv2.imread("assets/messi2_mask.jpg", 0)

dst1 = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
dst2 = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)

cv2.imshow("src", img)
cv2.imshow("mask", mask)
cv2.imshow("dst_TELEA", dst1)
cv2.imshow("dst_NS", dst2)

cv2.waitKey(0)
cv2.destroyAllWindows()

【接口】

  • inpaint
cv2.inpaint(	src, inpaintMask, inpaintRadius, flags[, dst]	) ->	dst

Restores the selected region in an image using the region neighborhood.

  • src: 输入图像,8位,16位,32位单通道或者8位3通道图像
  • inpaintMask: 修复掩码,8位单通道,非0表示需要修复;
  • inpaintRadius: 修复半径
  • dst: 输出的图像
  • flags: cv2.INPAINT_NScv2.INPAINT_TELEA

【参考】

  1. Image Inpainting
  2. Bertalmio, Marcelo, Andrea L. Bertozzi, and Guillermo Sapiro. “Navier-stokes, fluid dynamics, and image and video inpainting.” In Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society Conference on, vol. 1, pp. I-355. IEEE, 2001.
  3. Telea, Alexandru. “An image inpainting technique based on the fast marching method.” Journal of graphics tools 9.1 (2004): 23-34.
  4. Inpainting
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄金旺铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值