【问题标题】:How to apply logical indexing on multi-dimension matrix in matlab如何在matlab中对多维矩阵应用逻辑索引
【发布时间】:2025-12-12 17:25:01
【问题描述】:

我的问题很简单。我有一个 rgb 图像和一个逻辑矩阵。我想将逻辑矩阵对应元素中为真的像素设置为(150,160,170)。

例如:

    1 1 1 1 1     1 1 1 1 1    1 1 1 1 1                0 0 0 0 0
    1 1 1 1 1     1 1 1 1 1    1 1 1 1 1                0 0 0 0 0
r=  1 1 1 1 1  g= 1 1 1 1 1  b=1 1 1 1 1   logical_mat =1 0 0 0 0
    1 1 1 1 1     1 1 1 1 1    1 1 1 1 1                1 1 0 0 0
    1 1 1 1 1     1 1 1 1 1    1 1 1 1 1                1 1 1 0 0

我想要结果

    1   1   1   1 1     1   1   1   1 1    1   1   1   1 1 
    1   1   1   1 1     1   1   1   1 1    1   1   1   1 1 
r=  150 1   1   1 1  g= 160 1   1   1 1  b=170 1   1   1 1 
    150 150 1   1 1     160 160 1   1 1    170 170 1   1 1 
    150 150 150 1 1     160 160 160 1 1    170 170 170 1 1 

我已经尝试过逻辑索引,如果将像素设置为相同的颜色很容易

lm = repmat(logical_mat,[1 1 3]);
rgb(lm) = 150;

但我不知道如何逐个通道设置值。

提前致谢。

【问题讨论】:

  • 是的,我希望能够做到:rgb(lm) = [100 150 255] :(

标签: matlab multidimensional-array matrix-indexing


【解决方案1】:

您已经在创建正确的逻辑矩阵:

lm = repmat(logical_mat,[1 1 3]);

您需要创建一个相同大小的 3 通道颜色矩阵。

cm = repmat(cat(3,150,160,170), size(lm,1), size(lm,2))

然后,用lm 索引颜色矩阵:

rgb(lm) = cm(lm);

【讨论】: