Image MATLAB中不同颜色通道的加权
我试图以这样一种方式组合彩色图像的通道,即每个通道按一定百分比加权。我要40%的红色通道,40%的绿色通道,20%的蓝色通道。我目前正在使用以下代码: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
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
(auint8
)乘以double,结果将自动转换为auint8
例如:
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代码>等。