2016-03-01 84 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