MATLAB中的快速膨胀图像函数

Posted

技术标签:

【中文标题】MATLAB中的快速膨胀图像函数【英文标题】:A fast dilation image function in MATLAB 【发布时间】:2015-10-24 06:27:37 【问题描述】:

我将处理图像超像素的膨胀版本,但是 bwmorphimdilate 对于我的应用程序来说非常慢。例如下面的代码 sn-p 对于 N=200 耗时超过 1 秒(parfor on 4 个线程):

parfor i=1:N   
    idx = superpixels==i;
    bwF = bwmorph(idx,'dilate',10);
end

有谁知道加速这个过程的任何其他 MATLAB 代码?

谢谢!

【问题讨论】:

imdilate 使用非常有效的算法来计算结果。如果它们很慢,那么您的问题可能一开始就是计算负担。 【参考方案1】:

如果您正在寻找高性能图像处理,您应该更改为 c++ 并使用 GPU(例如 CUDA)。它比使用 cpu 的并行内核更快。

【讨论】:

@Eugenio Ivorra with gpuArray 这在 Matlab 中也是可能的:de.mathworks.com/help/distcomp/gpuarray.html @horseshoe 是的,你说的很对,而且你甚至可以用 C 或 C++ 编写自定义的 CUDA 代码,你可以在 MATLAB 中运行。 问题是我的GPU比较老了,不是NVIDIA的。【参考方案2】:

Matlab 的图像处理工具箱包括数学形态学。 膨胀函数称为imdilate。工具箱使用 GPU 实现高速。

【讨论】:

我无法切换到 GPU,因为我没有合适的。 您不必这样做。这是一个自动选项。它会检测它是否存在,如果存在则使用它。 我认为它实际上并没有“自动”检测 GPU 并在必要时使用它。图像处理工具箱使用英特尔集成性能基元库来帮助加速计算,而不是使用 GPU。使用 gpuArrays 的图像处理工具箱有一个单独的 GPU 处理机制。您必须显式创建 gpuArray 才能使用 GPU 版本的图像处理工具箱。 当我尝试使用 gpuArray 时,出现以下错误:The CUDA driver could not be loaded. An NVIDIA GPU with CUDA driver is required. The required CUDA version is: 4 or greater. The library name used was: libcuda.so.1. The error was: libcuda.so.1: cannot open shared object file: No such file or directory. @user3517598 - 是的。 gpuArrays 是 nVidia 独有的。如果您没有启用 nVidia CUDA 的卡,很遗憾,gpuArrays 不可用。

以上是关于MATLAB中的快速膨胀图像函数的主要内容,如果未能解决你的问题,请参考以下文章

matlab形态学处理——膨胀腐蚀的原理

matlab对图像的开操作问题

图像识别基于形态学算法实现道路缺陷的自动识别matlab源码含GUI

Matlab中如何实现灰度膨胀和灰度腐蚀?

图像处理基于matlab自动报靶系统(重弹孔)

matlab实现形态学图像处理