2016-03-01 30 views
0

我试图将彩色图像的通道以这样的方式组合起来,即每个通道按一定比例加权。例如。我想要40%的红色通道,40%的绿色和20%的蓝色。我目前使用以下代码:在MATLAB中对不同的颜色通道进行加权

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

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

回答

0

没有必要将r作为双精度来乘以另一个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); 

或者如果您不必分手rgbf由于其他原因,请立即乘以整个rgb图像。

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

我只是当你发布时回答我自己的问题。我发现对于我而言,最简单的方法就是不使用我不熟悉的技术表达式:'B(:,:1)= B(:,:1)* 0.4;等等 – sebastianross