点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

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

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

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

  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 algorithmParameters----------image : numpy arrayImage to white balancepercentile : integer, optionalPercentile value to consider as channel maximumReturns-------image_wb : numpy arrayWhite-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 algorithm
skio.imshow(white_patch(lily, 85))

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

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

灰度世界算法

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

Python中的代码实现:

def gray_world(image):"""White balance image using Gray-world algorithmParameters----------image : numpy arrayImage to white balanceReturns-------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 channelif image.shape[2] == 4:image_grayworld[:,:,3] = 255return image_grayworld
#call the function to implement gray world algorithm
skio.imshow(gray_world(lily))

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

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

地面真值算法

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

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

from matplotlib.patches import Rectangle
fig, 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 algorithmParameters----------image : numpy arrayImage to white balancrpatch : numpy arrayPatch of "true" whitemode : mean or max, optionalAdjust mean or max of each channel to match patchReturns-------image_wb : numpy arrayWhite-balanced image"""image_patch = img_patchif 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 channelif image.shape[2] == 4:image_gt[:,:,3] = 255
return image_gt

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

使用最大值方法:

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

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

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

使用平均值方法:

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

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

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

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

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

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

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

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

  1. Q78:规则网格(Regular Grids)——Ray Tracing中的一种加速技术

    当图形中需要ray trace的物体的数目很大时(比如十万.百万.千万),这时我们就需要对图形生成的过程进行加速. 按照常规办法,需要判断每条光线和每一个物体的碰撞情况.这样一来,则需要耗费大量的时间 ...

  2. 太极链,区块链中的一种及其技术奥义

    太极链是一种安全且灵活的机制,允许在不需要中介的情况下进行任何有价值的对等传输.它通过三个关键特性实现这一点:用于进行交易的对等网络,用于记录和查看这些交易的分布式,不可变的分类账,以及用于在检测欺诈 ...

  3. SamplePairing:针对图像处理领域的高效数据增强方式 | PaperDaily #34

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

  4. 计算机技术在美术方面的应用,计算机技术在图形图像处理中的应用

    周明伟 王艳 摘要:计算机技术作为当下流行的技术之一,受到了越来越多的关注,无论是人们的日程生活,还是各行各业的发展生产过程当中都离不开计算机技术.在科学技术高度发达的今天,计算机技术得到了不断地创新 ...

  5. 5G移动性增强技术分析

    [摘  要]在R15中,5G的移动性采用传统的切换机制,切换性能难以满足时延敏感业务的要求,且因5G频率较高,其切换失败率也会较高,针对这些问题,在R16中对5G移动性技术进行了增强.首先介绍R16三 ...

  6. 新兴人类增强技术与人类未来

    基金项目:国家社会科学基金重大项目"当代新兴增强技术前沿的人文主义哲学研究"(20&ZD044):国家社会科学基金"新兴生命科技的人文风险及其治理路径研究&quo ...

  7. 视频云技术系列 - 5G 700MHz关键技术,大塔小塔模式和无线上行增强技术原理

    作者,中国移动李琳,咪咕灯塔项目组 伴随移动通信技术的发展,广播电视用户对移动端音视频需求快速增长.传统的广播电视技术,已无法满足市场需求:世界各国组织机构逐渐意识到,5G 无线网将成为广播电视媒体的 ...

  8. NLP的数据增强技术总结

    文章目录 一.简单的数据增强技术 EDA (Easy Data Augmentation) 即Normal Augmentation Method 1.`同义词替换`(Synonym Replacem ...

  9. Java字节码增强技术

    文章目录 字节码 字节码增强 字节码增强技术 字节码 字节码含义:待补充. Java为了能让Java程序编译一次到处运行,用Java 编译器将程序对源代码编译生成固定格式的字节码(.class文件)供 ...

最新文章

  1. TypeError: __init__() takes 1 positional argument but 4 were given
  2. FPGA设计心得(11)关于FIFO IP核使用的一点注意事项
  3. Android之多线程工作-AsyncTask与handler
  4. c# 低功耗蓝牙_c# - 如何使用C#手动绑定到WinForm中的蓝牙低能耗设备? - 堆栈内存溢出...
  5. 回溯算法详解:理论+基础类回溯题解
  6. 穷小子做网站赚钱终得丈母娘认可
  7. JAX 是 Google 开发的计算机视觉研究
  8. 药品计算机数据备份管理制度,药品记录与数据管理规范(征求意见稿)
  9. 传统媒体如何借力微信
  10. 关系模型中的3中关系(一对一,一对多,多对多)
  11. 论文发表如何选择期刊
  12. python人民币和美元转换-【菜鸟学Python】案例一:汇率换算
  13. Lisa随手记 1.7 帮助
  14. 生容易,活容易,生活不容易
  15. 色差仪如何控制油漆涂层色差
  16. JavaScript百炼成仙 1.20 函数七重关之二 (作用域)
  17. 数学的故事之“共轭”
  18. R COOKBOOK 学习笔记
  19. AFNetworking 支持cookies的解决方案
  20. 细数云计算产品和技术-云计算安全

热门文章

  1. CVPR 2019审稿满分论文:中国博士提出融合CV与NLP的视觉语言导航新方法
  2. 千呼万唤始出来!OpenCV 4.0正式发布!
  3. 公开课 | 详解CNN-pFSMN模型以及在语音识别中的应用
  4. “环太平洋”走进现实,五角大楼研发人与武器互动的意念控制技术
  5. AI校招程序员最高薪酬曝光!腾讯80万年薪领跑,还送北京户口
  6. redis五大数据类型使用场景
  7. Centos7搭建k8s环境教程,一次性成功,收藏了!
  8. 为什么要放弃 Lombok ?
  9. springboot应用如何提高服务吞吐量?
  10. 老大说,网上这种获取真实IP地址的方法不对,我不信...