MATLAB中的快速膨胀图像函数
Posted
技术标签:
【中文标题】MATLAB中的快速膨胀图像函数【英文标题】:A fast dilation image function in MATLAB 【发布时间】:2015-10-24 06:27:37 【问题描述】:我将处理图像超像素的膨胀版本,但是 bwmorph
和 imdilate
对于我的应用程序来说非常慢。例如下面的代码 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。使用gpuArray
s 的图像处理工具箱有一个单独的 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 - 是的。 gpuArray
s 是 nVidia 独有的。如果您没有启用 nVidia CUDA 的卡,很遗憾,gpuArray
s 不可用。以上是关于MATLAB中的快速膨胀图像函数的主要内容,如果未能解决你的问题,请参考以下文章