【问题标题】:Apply a filter bank in parallel并行应用滤波器组
【发布时间】:2016-08-10 21:10:28
【问题描述】:

我正在使用 Accord.NET 框架。

假设,我有三个 Gabor 过滤器,并且我需要将它们并行应用于图像。

以下是并行滤波器组的正确概念吗?

Bitmap bmp = (Bitmap)Bitmap.FromFile(@"C:\Lenna.png");

GaborFilter gf1 = new GaborFilter();
gf1.GaborKernelSize = 3;
gf1.Lambda = 4.0;
gf1.Theta = 45.0;////////////////////Theta is 45
gf1.Psi = 1.0;
gf1.Sigma = 2.0;
gf1.Gamma = 0.3;

GaborFilter gf2 = new GaborFilter();
gf2.GaborKernelSize = 3;
gf2.Lambda = 4.0;
gf2.Theta = 90.0;/////////////////////Theta is 90
gf2.Psi = 1.0;
gf2.Sigma = 2.0;
gf2.Gamma = 0.3;

GaborFilter gf3 = new GaborFilter();
gf3.GaborKernelSize = 3;
gf3.Lambda = 4.0;
gf3.Theta = 135.0;////////////////////Theta is 135
gf3.Psi = 1.0;
gf3.Sigma = 2.0;
gf3.Gamma = 0.3;

bmp = gf1.Apply(bmp);
bmp = gf2.Apply(bmp);
bmp = gf3.Apply(bmp);

MyWinForm f = new MyWinForm ();
f.PictureBox = bmp;
f.ShowDialog();

如果不是,那我怎样才能让它们并行工作呢?

【问题讨论】:

    标签: c# image-processing aforge accord.net filter-bank


    【解决方案1】:

    滤波器组只是一组滤波器,每个滤波器具有不同的参数,旨在针对信号的不同分量获得响应。

    在您的情况下,Gabor 过滤器,您更改的参数是方向,因此每个过滤器都会给出图像中具有所选方向的特征的响应。对于大小为 N 的滤波器组(N 个不同的滤波器),如果我们将其应用到一张图像上,我们会得到 N 个不同的图像,每张都是特定滤波器的结果。

    在您的代码中,您一个接一个地应用过滤器,第一个过滤器的输出是下一个过滤器的输入。在这种情况下,您无法并行过滤图像。

    应用 Gabor 拟合器只是 Gabor 核与图像的卷积。因此,您无需将每个 Gabor 滤波器单独应用于图像,您只需将 Gabor 滤波器卷积在一起并获得一个新的滤波器,该滤波器可以在整个图像上应用一次。

    【讨论】:

    • 如果我将过滤器组应用到图像以获得03图像然后通过应用AND操作将它们合并,它会起作用吗?
    • 当你过滤图像时,你不会得到二进制结果,所以我认为你不能做 AND 操作。如果您告诉我也许我可以提供帮助,我不知道您到底想达到什么目标。
    • 我只是想创建一组定向带通滤波器。 Gabor 源代码只是一个示例。
    • 银行本身只是过滤器的集合。如果您对每个过滤器响应进行阈值处理,而不是使用 AND 操作,您将获得在您使用的所有方向上具有非常高方向响应的所有像素。如果这是您的目标,是的,您可以并行应用它们(为每个过滤器使用一个线程),然后对结果设置阈值并使用 AND 操作。
    猜你喜欢
    • 2014-02-12
    • 2016-02-29
    • 2017-01-05
    • 1970-01-01
    • 2019-08-10
    • 2018-03-16
    • 2023-03-19
    • 2022-11-09
    • 2018-07-24
    相关资源
    最近更新 更多