【问题标题】:Weighting Different Color Channels in MATLAB在 MATLAB 中加权不同的颜色通道
【发布时间】:2016-03-01 12:06:51
【问题描述】:

我正在尝试组合彩色图像的通道,使每个通道按一定百分比加权。例如。我想要 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 是输出图像。这是最有效的方法吗?

【问题讨论】:

    标签: image matlab


    【解决方案1】:

    没有必要将r 转换为一个double 来与另一个double 相乘,然后将结果重新转换为uint8。您可以简单地将ruint8)乘以双精度,结果将自动转换为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);
    

    或者,如果您出于其他原因不必拆分 rgb,则一次将整个 rgb 图像相乘。

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

    【讨论】:

    • 你发帖时我只是在回答我自己的问题。我发现不使用我不熟悉的技术表达对我来说最简单的是:B(:,:,1) = B(:,:,1) * 0.4; 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2015-02-08
    • 1970-01-01
    相关资源
    最近更新 更多