【问题标题】:Box filter approximations for the oriented gabor filters有向 Gabor 滤波器的箱形滤波器近似
【发布时间】:2014-07-14 03:44:35
【问题描述】:

我目前正在阅读这篇论文:Approximations in the HMAX Model,我对使用 Box 滤波器逼近 gabor 滤波器特别感兴趣。

去年我开发了一个合成指纹生成器(你可以在这里看到其中的一部分How to convolve an image with different gabor filters adjusted according to the local orientation and density using FFT?)。

但是生成器的最大缺陷是应用 gabor 过滤器所需的时间,我一直在研究如何实现过滤器的可分离版本,但由于数学不是我的强项,所以失败了。 现在这似乎比可分离过滤器更适合我的需求,因为它似乎更快,结果似乎足以满足我的需要。但是我不明白如何从那篇论文中的方程实现 gabor 的框过滤。

如下:

在本节中,我们尝试对 过滤器以实现显着更高的效率。目前,S1层 在模型中,由使用建模的简单线检测器组成 定向 Gabor 滤波器。但是,可以表示定向线 使用更简单的表示方式,例如如图所示的盒式过滤器 5. 这些过滤器具有非常稀疏的导数,使我们能够非常有效地计算卷积。图像与图像的卷积 滤波器 B(x, y) 可以使用滤波器的导数有效计算 如下。

盒式滤波器的二阶导数只包含脉冲和 因此每个位置只需要评估四个点 在图像中。积分图像也可以使用以下方法有效计算 [5, 1] 中概述的单通道算法。卷积的代价 使用这个近似是 O(N2c), c=4。与其他近似不同, 计算成本不取决于滤波器的大小 全部!。

这些术语是什么?那是图像积分的积分吗?如果这是我要问的超级基本的东西,我很抱歉,但老实说我不知道​​:(。

【问题讨论】:

  • d^2 B(x,y) / dxdy 是 B(x,y) 在 x 然后 y 的二阶导数,// I(x,y) 是二阶积分
  • @Khaled A Khunaifer - 在数字信号处理中是什么意思?知道符号很简单。
  • @hellfire769 在计算机科学术语中,导数将取代将整个过程线性化为通式的过程,而积分在技术上是相反的
  • This related question 的答案比这里目前接受的要好得多(根本没有解决这个问题)。这个问题询问的是“整体图像”,谷歌搜索该词将是了解更多信息的良好第一步。

标签: image algorithm image-processing processing-efficiency imagefilter


【解决方案1】:

您问题中的 rhs 方程是卷积的无穷小描述 - 您有卷积运算符 " * " 应用于图像的 2D 子范围 - 2d 子范围表示为 2D不可缺少的。 离散描述是类似的,但使用 sigma 符号“Σ”用求和算子表示 2D 子范围。而不是二维积分,它被应用为“ΣΣ”(我不知道如何在这里放置数学符号)。

卷积的朴素实现使用 2 个循环 - 在图像中的每个点中,您将内核值与该点和相邻点相乘 -

P(x+c/2) = P(x)*C(1)+P(x+1)*C(2)...+P(x+c)*C(c )(c 是内核的大小)。 该过程类似于长乘法或多项式与多项式乘法。

基本上可以通过多种方式应用卷积,一种方式是直接(求和),或者通过变换到其他空间(快速傅里叶变换)-Convolution Theorem

FFT 时间为 O(NlogN)。 如果内核的大小很大,则使用 FFT 进行卷积是有效的。 否则,如果内核大小很小:O(c) 。 由于过滤器大小为 4 - 使用直接卷积。

您还可以并行卷积(通过 cuda、open-mp 等...)

【讨论】:

  • 感谢您抽出宝贵时间来回答,我已经实现了 Gabor 滤波器的直接卷积和 FFT,我正在寻找实现 Gabor 滤波器的这种盒式滤波器近似,但基本上,它没有显示盒滤波器如何逼近 gabor 滤波器,而只是卷积的一般概念?
  • @AngelCastillo - 关于滤波器近似值 - 我简要地看了一下论文 - 近似值出现在第 2.1 节:S1 层的近似值 - 可分离滤波器。它是第一层,它显示了 Gabor Box 的近似值 - 参见指数方程到 f(x) g (y) (7 , 8) 的发展。有一个旋转矩阵来获得所有的过滤器。为简单起见,我还将各向异性因子设置为 1(一开始)
  • 嘿@chook,感谢所有帮助,按照 f(x) 的公式,我得到了这个 "x=exp(-(x^2)/(2* (sigma sigma)))*exp(sqrt(-1)*xcos(theta))”,注意“sqrt(-1)”(ix),如果不使用复数,我无法在 C++ 中做到这一点,有没有办法将其更改为等效的东西?我不知道该怎么做,即使我使用复数,整个表达式的结果将是一个复数,我不知道如何使用这些进行过滤。感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 2011-07-04
  • 2023-03-19
  • 1970-01-01
  • 2012-02-14
  • 2019-12-02
  • 2014-08-12
  • 2015-10-24
相关资源
最近更新 更多