图像的颜色及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的句柄。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/308076.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python+django网上购物商城系统o9m4k

语言:Python 框架:django/flask可以定制 软件版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发工具pycharm/vscode都可以 前端框架:vue.js 系统使用过程主要涉及到管理员和用户两种角色,主要包含个…

Android MVVM 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 ViewModel:负责业务逻辑 持有关系: 1、ViewModel 持有 View 2、ViewModel 持有 Model 3、Model 持有 ViewModel 辅助工具:DataBinding 执行流程:View &g…

[NCTF 2022] web题解

[NCTF 2022]calc 考点:python环境变量注入 打开题目,F12有hint 访问一下得到源码 app.route("/calc",methods[GET]) def calc():ip request.remote_addrnum request.values.get("num")log "echo {0} {1} {2}> ./tmp/log…

@PersistenceContext和@Autowired在EntityManager上应用的不同

首先PersistenceContext是jpa专有的注解,而Autowired是spring自带的注释 上方图片的意思就是EntityManager不是线程安全的,当多个请求进来的时候,spring会创建多个线程,而PersistenceContext就是用来为每个线程创建一个EntityMana…

如何编写一个javaAgent jar工具包超详细教程

介绍 Java Agent技术 Java Agent技术是JDK提供的用来编写Java工具的技术,使用这种技术生成一种特殊的jar包,这种jar包可以让Java程序 运行其中的代码。 Java Agent技术的两种模式 Java Agent技术实现了让Java程序执行独立的Java Agent程序中的代码…

Spring boot:3.X + Security OAuth2 自定义登录页面、登出后跳转到登录页

本文描述了基于 Spring Oauth2 的 code 模式&#xff0c;实现登陆同时授权、自定义登录界面、登出页面的功能。 1.Maven依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactI…

如何在 NAS 上安装 ONLYOFFICE 文档?

文章作者&#xff1a;ajun 导览 ONLYOFFICE 文档 是一款开源办公套件&#xff0c;其是包含文本文档、电子表格、演示文稿、表单、PDF 查看器和转换工具的协作性编辑工具。它高度兼容微软 Office 格式&#xff0c;包括 .docx、.xlsx 、.pptx 、pdf等文件格式&#xff0c;并支持…

55.网游逆向分析与插件开发-游戏增加自动化助手接口-自动药水设定功能的逆向分析

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目需求与需求拆解-CSDN博客 之前在找到过一个虚函数&#xff0c;每个按钮的都有一个实现机制&#xff0c;参考这里游戏结束过程的逆向分析 实际上找起来会不会用上不知道&#xff0c;接下来开始逆…

抬头举手阅读YOLOV8NANO

首先用YOLOV8NANO得到PT模型&#xff0c;转换成ONNX,OPENCV调用&#xff0c;PYTHON,C,ANDROID都可以举手写字阅读YOLOV8NANO

Kafka:本地设置

这是设置 Kafka 将数据从 Elasticsearch 发布到 Kafka 主题的三部分系列的第一部分;该主题将被 Neo4j 使用。第一部分帮助您在本地设置 Kafka。第二部分将讨论如何设置Elasticsearch将数据发布到Kafka主题。最后 将详细介绍如何使用连接器订阅主题并使用数据。 Kafka Kafka 是…

Javaweb小案例-基于SpringBoot+Vue实现的Timo商城

前言 Timo商城是基于Springbootvue的web商城系统&#xff0c;包含了商城的后台管理系统手机端微信小程序端 底层采用web-flash作为底层基础框架搭建 基本功能包含一下模块基础模块 部门管理用户管理角色管理菜单管理权限分配参数管理数据字典管理定时任务管理操作日志登录日志…

3.云原生之kubesphere运维

文章目录 k8s节点状态介绍配置宿主机使用k8s内部域名使用KubeKey 升级kubesphere使用KubeKey添加节点使用KubeKey下架节点使用k8s命令添加新节点k8s集群备份与恢复环境准备备份与还原在集群A和B中安装Velero集群A备份操作集群B还原备份操作 注意&#xff1a;所有节点运维操作前…