Halcon颜色通道的处理decompose3/image_to_channels/channels _to _image

news2025/1/23 10:34:05

Halcon颜色通道的处理

文章目录

  • Halcon颜色通道的处理
    • 一. 图像的通道
    • 二. 访问通道
      • 1.访问通道
      • 2.获取通道的数量
    • 三. 通道分离与合并
      • 1. decompose3算子
      • 2. image_to_channels 算子
      • 3. compose3算子
      • 4. channels_to_image算子
    • 四. 处理RGB信息

由于彩色图像通常包含不止一个通道,因此检测目标在不同的通道图像中的表现形式也不同。通过访问通道、分解或合并通道,可得到合适的、有助于区分目标的图像。

一. 图像的通道

图像的通道是图像的组成像素的描述方式。举例来说,如果图像全部由灰色的点组成,只需要用一个灰度值就可以表示这个点的颜色,那么这个图像就是单通道的。如果这个点有彩色信息,那么描述这个点需要用到R、G、B3个通道,即用红色分量的颜色数量、绿色分量的颜色数量、蓝色分量的颜色数量共同描述这个点的颜色。因此,这样的彩色点组成的图像就具有3个通道。
如果除了R、G、B颜色信息外,还想要用一张灰度图表示像素的透明度,像素点在灰度图上对应的值是0,表示像素完全不发光;对应的值是255,表示像素完全显示,那么这个点就加入了透明度信息,因而有4个通道。这样的点组成的图像就是一幅四通道图像。

二. 访问通道

与访问通道相关的Halcon算子有很多,本小节举例说明两种。

1.访问通道

如要获得某一个指定通道的图像,可以使用access_channel算子。举例如下:

read_image (MultiChannelImage, 'beads.jpg')
access_channel (MultiChannelImage, Red, 1)

以上代码表示从名为MultiChannellmage的图像中取出序号为1的通道图像,存储并命名为Red。

2.获取通道的数量

使用count_channels算子,将返回输入图像中的通道数量。举例如下:

read_image (MultiChannelImage, 'beads.jpg')
count_channels (MultichannelImage, NumOfChannels)

以上代码表示MultiChannelImage 图像中的通道数量,且这一数量信息存储在NumOfChannels变量中。

三. 通道分离与合并

有时完整的RGB信息对于图像分析并没有明显的帮助,特定的颜色反而能帮助区分目标对象。例如,白色布料上的淡紫色花纹在蓝色通道中可能会看不出来,但在红色和绿色通道中却显而易见。因此,可以使用色彩分离的方法,利用某一个通道中的颜色差别,区分出目标物体和背景。注意,白色包含R、G、B3种颜色,且3种颜色的分量都达到了最大值,而淡紫色可能只在蓝色通道中达到了最大值,因此在蓝色通道中显示不出来。

1. decompose3算子

decompose3算子是比较常见的通道分离方法,对于RGB图像来说,如果要分离出3种颜色分量,在Halcon中可以使用decompose3算子进行RGB颜色的通道分离。举例如下:

read_image (MultiChannelImage, 'beads.jpg')
decompose3 (MultiChannelImage, Red, Green, Blue)

这里读取一个多通道的彩色图像,然后使用decompose3算子将其分割为单个通道的图像,decompose3算子的第1个参数为输入图像的名字,后面的3个参数分别对应输出的3个颜色通道的图像名字。程序运行的效果如图所示。
在这里插入图片描述
图(a)为输入的彩色图像,图(b)~(d)分别对应红色、绿色、蓝色通道的图像。

2. image_to_channels 算子

除了3个通道的图像分离以外,也可以使用decompose4算子、decompose5算子、decompose6算子进行多个通道图像的通道分离。还可以使用image_to_channels算子将一幅包含多通道的图像分解为包含多个单通道图像的数组。举例如下:

read_image (MultiChannelImage, 'beads.jpg')
image_to_channels (MultichannelImage, ImageArray)

该段代码运行后,MultiChannelImage的单个通道图像都将被存储在ImageArray数组中。

3. compose3算子

该算子的功能与decompose3算子正好相反,是将3个通道的图像合并起来。举例如下:

read_image (MultiChannelImage, 'beads.jpg')
decompose3 (MultiChannelImage, Red, Green, Blue)
compose3 (Red, Green, Blue, MultiChannelImage)

compose3算子的前3个参数为输入的3个通道的图像,最后一个参数为输出的结果图像。将上文程序分解出的RGB图像作为compose3算子的输入,并进行通道合并,将得到通道分离前的原始图像。
同样,如果有多个通道的图像,还可以分别使用compose4算子、compose5算子、compose6
算子对四通道、五通道、六通道的图像进行合并。

4. channels_to_image算子

该算子的功能与image_to_channels算子正好相反,是将数组内的单通道图像合并成一幅多通道图像。举例如下:

read_ image (Images, ['pico','picl','pic2'])
channels _to _image (Images, MultiChannelImage)

该段代码运行后,Images 数组中的图像将成为MultiChannelImage的一个通道。
可以使用access_channcl算子访问指定的通道图像。

四. 处理RGB信息

分解得到图像的颜色通道之后,可以根据特定的通道图像的颜色特征提取出目标物体。但有时要提取的物体可能有复杂的颜色,无法依赖单一通道进行分割,这时可以进行更进一步的操作。这里可以使用sub_image算子对通道图像做减法运算,以提取出目标色彩区域。举例如下:

read_image (Image, 'data/beads')
decompose3 (Image, Red, Green, Blue)
sub image (Blue, Red, BlueSubRed, 1, 128)
sub image (BlueSubRed, Green, BlueSubRedGreen, 1, 128)
threshold(BlueSubRedGreen, BlueRegion, 230, 255)

图(a)为蓝色通道图像;图(b)为蓝色通道图像与红色通道图像相减的结果;图©为蓝色通道图像与红色通道图像相减后再与绿色通道图像相减的结果:图(d)为在图(c)图像上进行阈值分割,提取出的蓝色珠子的颜色区域。
在这里插入图片描述
除了减法操作外,也可以进行两幅图的相加、相乘、相除等操作,还可以对单个通道进行直方图均衡、局部均衡、亮度控制等操作。应根据实际检测的需求对通道进行合适的操作,在此不一一详述。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广播信道的局域网

目录 一. 局域网的数据链路层二. 广播信道局域网三. 以太网标准四. CSMA/CD协议五. 以太网最短的帧六. 冲突解决方法-―退避算法 \quad 一. 局域网的数据链路层 \quad 局域网的特点 \quad 局域网的拓扑结构 \quad 局域网传输媒体 \quad \quad 媒体共享技术 \quad 二. 广播信道…

【前端面经】即时设计

目录 前言一面git 常见命令跨窗口通信vue 响应式原理发布订阅模式翻转二叉树Promise.all()扁平化数组面试官建议 二面Event Loop 原理Promise 相关css 描边方式requestAnimationReact 18 新特性JSX 相关react 输出两次函数式编程React 批处理机制http请求头有哪些本地存储性能优…

交叉编译aarch64架构支持openssl的curl、libcurl

本文档旨在指导读者在x86_64平台上交叉编译curl和openssl库以支持aarch64架构。在开始之前,请确保您的系统环境已正确配置。 1. 系统环境准备 系统是基于Ubuntu 20.04 LTS,高版本可能会有问题。首页,安装必要的开发工具和库文件。打开终端并…

[足式机器人]Part4 南科大高等机器人控制课 CH12 Robotic Motion Control

本文仅供学习使用 本文参考: B站:CLEAR_LAB 笔者带更新-运动学 课程主讲教师: Prof. Wei Zhang 课程链接 : https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch12 Robotic …

C++:第十一讲DFS深搜

Everyday English Your optimal career is simply this: Share the real you with physical world through th e process of creative self-expression. 你的最佳职业很简单,就是这样:通过创造性自我表达的途径和世界分享真实的你。 前言 今天带着大家…

【音视频 ffmpeg 学习】 跑示例程序 持续更新中

