【问题标题】:Using imfilter_mex directly avoiding imfilter直接使用 imfilter_mex 避免 imfilter
【发布时间】:2015-07-22 01:00:39
【问题描述】:

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

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

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

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

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

谢谢

小更新:崩溃具有访问冲突类型,每次崩溃后我都必须杀死 matlab

【问题讨论】:

  • 也许所有这些参数检查都是有原因的......
  • @Dima 我会说如果问题与错误的论点有关,我会得到一致的崩溃图片,但不是随机的。当然,在实验之间使用相同数据的情况下。

标签: matlab image-processing


【解决方案1】:

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

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

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

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

【讨论】:

  • 我完全同意 +1。
猜你喜欢
  • 2019-11-07
  • 2021-09-08
  • 2012-10-05
  • 2020-06-23
  • 2020-09-11
  • 2015-12-14
  • 1970-01-01
  • 2012-05-23
  • 2013-06-18
相关资源
最近更新 更多