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

Image MATLAB中不同颜色通道的加权,image,matlab,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是输出图像。这是最有效的方法吗?无需将r转换为一个双精度,只需与另一个双精度相乘,然后将结果重新转换为uint8。您只需将r(au

我试图以这样一种方式组合彩色图像的通道,即每个通道按一定百分比加权。我要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
是输出图像。这是最有效的方法吗?

无需将
r
转换为一个双精度,只需与另一个双精度相乘,然后将结果重新转换为
uint8
。您只需将
r
(a
uint8
)乘以double,结果将自动转换为a
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);
或者,如果您不必出于其他原因分解
r
g
b
,请立即将整个
rgb
图像相乘

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

你发帖的时候我只是在回答我自己的问题。我发现不使用我不熟悉的技术表达式对我来说最简单的是:
B(:,:,1)=B(:,:,1)*0.4等。