📌  相关文章
📜  MATLAB |软件开发工具RGB图像到灰度图像的转换

📅  最后修改于: 2021-04-16 08:38:16             🧑  作者: Mango

RGB图像可以看作彼此堆叠的三个图像(红色比例图像,绿色比例图像和蓝色比例图像)。在MATLAB中,RGB图像基本上是M * N * 3的彩色像素阵列,其中每个彩色像素都是一个三元组,它对应于指定空间位置处RGB图像的红色,蓝色和绿色分量。

同样,可以将灰度图像视为单层图像。在MATLAB中,灰度图像基本上是M * N数组,其值已按比例缩放以表示强度。

在MATLAB中,有一个名为rgb2gray()的函数可用于将RGB图像转换为灰度图像。在这里,我们将不使用rgb2gray()函数将RGB图像转换为灰度图像。

我们的关键思想是通过计算所有三个颜色分量的加权和,将RGB图像像素转换为单个值,该RGB图像像素将对应于指定空间位置的图像的红色,蓝色和绿色分量的三重态值转换为单个值。

转换算法:

  1. 将RGB彩色图像读取到MATLAB环境中
  2. 将RGB图像中的红色,蓝色和绿色分量提取到3种不同的二维矩阵中
  3. 创建一个与RGB图像具有相同行数和列数的新矩阵,其中包含全零。
  4. 通过形成红色,绿色和蓝色分量的加权总和,将位置(i,j)处的每个RGB像素值转换为灰度值,并将其分配给新矩阵中的对应位置(i,j)
    grayscale value at (i, j) = 0.2989 * R(i, j) + 0.5870 * G(i, j) + 0.1140 * B(i, j);

    注意:用于计算灰度值的系数与用于在Rec.4中计算亮度(E’y)的系数相同。 ITU-R BT.601-7建议书(国际电联无线电通信部门对广播业务(电视)的建议)

执行:

% Function will take a colour image as input  and will return a grayscale image 
function [gray_img] = colouredToGray(img)
       % Extract Red colour component to R, Green colour component to G 
       % and Blue colour component to  B  
       R=img(:, :, 1);
       G=img(:, :, 2);
       B=img(:, :, 3);

      % Getting number of rows in M and number of column in N of RGB image matrix 
      % ~ is used to ignore dimension of RGB image
      % as size(img) function will return row, column and dimension of the RGB image
      [M, N, ~]=size(img);

     % creating a new 2-d matrix 'gray_img' of size M*N of 'uint8' data type with all 
     % elements  as zero 
     gray_img=zeros(M, N, 'uint8');

     % calculating grayscale values by forming a weighted sum of the R, G, and B components
     % for each pixel
     for i=1:M
         for j=1:N
               gray_img(i, j)=(R(i, j)*0.2989)+(G(i, j)*0.5870)+(B(i, j)*0.114);
              end
     end
end

上面的函数将从MATLAB命令窗口中调用

>> % Reading  an RGB image file in MATLAB environment 
>> img=imread('apple.jpg');

>> % The above function will be called here
>> I=colouredToGray(img);
>> figure, imshow(I);

输入:

RGB图像

输出:

灰度图像

好处:

  • 要存储RGB彩色图像的单个彩色像素,我们将需要8 * 3 = 24位(每个颜色分量为8位),但是当我们将RGB图像转换为灰度图像时,仅需要8位即可存储单个像素图片。因此,与存储RGB图像相比,存储灰度图像所需的内存要少33%
  • 灰度图像更容易在各种任务中工作,例如在许多形态学运算和图像分割问题中,单层图像(灰度图像)比三层图像(RGB彩色图像)更容易处理
  • 当我们处理单层图像时,也更容易区分图像的特征