白平衡——图像处理中的一种增强技术

重磅干货,第一时间送达

俗话说,一张图胜过千言万语。但是,如果它传达的内容与我们想看的内容不符怎么办?我们确定它应该来自那个图像,但不幸的是它不是很明显。如果说,有可能从一幅图像中发现我们想要了解的背景,并且很可能在这一过程中获得一些额外的见解,那会怎么样?

这就是我们今天要讨论的——图像增强!

图像增强由一组用于细化图像的技术组成。通过这种方式,图像在视觉上更容易被人类感知,这反过来将进一步促进改进的图像处理分析。图像增强处理技术包括:

  1. 傅里叶变换

  2. 白平衡

  3. 直方图处理

对于这篇文章,讨论将围绕python中用于图像增强的各种白平衡算法的使用展开。但在此之前,让我们记录下基本库。

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

首先,什么是白平衡(WB)?这是一个消除不切实际的色偏的色彩校正过程,以便在我们想要的图像中正确呈现白色的物体。我们将实施三种白平衡技术,它们是:

  1. 白色补丁算法

  2. 灰度世界算法

  3. 地面真值算法

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

白色补丁算法

这种方法是一种典型的颜色恒定性适应方法,它搜索最亮的色块以用作白色参考,类似于人类视觉系统的做法。请注意,要在图像中观察到白色,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))

使用白色补丁算法增强百合

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

灰度世界算法

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

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))

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

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

地面真值算法

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

为该图像选择的补丁程序如下所示:

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

补丁(包含在蓝色边框中)

补丁的放大图像

选择补丁后,我们现在将继续增强我们的图像。为此,我们可以采用两种方式:

  1. 最大值方法— 将原始图像的每个通道归一化为该区域每个通道的最大值

  2. 平均值在方法— 将原始图像的每个通道归一化为该区域每个通道的平均值

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

让我们看看两种模式的输出。

使用最大值方法:

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

使用地面真值算法增强图像(最大值模式)

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

使用平均值方法:

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

使用地面真值算法增强图像(平均值模式)

输出稍微接近白色补丁输出,但后者更亮。它还强调了百合花的颜色,但它没有突出浮叶的颜色,只是提亮了它。

对于地面真值算法,输出图像很大程度上取决于补丁图像的选择。因此,通过可视化我们想要获得什么样的增强图像来明智地选择补丁。

我们现在可以使用 3 种不同的方法来增强图像。

下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐

  • python+opencv图像处理(八)

    无所谓,谁会爱上谁... 无所谓,不能天天更... 只要是,不要一直断... -----------------------------------我是可爱的分割线 图像平移的意思就是将图像沿着x轴. ...

  • Python进阶——OpenCV之GUI

    文章目录 图像处理(Getting Started with Images) 读取图像 显示图像 保存图像 使用Matplotlib 视频处理(Getting Started with Videos) ...

  • 边缘和轮廓检测——计算机视觉的应用

    计算机视觉的重点是从计算机中的视频和图像中提取有意义的信息.在本文中,我们将从初学者开始探索一个使用 OpenCV 的出色计算机视觉项目. 其标题是"使用计算机视觉进行边缘和轮廓检测&quo ...

  • 使用 OpenCV 将卷积实现为图像过滤器

    卷积简介 卷积是计算机视觉 (CV) 中的一个流行术语.在讨论如何实现 CV 任务时,经常会提到卷积神经网络.因此,任何 CV 追求者都必须完全理解"卷积"一词. 卷积是几个图像处 ...

  • 如何在机器学习中应用图像处理以及使用相对于的技术

    Processing 可以用来提高图像质量,或帮助你从图像中提取有用的信息.它在医学成像等领域很有用,甚至可以用于隐藏图像中的数据. 在本文中,我将告诉你有关如何在机器学习中应用图像处理以及可以使用的 ...

  • Open3d学习计划—6(RGBD图像)

    Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...

  • 好玩的OpenCV:图像操作的基本知识(2)

    1.1随机生成像素 生成与test.jpg相同大小图片,但是像素是随机生成的. import numpy as np import cv2raw_image = cv2.imread('test图片路 ...

  • OpenCV-Python学习教程.3

    对于CV2的库来说,一个彩色的照片通道的排序是,返回的图像格式的通道并不是按R.G.B排列的,而是按B.G.R顺序排列的. b,g,r=cv2.split(image)image=cv2.merge( ...

  • 【原创】云计算中的三种存储技术

    本文适合云计算入门和深入学习云计算的伙伴,讲解了集中式存储.分布式存储.虚拟化存储三种存储技术. 概述:在云计算的领域离不开存储,那么云计算使用的存储包括三种类型:虚拟化的存储(虚拟化存储.非虚拟化存 ...

  • 传感器检测中的八种抗干扰技术分析

    概括 本文总结了传感器检测中的八种抗干扰技术,分析了各种抗干扰技术的工作效果.适用场景.操作流程和内部原理等细节.文章开头阐述了传感器在现代生活中的广泛应用程度,以及传感器在现实生活中使用的问题,直截 ...

  • 现代诗分行中的尾词复用技术——格律诗词所没有的一种有趣手法

    现代诗的语言技术,在很多方面突破了格律诗词,因而可以实视更丰富的诗意营造.其中,尾词复用技术是一个蛮有趣的技巧.以下面这首诗举例说明(此诗需慢速视读): <她> 她那椭圆的酸劲儿,新鲜 得 ...

  • 建筑工程中标难吗?揭秘高手靠“暗箱”技术中标的10种方法

    有一本引起世界级震动的书,叫做<隐秘的知识>,这本书显示,16世纪以来,几乎所有的画家都知道暗箱的存在,什么是暗箱? 就是利用"小孔成像"的原理,用投影仪把物体投射到画 ...

  • 图像处理中的深度学习技术

    深度学习算法现在是图像处理软件库的组成部分.在他们的帮助下,可以学习和训练复杂的功能;但他们的应用也不是万能的. "机器学习"和"深度学习"有什么区别? 在机器 ...

  • 工业物联网中的几种无线主流技术

    摘要:工业物联网的无线通信技术主要分为两类:一类是ZigBee.WiFi.蓝牙等短距离通信技术:另一类是LPWAN(low-power Wide-Area Network),即低功耗广域网通信技术.L ...

  • 【机器学习】机器学习中必知必会的 8 种降维技术,最后一款超硬核!

    探索性数据分析是数据科学模型开发管道的重要组成部分.数据科学家将大部分时间花在数据清洗.特征工程和执行其他数据整理技术上.降维是数据科学家在执行特征工程时使用的技术之一. 降维是将高维数据集转换为可比 ...

  • 物联网应用中常见的8种无线技术,你知道几个?

    前言 大家好,我是薛哥.现在的智能化行业快要进化到物联网时代了,做方案,提建议,每句话都离不开物联网与大数据,那么物联网中常用的技术有哪些?这个我们多少要了解一下. 智能化弱电工程设计与施工 弱电工程 ...

  • 在心理咨询过程中,有一种咨询技术叫自由联想法,那是怎样操作

    在心理咨询过程中,有一种咨询技术叫自由联想法,那是怎样操作