基于范例的修复——如何计算轮廓的法线和等值线

Exemplar-Based Inpainting - how to compute the normal to the contour and the isophate

我正在使用 Criminisi 的基于范例的算法。在他的论文的第 3 节中,它描述了该算法。需要修复的目标区域表示为Ω (omega)。 Ω 与图像其余部分相交的边界或轮廓(表示为 Φ(phi))是 δΩ(三角洲欧米茄)。

现在在论文的第四页,它指出 np(n 下标 p) 是 δΩ 轮廓的法线. ▽Ip(也包括正交上标)是点p处的等光度线,也就是梯度转90度。

我的多变量微积分很生疏,但是我们如何使用 python 库计算 np▽Ipnp pδΩ 上的每个点 np 也不不同吗?

计算这些变量的方法有多种,具体取决于您对该边界的数字描述。 n_p是轮廓的法线方向

一般来说,如果您的轮廓是用解析方程描述的,或者如果您可以编写一个近似轮廓的解析方程(例如拟合 5 个点的样条曲线(您想要的点的每侧 2 个),您可以导出该样条曲线,使用

计算您想要的点的切线

然后,在该直线中获取一个单位向量,并获取该单位向量的正交向量。这一切都非常容易做到(不懂就问)。

那么你就有了 isophone。它看起来像是梯度的正交向量及其模数。计算图像上的 方向 梯度是图像处理中非常常用的技术。您可以轻松获得图像的 X 和 Y 导数(提示:numpy.gradient, or SO python gradient)。那么,图像的总梯度描述为:

因此只需创建一个具有 x 和 y 梯度的向量(取自 numpy.gradient)。然后得到那个的正交向量。

注意:如何获得二维正交向量

[v2x v2y] = [v1y, -v1x]