MATLAB大规模多任务技术

标签 matlab image-processing

我正在尝试将大约 100 万个值分配给 100x100 逻辑矩阵,如下所示:

CC(Labels,LabelsXplusOne) = true;

其中 CC 为 100x100 逻辑,Labels、LabelsXplusOne 为 1024x768 int32。

现在的问题是上述语句在现代 CPU 上大约需要 5 分钟才能完成。 显然它在 MATLAB 中实现得很糟糕,那么我们如何才能在不借助循环的情况下使上面的代码运行得更快呢?

如果您想知道,我需要这个语句来计算整数(而不是二进制)图像中的 Blob 。

还有:

max(max(Labels)) = 100
max(max(LabelsXplusOne)) = 100

编辑: 好,我知道了。也许这会在未来帮助其他人:

tic; CC(sub2ind(size(CC),Labels,LabelsXplusOne)) = true; toc;
Elapsed time is 0.026414 seconds.

现在好多了。

最佳答案

有几个问题引起了我的注意......

  1. 我感觉你正在做matrix indexing错误的。就目前而言,将发生的情况是 Labels 中的每个值都将与 LabelsXplusOne 中的每个值配对,为 CC 的行和列生成 (1024*768)^2 个总索引对。这可能就是花了这么长时间的原因。

    可能想要的是仅使用每对值作为索引,例如Labels(1,1),LabelsXplusOne(1,1) Labels(1,2)、LabelsXplusOne(1,2) 等。为此,您应该将索引转换为 linear indices使用函数SUB2IND .

  2. 此外,您的矩阵 CC 仅包含 10,000 个条目,但每个索引矩阵包含 786,432 个整数值。这意味着您最终将多次将值 true 分配给 CC 中的同一条目。您应该首先使用函数 UNIQUE 删除冗余的索引集。 ,然后使用它们将值分配给CC

这就是我认为你想要的:

CC(unique(sub2ind(size(CC), Labels, LabelsXplusOne))) = true;

关于MATLAB大规模多任务技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052387/

相关文章:

php - 从 PHP 中心裁剪图像

java - 分割后如何从图像中去除小物体

image-processing - 如何将CNN应用于基于多 channel 像素数据的每个 channel 的权重?

matlab - 如何在分组条形图的顶部绘制一条线?

matlab - CBIR系统如何计算 "Average Precision and Ranking"

matlab - 查找唯一值的索引时 "unique"函数的替代方案(Matlab)

python - 如何读取多个图像并用它们创建 3D 矩阵?

matlab - 在 MATLAB 中创建充满任意数据的大型 txt 文件

matlab - 如何在 MATLAB 中生成多重二维高斯图像分布

.net - GDI+ 用这个 "generic error"害死我了