MATLAB大规模多任务技术

时间:2012-10-24 15:26:16

标签: matlab image-processing

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

CC(Labels,LabelsXplusOne) = true;

其中CC为100x100逻辑和标签,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 个答案:

答案 0 :(得分:2)

有几个问题突然出现在我身上......

  1. 我觉得你在做matrix indexing错了。现在看来,{em> Labels中的每个值将与LabelsXplusOne中的每个值配对,生成(1024 * 768) ^ CC行和列的总索引对。这可能需要很长时间。

    您可能想要的只是将每对值用作索引,例如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

  3. 这就是我想你想要的:

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