热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【OpenCV例程200篇】203.伪彩色图像处理

OpenCV例程200篇总目录201.图像的颜色空间转换202.查表快速替换(cv.LUT)203.伪彩色图像处理204.图像的色彩风格滤镜205.调节

OpenCV 例程200篇 总目录
201. 图像的颜色空间转换
202. 查表快速替换(cv.LUT)
203. 伪彩色图像处理
204. 图像的色彩风格滤镜
205. 调节色彩平衡/饱和度/明度


文章目录

  • 【youcans 的 OpenCV 例程200篇】203. 伪彩色图像处理
      • 什么是伪彩色图像?
      • 函数原型
      • 例程 14.5:灰度图像转换为伪彩色图像
      • 例程 14.7:多光谱合成的伪彩色图像


【youcans 的 OpenCV 例程200篇】203. 伪彩色图像处理



NASA 公布了蟹状星云 (Crab Nebula )的观测图像。茫茫太空,距离我们几亿光年的宇宙真是这样绚丽迷人吗?

NASA 专家撰文指出,蟹状星云彩色照片实际上人工合成的图像,这是不是暗示照片中的彩色是伪造的?


什么是伪彩色图像?

伪彩色图像是指对单色图像进行处理,结果转换得到颜色分量,构造为彩色效果的图像。伪彩色图像在形式和视觉表现为彩色图像,但其所呈现的颜色并非图像的真实色彩重现,仅仅是各颜色分量的像素值合成的结果。


  • (1)一类伪彩色图像是对灰度图像的增强,形成彩色效果。

伪彩色图像增强是指按照特定的准则对灰度图像进行处理,将不同的灰度级按照某种映射关系变换为不同的颜色分量。例如,天气预报中的气象云图,红外测温图像,一般都是伪彩色图像。

人眼的视觉特性,只能分辨 20 级左右的灰度,但可以分辨几千种色调和亮度。通过伪彩色图像增强,可以让灰度图像看起来更清楚,更容易分辨。

将灰度图像进行伪彩色增强,通常是基于一个设定的颜色查找表,将图像像素的灰度值替换为颜色查找表中对应的颜色值。这显然是典型的 LUT 应用场景。


  • (2)另一类伪彩色图像,是多光谱图像的编码合成图像。

光谱图像可以是可见光谱,也可以是红外、紫外、X光或其它信号。这些非可见光谱图像实际上既不是彩色图像,也不是灰度图像,“像素值”往往反映某种检测信号的强度。合成为彩色图像进行显示,只是为了便于观察和分析。

这在天文学观测中十分常用。NASA 公布的绚烂迷人的太空照片,并不是真实世界的色彩还原,而是将多种光谱信号图像进行编码组合和特效处理后,构造出的彩色图像。




函数原型

函数 cv.applyColorMap() 根据色彩映射表,将灰度图像变换为伪彩色图像。

cv.applyColorMap(src, colormap[, dst]) → dst
cv.applyColorMap(src, userColor[, dst]) → dst

参数说明:


  • src:输入图像,8 位灰度图像或彩色图像,cv_8U
  • dst:输出图像,大小和通道数与 src 相同
  • colormap:色彩映射表,OpenCV 自带色彩风格类型的颜色查找表
  • userColor:用户自定义的色彩映射表, 256个元素

注意事项:


  1. 输入图像可以是彩色图像。根据作者的测试,先将输入彩色图像转换为灰度图像,再按色彩映射表进行变换。
  2. 用户自定义的色彩映射表,是 256*3 数组。系统提供的 22种色彩映射表一般已经够用,就别折腾了。
  3. 例程中没有出现 cv.LUT 查表替换,在 cv.applyColorMap 内核中已经应用了查表替换方法。

色彩映射表:


  • OpenCV 提供了 22 种色彩风格类型,类型描述关键字与色彩效果如下图所示。

在这里插入图片描述


  • OpenCV 提供的色彩风格类型与 Matlab、Matplotlib 热图的颜色映射是类似的,描述关键字也是一致的。
    参见:http://matplotlib.org/examples/color/colormaps_reference.html



例程 14.5:灰度图像转换为伪彩色图像

# 14.5 灰度图像转换为伪彩色图像 gray = cv.imread("../images/Fig0525a.tif", flags=0) # 读取灰度图像h, w = gray.shape[:2] # 图片的高度, 宽度# 伪彩色处理pseudo1 = cv.applyColorMap(gray, colormap=cv.COLORMAP_HOT)pseudo2 = cv.applyColorMap(gray, colormap=cv.COLORMAP_PINK)pseudo3 = cv.applyColorMap(gray, colormap=cv.COLORMAP_RAINBOW)pseudo4 = cv.applyColorMap(gray, colormap=cv.COLORMAP_HSV)pseudo5 = cv.applyColorMap(gray, colormap=cv.COLORMAP_TURBO)plt.figure(figsize=(9, 6))plt.subplot(231), plt.axis('off'), plt.title("GRAY"), plt.imshow(gray, cmap='gray')plt.subplot(232), plt.axis('off'), plt.title("cv.COLORMAP_HOT")plt.imshow(cv.cvtColor(pseudo1, cv.COLOR_BGR2RGB))plt.subplot(233), plt.axis('off'), plt.title("cv.COLORMAP_PINK")plt.imshow(cv.cvtColor(pseudo2, cv.COLOR_BGR2RGB))plt.subplot(234), plt.axis('off'), plt.title("cv.COLORMAP_RAINBOW")plt.imshow(cv.cvtColor(pseudo3, cv.COLOR_BGR2RGB))plt.subplot(235), plt.axis('off'), plt.title("cv.COLORMAP_HSV")plt.imshow(cv.cvtColor(pseudo4, cv.COLOR_BGR2RGB))plt.subplot(236), plt.axis('off'), plt.title("cv.COLORMAP_TURBO")plt.imshow(cv.cvtColor(pseudo5, cv.COLOR_BGR2RGB))plt.tight_layout()plt.show()

