基于范例的修补 - 如何计算轮廓和等温线的法线

时间:2015-07-10 03:17:04

标签: python opencv image-processing numpy calculus

我正在使用Criminisi的基于Exemplar的算法。在他的论文的第3部分中描述了算法。需要修复的目标区域表示为Ω(ω)。 Ω的边界或轮廓与图像的其余部分相符(表示为Φ(phi)),δΩ(delta omega) )。

现在在论文的第4页,它指出 np (n下标p)是δΩ轮廓的法线。 ▽Ip (也包括正交上标)是 p 点的等照度,即渐变为90度。

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

1 个答案:

答案 0 :(得分:1)

计算这些变量有不同的方法,所有这些都取决于您对该边界的数字描述。 n_p是轮廓的法线方向。

通常情况下,如果使用解析方程描述轮廓,或者您可以编写近似轮廓的解析方程(例如,拟合5个点的样条曲线(您想要的每一侧各2个),则可以派生该样条曲线,使用

计算所需点的切线

enter image description here

然后,在该行中获取单位向量并获得该正交向量。这一切都很容易(问你是否理解)。

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

enter image description here

所以只需创建一个带有x和y渐变的向量(取自numpy.gradient)。然后得到那个正交向量。

注意:如何在2D中获取正交向量

[v2x v2y] = [v1y, -v1x]