小编Ang*_*llo的帖子

如何使用FFT调整根据局部方向和密度调整的不同gabor滤波器的图像?

我目前正在使用SFinGe方法(由Maltoni,Maio和Cappelli)生成合成指纹的链接:http://biolab.csr.unibo.it/research.asp ?organize=Activities&select=&selObj=12&pathSubj= 111%7C%7C12&

其中一个步骤要求我对图像应用不同的gabor滤镜,图像中的每个像素都有一个方向和频率相关联,因此卷积不是通过整个图像上的一个内核完成的,但过滤器必须在此过程中根据需要进行更改在像素的那些属性上,这样,图像上的每个像素以不同的方式被改变.

如果以这种方式应用滤镜,并对图像进行多次卷积(您还必须在每次卷积后对图像进行二值化),您将获得:

在此输入图像描述

一个主指纹,这个图像需要大约20秒生成(这是太慢了,这就是我想用FFT做的原因),因为我不得不执行5次卷积来完成它(你从一些开始随机黑点).

我的过滤器是30x30,图像是275x400.总共有36000个过滤器,每个度数和密度一个(密度从0到100).我正在计划将滤波器的数量从36000减少到9000,因为我可以用这些来覆盖所有角度.此外,所有过滤器都预先计算并存储在过滤器组中.

这是gabor卷积实现的C#中的源代码:

这两种方法执行卷积:

    /// <summary>
    /// Convolve the image with the different filters depending on the orientation and density of the pixel.
    /// </summary>
    /// <param name="image">The image to be filtered.</param>
    /// <param name="directionalMap">The directional map.</param>
    /// <param name="densityMap">The density map.</param>
    /// <returns></returns>
    public double[,] Filter(double[,] image, double[,] directionalMap, double[,] densityMap)
    {
        int       midX                          = FILTER_SIZE / 2;
        int       midY                          = FILTER_SIZE / 2;
        double[,] filteredImage                 = new double[image.GetLength(0), …
Run Code Online (Sandbox Code Playgroud)

image fft filter fingerprint wavelet

14
推荐指数
1
解决办法
9959
查看次数

如果有重复的符号,如何可靠地使用dlsym?

晚上好,我目前正在使用基于Plux.net模型的C++/Linux插件系统.

为了简单起见,我基本上用extern C(to unmangle)声明一个符号(让我们称之为pluginInformation),我的插件管理器在预先配置的导入(.so)中查找该符号.

问题是主应用程序声明了相同的符号,不仅如此,它所具有的任何依赖关系也可能具有符号.(因为在这个插件信息中,模块可以发布插件和/或插槽).

因此,当我的PluginManager启动时,它首先尝试在主程序中找到符号(将NULL传递给dlopen),然后它尝试在其任何依赖项中找到符号(使用dl_iterate_phdr).最后它将dlopen一组配置导入(它将读取用户配置的.so的路径,dlopen它们,最后dlsym pluginInformation符号).

然后使用在所有模块中找到的pluginInformation的集合来构建扩展三.

如果我在主程序中声明符号并使用dlopen加载导入,它就可以工作(只要我在导入时失去标记RTLD_DEEPBIND).

但是对于应用程序依赖项,我没有选择传递标志(我可以,但它没有做任何事情),因为这个.sos是在应用程序启动时加载的.

现在,当我尝试使用从依赖项中获得的任何符号(启动时加载的符号)时,我会遇到分段错误.我假设问题是我在符号表中有几个同名的符号,奇怪的是它似乎正确地识别出有几个符号,它甚至给我正确的.so路径,其中符号是声明,但是一旦我访问该符号就会发生分段错误.如果我只在主程序或其中一个依赖项中声明符号,则一切正常.

如何使用dlsym管理主程序和strat up导入之间的重复符号?

我一直在考虑保持修剪,然后尝试找到符号表的符号,但我不确定这是否可能(以编程方式列出模块中的所有符号).

PD:对不起,我没有发布任何代码,但我现在不在家,我希望我试图做的描述很清楚,如果不是我可以明天发布一些代码.

c c++ linux dlopen dlsym

6
推荐指数
1
解决办法
1006
查看次数

标签 统计

c ×1

c++ ×1

dlopen ×1

dlsym ×1

fft ×1

filter ×1

fingerprint ×1

image ×1

linux ×1

wavelet ×1