环境准备 在上一篇文章 把mux.c 拷贝到main.c 中 使用 attribute(unused) 消除警告 __attribute__(unused)/** Copyright (c) 2003 Fabrice Bellard** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated docu…

scanf函数返回值被忽略

心怀希望的前进 前言 最近在复习c语言,发现了许多之前不了解的知识,今天想来与大家分享一下scanf返回值值被忽略的问题。 很多人应该都在vs中见到过,我们先说原因,再说改进方法 原因: scanf函数在读取数据时不会检…

kafka实现延迟消息

背景 我们知道消息中间件mq是支持延迟消息的发送功能的,但是kafka不支持这种直接的用法,所以我们需要独立实现这个功能,以下是在kafka中实现消息延时投递功能的一种方案 kafka实现延时消息 主要的思路是增加一个检测服务,这个检…

Python武器库开发-武器库篇之上传本地仓库到Git(三十八)

武器库篇之上传本地仓库到Git(三十八) 当我们在Git中创建远程仓库和进行了SSH key免密登陆之后,我们点击 Your respositories 可以查看我们所创建的远程仓库,如图所示: 如果我们需要将本地的仓库上传到Git,首先我们需要建立一个本…

数据结构与算法 - 查找

文章目录 第1关:实现折半查找第2关:实现散列查找 第1关:实现折半查找 代码如下: /*************************************************************date: April 2009copyright: Zhu EnDO NOT distribute this code. ***********…

Python实现的面部健康特征识别系统

Python实现的面部健康特征识别系统 引言1. 数据集获取与准备2. 模型训练3. Flask框架的应用4. 前台识别测试界面 结论与展望 引言 本文将介绍一个基于Python的面部健康特征判别系统,该系统利用互联网获取的公开数据集,分为健康、亚健康和不健康三个类别…

蓝牙曝底层安全漏洞,数十亿设备受影响

内容概括: Eurecom的研究人员近期分享了六种新型攻击方式,统称为"BLUFFS",这些攻击方式能够破坏蓝牙会话的保密性,使设备容易受到冒充和中间人攻击(MitM)。攻击发现者Daniele Antonioli解释道,"BLUFFS…

Sentinel-3如何处理并下载LST数据-陆地表面温度”(Land Surface Temperature)

LST 通常指的是“陆地表面温度”(Land Surface Temperature)。陆地表面温度是指地球表面上陆地部分的温度,而不包括水体表面。LST 是遥感技术中一个重要的参数,可以通过卫星遥感等手段进行测量和监测。 陆地表面温度对于许多领域…

WPF 漂亮长方体、正文体简单实现方法 Path实现长方体 正方体方案 WPF快速实现长方体、正方体的方法源代码

这段XAML代码在WPF中实现了一个类似长方体视觉效果的图形 声明式绘制:通过Path、PathGeometry和PathFigure等元素组合,能够以声明方式精确描述长方体每个面的位置和形状,无需编写复杂的绘图逻辑,清晰直观。 层次结构与ZIndex控制…

利用 IntelliJ IDEA 整合 GitHub 实现项目版本控制与协作管理

目录 前言1 设置GitHub登录账号2 将项目分享到GitHub3 IntelliJ IDEA 中导入Github项目4 往GitHub推送代码4.1 Commit Change(提交到本地库)4.2 Git -> Repository -> Push(推送到远程库) 5 拉取远程库代码到本地6 克隆远程…

Python列表的介绍与操作 增改查,连接,赋值,复制,清空

列表 在日常中我们通过给变量赋值来存储数据,比如 a "hello" b "world" c "你好啊" d "....."由于变量一次只能存储一个数据,但我们如果想一次存储多个数据,的话这样存储会很复杂,所以,我们可以通过列表 列表(List)是Python中的…

彻底解决可视化:中文字体显示「豆腐块」问题!

问题复现 # 导入必要的包 library(ggplot2)# 设置主题样式 theme_set(theme_minimal(base_size 15))# 创建一个简单的折线图 ggplot(data data.frame(x c(1, 2, 3), y c(1, 2, 3)), aes(x x, y y)) geom_line(color "blue") labs(title "欢迎关注公众号…

鸿蒙HarmonyOS-图表应用

简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一。在HarmonyOS应用开发中,一个强大而灵活的图表库是实现这一目标的关键。而MPChart就是这样一款图表库,它为开发者提供了丰富的功能和灵活性,使得…

从0到1浅析Redis服务器反弹Shell那些事

文章目录 前言Redis服务1.1 特点与应用1.2 安装与使用1.3 语法和配置1.4 未授权访问 反弹Shell2.1 Web服务写入Webshell2.2 Linux定时任务反弹shell2.3 /etc/profile.d->反弹shell2.4 写入ssh公钥登录服务器2.5 利用Redis主从复制RCE2.6 SSRF漏洞组合拳->RCE 总结 前言 …

ES6之解构赋值详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…