我试图以这样的方式组合彩色图像的通道,即每个通道按一定的百分比加权。例如。我想要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
是输出图像。这是最有效的方法吗?
答案 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);
如果您因为其他原因不必分手r
,g
和b
,请立即将整个rgb
图片相乘。< / p>
B = bsxfun(@mtimes, rgb, reshape([0.4 0.4 0.2], [1 1 3]));