📌  相关文章
📜  如何在MATLAB中将三通道彩色图像转换为灰度图像?

📅  最后修改于: 2022-05-13 01:54:44.355000             🧑  作者: Mango

如何在MATLAB中将三通道彩色图像转换为灰度图像?

在本文中,我们探讨了将 RGB 颜色模型转换为灰度。

灰度图像:灰度是从白色到黑色的一系列灰度,用于单色显示或打印输出。灰度图像最常用于图像处理,因为较小的数据使开发人员能够在更短的时间内完成更复杂的操作。

灰色图像包含 255 种黑色。 0 强度代表黑色,255 代表白色阴影。在这两者之间,存在着黑色和白色的阴影。当我们将数字从 0 增加到 255 时,深色逐渐消失,白色逐渐增加。灰度图像通常称为黑白图像。早期的相机只能捕捉灰色图像。

RGB 图像: RGB 是表示彩色图像的颜色模型之一。 RGB 代表红色、绿色和蓝色。 RGB 图像包含 3 个通道,每个通道用于 RGB 颜色。它由三个二维矩阵表示。在 RGB 模型中,强度值范围从 0 到 255。强度 0 表示深红色、绿色或蓝色。随着强度的增加,颜色逐渐消失,白度增加。 RGB 强度 0 代表黑色,1 代表白色。

RGB value 0 (black) means Red=Green=Blue=0
RGB value 1 (white) means Red=Green=Blue=255

有许多常用的方法可以将 RGB 图像转换为灰度图像,例如

  • 平均法
  • 加权法

平均法:平均法取R、G、B的平均值作为灰度值。

Grayscale = (R + G + B ) / 3

如果 R、G、B 的和大于 255,可能会出现溢出错误。为避免异常,应分别计算 R、G 和 B。

Grayscale = R / 3 + G / 3 + B / 3

平均方法很简单,但效果不如预期。原因是人类眼球对 RGB 的反应不同。眼睛对绿光最敏感,对红光不太敏感,对蓝光最不敏感。因此,三种颜色在分布中应该具有不同的权重。这将我们带到了加权方法。

加权法:加权法,也称为光度法,根据波长对红色、绿色和蓝色进行加权。改进后的公式如下:

Grayscale = 0.299R + 0.587G + 0.114B

将 RGB 转换为灰度:

MatLab 有一个为此目的的内置函数,它使用 RGB 通道的权重。但是我们可以通过取红色、绿色和蓝色通道的平均值来简单地将 RGB 转换为灰度。

Gray = (Red + Green + Blue)/3; = 0.33 * Red + 0.33 * Green + 0.33 * Blue Matlab function: Gray = 0.299 * R + 0.587 * G + 0.114 * B

使用的函数:

  • 使用 imread()函数读取图像。
  • 使用 imtool()函数显示图像。
  • 访问特定颜色通道:k(:, :, 1);

例子:

Matlab
% Code in MatLab for separating Red,
% Green and Blue components.
% Read the colour image.
k=imread("yellow1.jpg");
  
% display original image.
imtool(k,[]);
  
% display Red channel.
imtool(k(:,:,1),[]);
  
% display Green channel.
imtool(k(:,:,2),[]);
  
% display Blue channel.
imtool(k(:,:,3),[]);


Matlab
% MATLAB code for convert RGB into Grayscale.
% read the image.
k=imread("yellow1.jpg");
  
%Convert into double format.
k=double(k);
  
% take the average of R, G and B channels.
k1=(k(:,:,1)+k(:,:,2)+k(:,:,3))/3;
  
% display after converting into uint8 format.
imtool(uint8(k1),[]);


输出:

图 1:原始彩色图像

图 2:红色通道的输出

图 3:绿色通道的输出 

图 4:蓝色通道的输出

代码说明:

  • k=imread(“yellow1.jpg”);此行读取彩色图像。
  • imtool(k,[]);此行显示原始图像。
  • imtool(k(:,:,1),[]);此行显示红色通道。
  • imtool(k(:,:,2),[]);此行显示绿色通道..
  • imtool(k(:,:,3),[]);此行显示蓝色通道

2. MatLab中将RGB转换为灰度的代码。

MATLAB

% MATLAB code for convert RGB into Grayscale.
% read the image.
k=imread("yellow1.jpg");
  
%Convert into double format.
k=double(k);
  
% take the average of R, G and B channels.
k1=(k(:,:,1)+k(:,:,2)+k(:,:,3))/3;
  
% display after converting into uint8 format.
imtool(uint8(k1),[]);

输出:

图 5:彩色图像

 

图 6:灰度图像

代码说明:

  • k=imread(“yellow1.jpg”);此行读取图像。
  • k=双(k);此行转换为双格式。
  • k1=(k(:,:,1)+k(:,:,2)+k(:,:,3))/3;这条线取 R、G 和 B 通道的平均值。
  • imtool(uint8(k1),[]);此行转换为 uint8 格式后显示灰色图像。