【图像处理】图像白平衡处理

【图像处理】图像白平衡处理_第1张图片

一、说明

        这就是我们今天要说的——图像增强!图像增强由一组用于优化图像的技术组成。这样,图像在视觉上变得更容易被人类感知,这反过来将进一步促进改进的图像处理分析。图像增强处理技术包括以下几种:

  1. 傅里叶变换

  2. 白平衡

  3. 直方图操作

        对于本文,讨论将围绕在 Python 中使用各种白平衡算法进行图像增强展开。但在其他任何事情之前,让我们记下向前推进的基本库。

import numpy as np
import matplotlib.pyplot as plt
from skimage.io import imread, imshow

二、关于白平衡

        首先,什么是白平衡(WB)?这是一个消除不真实色偏的色彩校正过程,因此在您想要的图像中,人看起来是白色的物体可以正确地呈现为白色。我们将实施三种白平衡技术,它们是:

  • 白补丁算法
  • 灰色世界算法
  • 真值算法

        为了便于说明,我们将使用下图:

【图像处理】图像白平衡处理_第2张图片

2.1 白补丁算法

        这种方法是 Color Constancy adaptation 的典型方法,它搜索最亮的色块用作白色参考,类似于人类视觉系统的工作方式。请注意,要在图像中观察到白色,RGB 颜色空间中的每个通道都应处于最大值。

        Python中的代码实现:

def white_patch(image, percentile=100):    """
    White balance image using White patch algorithm    Parameters
    ----------
    image : numpy array
            Image to white balance
    percentile : integer, optional
                  Percentile value to consider as channel maximum    Returns
    -------
    image_wb : numpy array
               White-balanced image    """    white_patch_image = img_as_ubyte((image*1.0 / 
                                   np.percentile(image,percentile,
                                   axis=(0, 1))).clip(0, 1))    return white_patch_image#call the function to implement white patch algorithmskio.imshow(white_patch(lily, 85))

【图像处理】图像白平衡处理_第3张图片

        使用白补丁算法增强百合

        正如所观察到的,可以看到图像变得相对明亮,中间的百合花变得非常鲜艳。这就是白色补丁算法如何增强我们的形象。现在,让我们看看下一个算法。

2.2 灰度图算法

        灰度世界算法是一种白平衡方法,它假设您的图像平均为中性灰色。如果图像中的颜色分布良好,则灰色世界假设成立。考虑到这个假设是正确的,平均反射颜色被假设为光的颜色。因此,我们可以通过查看平均颜色并将其与灰色进行比较来估计照明偏色。

        Python中的代码实现:

def gray_world(image):    """
    White balance image using Gray-world algorithm    Parameters
    ----------    image : numpy array
            Image to white balance
    
    Returns
    -------    image_wb : numpy array   
               White-balanced image    """
    image_grayworld = ((image * (access.mean() / 
                      image.mean(axis=(0,1)))).
                      clip(0,255).astype(int))    # for images having a transparency channel
    
    if image.shape[2] == 4:
    image_grayworld[:,:,3] = 255    return image_grayworld#call the function to implement gray world algorithmskio.imshow(gray_world(lily))

【图像处理】图像白平衡处理_第4张图片

        使用灰色世界算法增强百合

        看到图像,可以观察到它与原始图像没有太大偏差。原因之一可能是平均颜色及其与灰色的比较并不那么重要。那么让我们看看最后一个算法。

2.3 真值算法

        到目前为止,我们已经对色彩空间在图像上的表现做出了假设。现在,我们将选择一个补丁(图像的一部分)并使用该补丁重新创建我们想要的图像,而不是为增强我们的图像做出假设。

        为这张图片选择的补丁是你可以在下面看到的那个:

from matplotlib.patches import Rectanglefig, ax = plt.subplots()
ax.imshow(lily)
ax.add_patch(Rectangle((650, 550), 100, 100, edgecolor='b', facecolor='none'));

【图像处理】图像白平衡处理_第5张图片

        补丁(包含在蓝色边界框内)

【图像处理】图像白平衡处理_第6张图片

2.4 贴片的放大图像

        选择补丁后,我们现在将继续增强我们的形象。为此,我们可以通过两种方式做到这一点:

  •         MAX 方法——将原始图像的每个通道归一化为区域每个通道的最大值
  •         MEAN 方法——将原始图像的每个通道归一化为区域每个通道的平均值

        Python中的代码实现:

def ground_truth(image, patch, mode='mean'):      """
   White balance image using Ground-truth algorithm   Parameters
   ----------   image : numpy array
           Image to white balancr
   patch : numpy array
           Patch of "true" white
   mode : mean or max, optional
          Adjust mean or max of each channel to match patch
  
   Returns
   -------
   
   image_wb : numpy array
              White-balanced image   """   image_patch = img_patch   if mode == 'mean':
       image_gt = ((image * (image_patch.mean() / \
                   image.mean(axis=(0, 1))))\
                   .clip(0, 255)\
                   .astype(int))   if mode == 'max':
       image_gt = ((image * 1.0 / image_patch.max(axis
                    (0,1))).clip(0, 1))   #transparency channel   if image.shape[2] == 4:
       image_gt[:,:,3] = 255return image_gt

1)  两种模式的输出使用最大方法

skio.imshow(ground_truth(lily, img_patch, 'max'))

【图像处理】图像白平衡处理_第7张图片

2) 使用 Ground Truth 算法增强图像(MAX 模式)

        除了生动地强调百合之外,还可以观察到花朵周围的睡莲叶也得到了增强。绿色通道被大大突出。让我们看看这与使用均值作为模式有何不同。

        使用均值方法:

skio.imshow(ground_truth(lily, img_patch, 'mean'))

【图像处理】图像白平衡处理_第8张图片

3) 使用 Ground Truth 算法增强图像(MEAN 模式)

        输出稍微接近白色补丁输出,但后者更亮。它还强调了百合的颜色,但它没有突出垫子的颜色,而是使它变亮了。

        对于ground truth算法,输出图像在很大程度上取决于patch图像的选择。因此,通过可视化您想要获得的增强图像类型来明智地选择补丁。

       继续发布我的下一个更新!下次见。

你可能感兴趣的:(图像处理百汇园,图像处理,python)