在这里插入图片描述




例程 14.7:多光谱合成的伪彩色图像

蟹状星云 (Crab Nebula )的观测图像,是由钱德拉 X 射线天文台数据所形成的X射线图、哈勃太空望远镜拍摄的光学图像,和斯必泽空间望远镜拍摄的红外图像合成得到的。

例程结果图中,第一行是 3 种天文观测图像的观测数据图像,图像中的灰度都只是观测的信号强度,而不是实际的物理世界的亮度或灰度。

第二行是分别对 3 种观测图像进行伪彩色变换的结果,如果选择不同的色彩风格可以获得不同的效果。

第三行是将 3 种观测信号合成得到的伪彩色图像,其中左图、中图是简单地将 3 种观测信号分别作为 RGB 的一个色彩通道得到的伪彩色图像,右图是 NASA 公布的多光谱合成伪彩色图像。

虽然 NASA 图像的视觉效果更好,但仍然可以明显地看出,该图也是由第一行 3 种观测数据图像合成的。

在这里插入图片描述

# 14.7 多光谱编码合成的伪彩色图像# 蟹状星云 (Crab Nebula), 图片来源:# https://www.nasa.gov/mission_pages/chandra/multimedia/photo09-096.htmlcomposite = cv.imread("../images/CrabNebula.png", flags=1) # 读取多光谱合成图像nebulaOpti = cv.imread("../images/CrabNebula_Optical.jpg", flags=1) # 读取 OpticalnebulaXray = cv.imread("../images/CrabNebula_Xray.jpg", flags=1) # 读取 XraynebulaInfr = cv.imread("../images/CrabNebula_Infrared.jpg", flags=1) # 读取 Infraredh, w = nebulaOpti.shape[:2] # 图片的高度, 宽度grayOpti = cv.cvtColor(nebulaOpti, cv.COLOR_BGR2GRAY)grayXray = cv.cvtColor(nebulaXray, cv.COLOR_BGR2GRAY)grayInfr = cv.cvtColor(nebulaInfr, cv.COLOR_BGR2GRAY)# 伪彩色处理pseudoXray = cv.applyColorMap(nebulaXray, colormap=cv.COLORMAP_TURBO)pseudoOpti = cv.applyColorMap(nebulaOpti, colormap=cv.COLORMAP_MAGMA)pseudoInfr = cv.applyColorMap(nebulaInfr, colormap=cv.COLORMAP_HOT)# 多光谱编码合成compose1 = np.zeros((h, w, 3), np.uint8) # 创建黑色图像 BGR=0compose1[:, :, 0] = grayOpti # Optical -> Bcompose1[:, :, 1] = grayXray # Xray -> Gcompose1[:, :, 2] = grayInfr # Infrared -> Rcompose2 = np.zeros((h, w, 3), np.uint8) # 创建黑色图像 BGR=0compose2[:, :, 0] = grayXray # Xray -> Bcompose2[:, :, 1] = grayOpti # Optical -> Gcompose2[:, :, 2] = grayInfr # Infrared -> R# composite = cv.normalize(nebulaInfr + nebulaOpti, None, 0, 255, cv.NORM_MINMAX) # 归一化为 [0,255]plt.figure(figsize=(9, 9))plt.subplot(331), plt.axis('off'), plt.title("CrabNebula-Xray")plt.imshow(grayXray, cmap='gray')plt.subplot(332), plt.axis('off'), plt.title("CrabNebula-Optical")plt.imshow(grayOpti, cmap='gray')plt.subplot(333), plt.axis('off'), plt.title("CrabNebula-Infrared")plt.imshow(grayInfr, cmap='gray')plt.subplot(334), plt.axis('off'), plt.title("Xray Pseudo")plt.imshow(cv.cvtColor(pseudoXray, cv.COLOR_BGR2RGB))plt.subplot(335), plt.axis('off'), plt.title("Optical Pseudo")plt.imshow(cv.cvtColor(pseudoOpti, cv.COLOR_BGR2RGB))plt.subplot(336), plt.axis('off'), plt.title("Infrared Pseudo")plt.imshow(cv.cvtColor(pseudoInfr, cv.COLOR_BGR2RGB))plt.subplot(337), plt.axis('off'), plt.title("Spectral composited")plt.imshow(cv.cvtColor(compose1, cv.COLOR_BGR2RGB))plt.subplot(338), plt.axis('off'), plt.title("Spectral composited")plt.imshow(cv.cvtColor(compose2, cv.COLOR_BGR2RGB))plt.subplot(339), plt.axis('off'), plt.title("Composite image")plt.imshow(cv.cvtColor(composite, cv.COLOR_BGR2RGB))plt.tight_layout()plt.show()




【本节完】


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125298385)
Copyright 2022 youcans, XUPT
Crated:2022-6-14
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中



推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
张-苡_278
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有