基于范例的修复——如何计算轮廓的法线和等值线
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 和 ▽Ip? np p 在 δΩ 上的每个点 np 也不不同吗?
计算这些变量的方法有多种,具体取决于您对该边界的数字描述。 n_p
是轮廓的法线方向
一般来说,如果您的轮廓是用解析方程描述的,或者如果您可以编写一个近似轮廓的解析方程(例如拟合 5 个点的样条曲线(您想要的点的每侧 2 个),您可以导出该样条曲线,使用
计算您想要的点的切线
然后,在该直线中获取一个单位向量,并获取该单位向量的正交向量。这一切都非常容易做到(不懂就问)。
那么你就有了 isophone。它看起来像是梯度的正交向量及其模数。计算图像上的 方向 梯度是图像处理中非常常用的技术。您可以轻松获得图像的 X 和 Y 导数(提示:numpy.gradient, or SO python gradient)。那么,图像的总梯度描述为:
因此只需创建一个具有 x 和 y 梯度的向量(取自 numpy.gradient)。然后得到那个的正交向量。
注意:如何获得二维正交向量
[v2x v2y] = [v1y, -v1x]
我正在使用 Criminisi 的基于范例的算法。在他的论文的第 3 节中,它描述了该算法。需要修复的目标区域表示为Ω (omega)。 Ω 与图像其余部分相交的边界或轮廓(表示为 Φ(phi))是 δΩ(三角洲欧米茄)。
现在在论文的第四页,它指出 np(n 下标 p) 是 δΩ 轮廓的法线. ▽Ip(也包括正交上标)是点p处的等光度线,也就是梯度转90度。
我的多变量微积分很生疏,但是我们如何使用 python 库计算 np 和 ▽Ip? np p 在 δΩ 上的每个点 np 也不不同吗?
计算这些变量的方法有多种,具体取决于您对该边界的数字描述。 n_p
是轮廓的法线方向
一般来说,如果您的轮廓是用解析方程描述的,或者如果您可以编写一个近似轮廓的解析方程(例如拟合 5 个点的样条曲线(您想要的点的每侧 2 个),您可以导出该样条曲线,使用
计算您想要的点的切线然后,在该直线中获取一个单位向量,并获取该单位向量的正交向量。这一切都非常容易做到(不懂就问)。
那么你就有了 isophone。它看起来像是梯度的正交向量及其模数。计算图像上的 方向 梯度是图像处理中非常常用的技术。您可以轻松获得图像的 X 和 Y 导数(提示:numpy.gradient, or SO python gradient)。那么,图像的总梯度描述为:
因此只需创建一个具有 x 和 y 梯度的向量(取自 numpy.gradient)。然后得到那个的正交向量。
注意:如何获得二维正交向量
[v2x v2y] = [v1y, -v1x]