【问题标题】:convert Left half of RGB image into Grayscale (Matlab)将RGB图像的左半部分转换为灰度(Matlab)
【发布时间】:2023-04-02 12:20:01
【问题描述】:

我需要一个 Matlab 代码来将我的 RGB 图像的左半部分转换为灰度图像并保持右半部分不变?
我已经知道如何使用“rgb2gray”命令将整个图像转换为灰度,但我只想将左半部分或右半部分转换为灰度。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    由于 Matlab 中的图像本质上可以被视为(像素)矩阵(RGB 具有 3 个深度层,而不是灰度的单个深度层),您可以将它们视为这样,在这种情况下构造一个分割图像简化为对矩阵的一些简单操作:

    • 计算图像的灰度矩阵,
    • 并构造一个新矩阵(即您的分割图像),其中左半部分使用所有 3 层的灰度图像,而右半部分使用 3 个 RGB 层。

    例如

    imgRGB = imread('peppers.png');
    imgGray = rgb2gray(imgRGB);
    
    [r, c, ~] = size(imgRGB);
    c = round(c/2);
    
    imgSplit = imgRGB;
    for i = 1:3
      imgSplit([1:r],[1:c],i) = imgGray([1:r],[1:c]);
    end
    
    imshow(imgSplit)
    %// imwrite(imgSplit,'imgSplit.png')
    

    或者,如果您不希望两个新图像矩阵(imgGrayimgRGB)的空间开销,您可以直接改变 rgb 图像矩阵,产生与上述相同的结果。

    imgRGB = imread('peppers.png');
    
    [r, c, ~] = size(imgRGB);
    c = round(c/2);
    
    imgRGB([1:r],[1:c],1) = rgb2gray(imgRGB([1:r],[1:c],:)); 
    for i = 2:3
      imgRGB([1:r],[1:c],i) = imgRGB([1:r],[1:c],1);
    end
    
    imshow(imgRGB)
    %// imwrite(imgRGB,'imgSplit.png')
    

    【讨论】:

    • 一行版本:img(:, 1:end/2, :) = repmat(rgb2gray(img(:, 1:end/2, :)), 1, 1, 3);
    • @RafaelMonteiro 谢谢;您对上述内容的精简版是一个很好的补充,特别是如果简洁对于 OP 在实践中使用它很重要。
    • 谢谢你们两位,非常感谢您的回答。我们可以在其他地方详细讨论matlab代码吗? @Rafael Monteiro 和 dfri。
    猜你喜欢
    • 2011-12-03
    • 2014-02-26
    • 2014-12-22
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多