📜  如何在 MATLAB 中对彩色图像进行对比度增强?

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

如何在 MATLAB 中对彩色图像进行对比度增强?

彩色图像由 3 个通道组成,每个通道以 RGB 格式表示特定的颜色信息。 RGB 代表红色、绿色和蓝色。所有颜色仅由这 3 种颜色按比例混合生成。当谈到对比度增强时,在决定合适的方法时存在一个典型的困境。一种方法是分别增强每个通道的对比度,第二种方法是只增强灰度分量而不干扰图像的真实颜色分量。本文详细解释了这两种方法。

有两种方法可以增强彩色图像的对比度:

  • 天真的方法:分别增强每个颜色通道。
  • 标准方法:使用 HSV 颜色模型。

朴素算法:

分别应用红色通道、绿色通道和蓝色通道的对比度增强。结果,每个颜色分量都会被相应地增强,最终的颜色组合将与原始颜色组合有很大的不同。

朴素算法的步骤:

  • 阅读图像。
  • 分别对 RGB 的每个通道应用直方图均衡。
  • 显示两个图像。

使用的函数:

  • imread( ) 内置函数用于读取图像。
  • histeq( ) 内置函数用于应用直方图均衡。
  • imtool( ) 内置函数用于显示图像。

例子:

Matlab
% MATLAB code for Histogram Equalisation
% on RGB image.
% read the image
k=imread("apple.jpeg");
  
% Display original image.
imtool(k,[]);
  
% Apply histogram equalisation.
% on Red channel
k(:,:,1)=histeq(k(:,:,1));
  
% on Green channel
k(:,:,2)=histeq(k(:,:,2));
  
% on Blue channel
k(:,:,3)=histeq(k(:,:,3));
  
% Display enhanced image.
imtool(k,[]);


Matlab
% MATLAB code for apply Histogram 
% Equalisation on HSV image.
  
% Read the image.
k1=imread("apple.jpeg");
  
% Display original RGB image.
imtool(k1,[]);
  
% Convert RGB into HSV image.
k2=rgb2hsv(k1);
  
% Apply HE on Value part of HSV image.
k2(:,:,3)=histeq(k2(:,:,3));
  
% Convert HSV to RGB.
k3=hsv2rgb(k2);
  
% Display RGB image.
imtool(k3,[]);


输出:

图 1:原始 RGB 图像

 

图 2:增强的图像

代码说明:

  • k(:,:,1)=histeq(k(:,:,1));这条线执行红色通道的对比度增强。
  • k(:,:,2)=histeq(k(:,:,2));这条线执行绿色通道的对比度增强。
  • k(:,:,3)=histeq(k(:,:,3));这条线执行蓝色通道的对比度增强。
  • imtool(k,[]);此行显示增强的图像。

标准算法:

首先,将 RGB 图像转换为 HSV 格式。 H 和 S 通道包含颜色信息,而 V 通道包含类似于灰度信息的亮度值。这个想法是仅应用 V 通道的对比度增强,保持 H 和 S 不受干扰,这样原始颜色组合将被保留,结果图像将是高质量的。

脚步:

  • 阅读图像。
  • 将 RGB 图像转换为 HSV 格式。
  • 在值通道上应用直方图均衡。
  • 将 HSV 转换回 RGB 格式。
  • 显示生成的 RGB 图像。

使用的函数:

  • imread( ) 内置函数用于读取图像。
  • rgb2hsv( ) 内置函数用于将 RGB 转换为 HSV 图像。
  • histeq( ) 内置函数用于应用直方图均衡。
  • hsv2rgb( ) 内置函数用于将 HSV 转换为 RGB。
  • imtool( ) 内置函数用于显示图像。

MATLAB

% MATLAB code for apply Histogram 
% Equalisation on HSV image.
  
% Read the image.
k1=imread("apple.jpeg");
  
% Display original RGB image.
imtool(k1,[]);
  
% Convert RGB into HSV image.
k2=rgb2hsv(k1);
  
% Apply HE on Value part of HSV image.
k2(:,:,3)=histeq(k2(:,:,3));
  
% Convert HSV to RGB.
k3=hsv2rgb(k2);
  
% Display RGB image.
imtool(k3,[]);

输出:

图 1:原始 RGB 图像

图 2:增强的图像

代码说明:

  • k2=rgb2hsv(k1);此行将 RGB 输入图像转换为 HSV 格式。
  • k2(:,:,3)=histeq(k2(:,:,3));此行对 HSV 图像的值部分应用对比度增强。
  • k3=hsv2rgb(k2);此行将 HSV 转换回 RGB。
  • imtool(k3,[]);此行显示生成的 RGB 图像。

RGB 图像的直方图均衡会改变最终图像的颜色组合。原因很简单,因为它分别在 3 个通道上应用均衡。而 HSV 图像的均衡仅在一个通道上执行,即 Value。因此,色相和饱和度通道没有进行直方图均衡,颜色组合没有改变。第二种方法优于第一种方法,以便将原始图像的颜色组合保留到最终的增强图像中。