可调金字塔滤波器

2024-05-19 22:47:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试理解创建steerable pyramid时使用的代码段的作用:

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)

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

我知道它创建了半个遮罩来构造方向滤波器,但由于第一行并没有旋转所有网格点,只是部分网格点,分成两组,然后使用索引来创建类似遮罩的圆的一部分,但显然在某种程度上遵守了径向和角度分解(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


Tags: httpsselfpyramid网格wwwnppi方向
1条回答
网友
1楼 · 发布于 2024-05-19 22:47:59

您在极坐标系中工作,其角度介于(-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 < -np.piself.AT[i] - k * np.pi/self.K > np.pi的点将无法正确映射到范围(-pi,pi)

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

ind_ = np.where(np.absolute(th1 - k*np.pi/self.K) <= np.pi/2.)只是得到了距离k*np.pi/self.k方向pi/2的所有点的索引

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

相关问题 更多 >