图像的颜色及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实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma