【问题标题】:Exemplar-Based Inpainting - how to compute the normal to the contour and the isophate基于示例的修复 - 如何计算轮廓的法线和等值线
【发布时间】:2015-07-10 03:17:04
【问题描述】:

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

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

我的多元微积分生锈了,但是我们如何用 python 库计算 np▽Ip 呢? np 对于 δΩ 上的每个点 p 是否也不同?

【问题讨论】:

  • 那篇论文真是太棒了

标签: python opencv image-processing numpy calculus


【解决方案1】:

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

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

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

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

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

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

[v2x v2y] = [v1y, -v1x]

【讨论】:

  • 好的,所以我需要了解如何计算轮廓线。一旦我弄清楚了轮廓线像素的位置,我需要将这条曲线定义为一个方程,然后推导出它。我看不出我们如何计算切向​​量,因为这条线只有一个变量。你能给我举个例子吗,我不知道如何计算这个。
  • 如果知道曲线在点和点的导数,就可以计算出曲线的切向量! @JakeFund en.wikipedia.org/wiki/Tangent
  • 1) 选择了您的观点P。 2)知道你对接近边界的曲线的描述(当然也经过P)3)推导该曲线4)在推导上替换点P。这应该给出一个数字。这是方程中的斜率 f'(a)。 (a=x 或 a =y 取决于您如何描述曲线。不相关)。 5) 用计算的斜率构建穿过点 P 的线。 6)得到该曲线上的单位向量。 7) 得到正交向量 8) ????? 9) 盈利! @JakeFund
  • 1.说得通。 2.你能给我一个很好的提示来获得边界吗,我知道图像的边界会有点难以定义。 3. 是的。 4. 假设我在 x 轴上定义了我的曲线,所以 a =x ,导数给了我们斜率,好吧。 5. 现在我们必须做一个直线方程,在代码中这看起来像:y + slope*(variable_X - x)... 所以这导致我 6. 我不确定如何获得单位向量但是我相信这是因为我对第 5 步缺乏了解。 7. 好的 8. 我会尽快解决这个问题。 9. 说起来容易做起来难。
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多