图像的颜色及Halcon颜色空间转换transfrom_rgb/trans_to_rgb/create_color_trans lut

2023-12-30 08:12

本文主要是介绍图像的颜色及Halcon颜色空间转换transfrom_rgb/trans_to_rgb/create_color_trans lut,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像的颜色及Halcon颜色空间转换

文章目录

  • 图像的颜色及Halcon颜色空间转换
    • 一. 图像的色彩空间
      • 1. RGB颜色
    • 2. 灰度图像
    • 3. HSV/ HSI
    • 二. Bayer 图像
    • 三. 颜色空间的转换
      • 1. trans_from_rgb算子
      • 2. trans_to_rgb算子
      • 3. create_color_trans_lut算子

图像的颜色能真实地反映人眼所见的真实世界。图像的颜色信息,特别是通道信息,有助于感兴趣特征的描述,也有利于从空间域上对图像进行分割或增强操作。下面将介绍图像的色彩表达方式及其通道操作。

一. 图像的色彩空间

1. RGB颜色

RGB 是我们最熟悉的一种表示颜色的方式,也就是彩色。彩色图像的每个像素拥有3个通道,各8位,分别表示R(Red,红色)、G(Green,绿色)、B(Blue,蓝色)3个分量,各自的取值范围都为0 -255。将这3种分量组合,可以得到更多的颜色表示方式。例如,红色和绿色结合可以产生黄色,红色和蓝色结合产生红色,绿色和蓝色结合产生青色。这3种颜色分量也可以用来表示不同等级的灰色。例如,当3个分量都为0时,表示的颜色是黑色;当3个分量都为最大值255时,将得到白色。3个分量的组合,将产生范围为0~255的由深到浅的灰色。

2. 灰度图像

灰度图像即单通道图像,每个像素的灰度值为0~255,其中0表示全黑,255表示全白。对于显示或者形态学处理等操作来说,灰度图像已经足够满足需求。因此,为了节约计算量并加快处理速度,也会将彩色图像转化为灰度图像进行处理。在Halcon中,可以使用rgb1_to_gray 算子或rgb3_to_gray 算子将彩色图像转化为灰度图像。注意,灰色并不是RGB分量的等比例组合,RGB分量的权重各不相同。

3. HSV/ HSI

HSV分别代表色调(Hue)、饱和度(Saturation)、纯度(Value)。HSI则表示色调(Hue)、饱和度(Saturation)、亮度(Intensity)。
色调反映了人眼对颜色的感觉,如看上去是红色还是蓝色。饱和度反映了颜色中所含的颜色数量的差别,如红色和粉色的饱和度就不相同。纯度或者亮度反映的是光线对颜色的影响程度,或者说是颜色的密度,如深灰和浅灰的差别。
当RGB颜色空间不足以区分检测目标与背景时,可以使用HSV/HSI进行尝试。例如,检测深蓝背景上的浅蓝色目标,可以使用饱和度或者明度进行区分;又如,当对RGB通道的图像进行平滑滤波等降噪操作时,图像的颜色分量将发生变化,而如果是在HSI分量上操作则不会有这个问题。
因此,可以根据具体要求,将图像从RGB抓换为HSV/HSI,或者由HSV/HSI重新转换为RGB。

二. Bayer 图像

某些专业级相机会使用3个滤镜,分别将光线分为红、绿、蓝3个分量,以此来获取彩色图像。但是由于其成本高,实用性不强,没有得到广泛使用。更多的做法是使用单芯片和一个Bayer滤色片过滤不同颜色的光线并得到不同通道的颜色信息,用这种方法输出的图像就是Bayer图像,即每个像素只有一个颜色分量的图像。
一般情况下,相机或者其驱动程序会自动对Bayer图像进行一些转换,并输出正常的RGB图像。但有些时候,如果未使用Halcon的图像采集接口,而是用相机SDK采集的图像,则可能会输出未经处理的 Bayer 图像,如图所示。
在这里插入图片描述
图(a)为相机采集得到的Bayer图像,图(b)为图 (a)的Bayer 图像放大两倍后的局部图像,图(c)为该Bayer 图像局部放大多倍后的像素排列图。例如,图(c)中的第一行第一列的像素标注为G,表示该像素对应于绿色通道中该位置的像素灰度值;第一行第二列的像素标注为B,表示该像素对应于蓝色通道该位置的灰度值。因此,Bayer 图像的类型也是由该像素排列图的前两个像素决定的。
如果要将 Bayer 图像转换为RGB图像,可以使用Halcon中的cfa_to_rgb算子进行色彩的转换。cfa to_rgb算子根据输入图像的Bayer 图像类型,通过插值的方式获取RGB图像。该算子包括以下4个主要参数。
(1)参数1:CFAImage,表示输入的Bayer图像。
(2)参数2:RGBImage,表示输出的RGB彩色图像。
(3)参数3:CFAType,表示 Bayer 图像的类型,即采用哪种编码方式。如图(c)所示,该图像中第一行的前两个像素为G和B,因此该图的CFAType应该选择bayer_gr。其他类型还有bayer_gr、bayer_bg、bayer_rg,应根据具体类型进行选择。
(4)参数4:Interpolation,表示插值的方法。默认选择biliner,还可以选择biliner_dir或
biliner_enhanced。前者会减少插值后的锯齿,使边缘更平滑;后者又在前者的基础上优化了插值结果,使颜色更加真实,但是相应的代价是运行时间更长了。

三. 颜色空间的转换

在图像处理的过程中,有时仅参考RGB颜色空间无法得到理想的结果,这就需要对颜色空间做一些转换。例如,使用HSV或者HSI颜色空间,可以通过色调、饱和度、亮度信息来对图像好行处理。例如,若要识别具体的颜色,可以使用HSV空间中的H分量(色调)或者S分量(饱和度进行判断;又如,若要调整图像的亮度,可以使用HSV空间中的V分量(色调)进行调整。
Halcon支持多种颜色空间的快速转换,如transfrom_rgb、trans_to_rgb、create_color_trans lut,下面举例说明。

1. trans_from_rgb算子

该算子用于将一个RGB图像转换成任意的颜色空间,该算子有7个主要的参数。参数13分别为输入的RGB3个通道的图像。参数46分别为输出的3个通道的图像。参数7为输出图像的颜色空间,可选的有HSV、HIS、YIQ、YUV、CIELab等。

2. trans_to_rgb算子

该算子与trans from_rgb算子的作用正好相反,它用于将任意颜色空间的3个通道图像转换成RGB图像,该算子有7个主要的参数。参数13分别为输入的3个通道的图像。参数46分别为输出的RGB3个通道的图像。参数7为输入图像的颜色空间,可选的有HSV、HIS、YIQ.YUV、CIELab等。

3. create_color_trans_lut算子

该算子的功能是创建一个颜色查找表(Look up Table,LUT),用于将RGB图像转换成另一个颜色空间。颜色查找表是一种预定义的颜色“索引”,可以将256色的RGB值分别进行指定。简言之,就是将原始颜色通过查表的方法赋值为另一种颜色。
该算子的第1个参数为ColorSpace,表示转换操作的另一种颜色空间;第2个参数为TransDirection,表示转换的方向,如fromrgb或者to_rgb;第3个参数为NumBits,表示输入图像的位数,也是输出图像的位数;第4个参数为输出的LUT的句柄。

这篇关于图像的颜色及Halcon颜色空间转换transfrom_rgb/trans_to_rgb/create_color_trans lut的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/552232

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu