使用imfilter_mex直接避开imfilter

Using imfilter_mex directly avoiding imfilter

最近我开始使用 imfilter 函数对图像与某些内核进行卷积。我已经运行这个函数几千次了。因此,我决定对这个函数的调用进行计时。

事实证明,确实有很多时间花在了参数检查、检查一些工具箱首选项(函数如useIPPL(a,outSize,h,nonzero_h))和其他不同的准备工作上。最终一切都来了 imfilter_mex 个电话。

现在的问题是:我是否知道我的过滤器是不可分离的,我知道我会给出正确的参数作为输入,我如何正确使用 Mathworks 提供的这个 mex 接口?

最初,这个mex位于图像处理工具箱的私有文件夹中。由于找不到默认的,我尝试移动到项目的目录中。

从那时起,调用随机崩溃,逻辑不明显。有没有人有直接使用这个mex的经验?

谢谢

小更新:崩溃有访问冲突类型,我必须在每次崩溃后终止 matlab

直接使用内部函数是危险的。移动内部 mex 文件也是如此。您不知道您正在绕过哪些保护措施,以及您可能正在破坏哪些依赖关系。

在这种特殊情况下,我猜测您的崩溃是由于将错误的数据类型传递给 mex 函数造成的。这正是所有参数验证所保护的类型。

如果你需要用相同的内核对许多图像进行卷积,那么你可以将整个堆栈的图像传递给imfilter。这可能会为您提供所需的速度,而无需对 MATLAB 进行逆向工程。顺便说一句,请记住,默认情况下 imfilter 执行相关而不是卷积。

编辑: 说到数据类型:如果您可以将 uint8 用于图像和内核,那应该会加快速度。