在MATLAB中加权不同的颜色通道

时间:2016-03-01 03:05:00

标签: image matlab

我试图以这样的方式组合彩色图像的通道,即每个通道按一定的百分比加权。例如。我想要40%的红色通道,40%的绿色通道和20%的蓝色通道。我目前正在使用以下代码:

B(:,:,1) = uint8(double(r) * 0.4);
B(:,:,2) = uint8(double(g) * 0.4);
B(:,:,3) = uint8(double(b) * 0.2);

其中B是输出图像。这是最有效的方法吗?

1 个答案:

答案 0 :(得分:0)

没有必要将r转换为double,只是与另一个double相乘,然后将结果重新转换为uint8。您可以简单地将r(a uint8)乘以double,结果将自动转换为uint8

例如:

D = uint8(1) * 1.5;
D = 
    2

class(D)
    uint8

isSame = isequal(D, uint8(double(1) * 1.5))
    1

因此,对于您的示例,您可以将其简化为以下内容:

B(:,:,1) = r * 0.4;
B(:,:,2) = g * 0.4;
B(:,:,3) = b * 0.2;

至于你能做到的简洁:

B = cat(3, r * 0.4, g * 0.4, b * 0.2);

如果您因为其他原因不必分手rgb,请立即将整个rgb图片相乘。< / p>

B = bsxfun(@mtimes, rgb, reshape([0.4 0.4 0.2], [1 1 3]));