Matlab生成所有RGB图像

3
我正在为学校项目编写一个脚本/函数,它将在Matlab中生成所有24位RGB颜色图像。
我写了如下代码,但速度较慢(而且Matlab经常崩溃)。上一次运行它已经持续了5天。
以下是代码:
a = 1;
for r = 0:255
    for g = 0:255
        for b = 0:255
            colors(a,:) = [r g b];
            a = a + 1;
        end
    end
end

colors = reshape(colors, [4096, 4096, 3]);

colors = uint8(colors);
imshow(colors);
imwrite(colors, 'generated.png');

有没有更快的方法来做这件事?
2个回答

2
使用repmat/repelem分别构建三列,然后将它们连接起来。
colors = [repelem((0:255).',256^2),...
          repmat([repelem((0:255).',256) repmat((0:255).',256,1)],256,1)];

结果是2D。如问题中所述,结果应该是3D。 - OmG
1
@OmG 这是对原始帖中循环的向量化处理。OP其余的操作保持不变。 - Sardar Usama
我知道,但是OP怎么知道呢?! - OmG
1
那似乎很明显。不是吗? - Sardar Usama

2

通常预分配大型矩阵可以加快代码速度。在您目前的实现中,colors 的大小每次迭代都会增加一行,这需要大量的内存分配资源。尝试使用以下方式定义您的矩阵:

colors = zeros(2^24, 3);

在你的代码开头处添加uint8可以节省内存和时间,你甚至可以从一开始就将矩阵定义为uint8,而不是之后再进行转换。

colors = zeros(2^24, 3, 'uint8');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接