【问题标题】:Steerable pyramid filter可控金字塔滤波器
【发布时间】:2020-09-26 00:56:48
【问题描述】:

我正在尝试了解此代码 sn-p 用于创建可导向金字塔的作用:

th1[np.where(self.AT[i] - k*np.pi/self.K < -np.pi)] += 2.*np.pi
th1[np.where(self.AT[i] - k*np.pi/self.K > np.pi)] -= 2.*np.pi
ind_ = np.where(np.absolute(th1 - k*np.pi/self.K) <= np.pi/2.)
fil_[ind_] = self.ALPHAK * (np.cos(th1[ind_] - k*np.pi/self.K))**(self.K-1)

https://github.com/TetsuyaOdaka/SteerablePyramid/blob/master/steerable_pyramid.py 中的完整代码(第 267-270 行)

我知道它创建了一个掩码的一半来构建定向过滤器,但是由于第一行没有旋转所有网格点,只是旋转了两组,然后使用索引来创建掩码,就像一个圆,但显然以某种方式遵守径向和角度分解所需的约束(https://www.cns.nyu.edu/pub/eero/simoncelli95b.pdf)。

但我很难理解这实际上是如何工作的。有人可以帮忙解释一下这些台词吗?

  • self.AT 是已从笛卡尔坐标系转换为极坐标系的网格中的角度
  • k 是旋转的分子(基本上是方向)
  • self.K 是分母(分成多少个部分的圆已经被切割) ALPHAK 是归一化因子(尽管它背后的原因超出了我的理解)

(算法似乎从这里获取所有内容http://www.ipol.im/pub/art/2014/79/article.pdf

【问题讨论】:

    标签: python image-processing filtering


    【解决方案1】:

    您在极坐标系中工作,其角度介于 (-pi, pi] 之间。极坐标不是唯一的映射,如果您添加 2 * pi,每个角度都是相同的。

    这意味着角度大于 pi 或小于 -pi 的点需要映射到 (-pi, pi]。

    您可以通过测量距离self.AT[i] - k * np.pi/self.K 找到靠近方向k * np.pi/self.K 的点。

    但是具有self.AT[i] - k*np.pi/self.K &lt; -np.piself.AT[i] - k * np.pi/self.K &gt; np.pi 的点将无法正确映射到范围(-pi, pi]。

    所以前两行仅用于通过将点重新映射回 (-pi, pi] 来纠正映射,因此当您在第三行中使用条件 np.where(np.absolute(th1 - k*np.pi/self.K) &lt;= np.pi/2 时,所有角度都将正确映射

    ind_ = np.where(np.absolute(th1 - k*np.pi/self.K) &lt;= np.pi/2.) 线只是获取所有远离方向 k*np.pi/self.K 的 pi/2 点的索引。

    最后一行是计算这些点的过滤器值。

    【讨论】:

      猜你喜欢
      • 2019-05-28
      • 2015-12-09
      • 2019-09-14
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      相关资源
      最近更新 更多