最近我开始使用imfilter函数用一些内核对图像进行卷积。我必须运行这个功能几千次。因此我决定计时这个函数的调用。
事实证明,在论证检查,检查一些工具箱首选项(如useIPPL(a,outSize,h,nonzero_h)等功能)和其他不同的准备工作上花费了大量时间。最终一切都来到了imfilter_mex电话。
现在的问题是:我知道我的滤镜是不可分的,我知道我会给出正确的参数作为输入,我如何正确使用Mathworks提供的这个mex界面?
最初,这个mex位于图像处理工具箱的私人文件夹中。由于无法找到默认值,我已尝试移动到项目目录中。
从那时起,调用随机崩溃,并没有明显的逻辑。有没有人有直接使用这个mex的经验?
谢谢
小更新:崩溃有访问冲突类型,我必须在每次崩溃后杀死matlab
答案 0 :(得分:4)
直接使用内部功能很危险。所以移动内部mex文件。你不知道你绕过了哪些保护措施,以及你可能会破坏哪些依赖性。
在这种特殊情况下,我猜你的崩溃是由于将错误的数据类型传递给mex函数引起的。这正是所有参数验证保护您的类型。
如果需要使用相同的内核对许多图像进行卷积,则可以将整个图像堆栈传递到imfilter
。这可能会为您提供所需的加速,而无需对MATLAB进行逆向工程。顺便说一句,请记住,默认情况下imfilter
执行相关而不是卷积。
编辑:谈论数据类型:如果您可以将uint8
用于您的图片和内核,那么这应该可以加快速度。