Halcon学习笔记(二)数据结构、通道+XLD

这篇具有很好参考价值的文章主要介绍了Halcon学习笔记(二)数据结构、通道+XLD。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ChatGpt对于HALCON数据结构的回答:

  1. 图像(Image):图像是Halco中最基本的数据结构,用于表示二维图像。它包含了图像的像素值、尺寸、颜色模式等信息。图像可以是灰度图像(单通道图像)或彩色图像(多通道图像),颜色通道可以是RGB、HSV等。图像可以通过读取文件、采集设备或者算法生成。

  2. 区域(Region):区域用于表示图像中的感兴趣区域。它可以是一个矩形、圆形、多边形等形状,也可以是由像素组成的任意形状。区域可以用于图像分割、目标检测、形状匹配等应用。区域可以通过二值化、形状操作或者算法生成。

  3. XLDs(扩展线描述符):XLDs是一种特殊的数据结构,用于表示图像中的线段、圆弧、椭圆等几何形状。XLDs 可以用于边缘检测、形状拟合、曲线跟踪等任务。XLDs可以通过边缘检测、边缘连接或者算法生成。

  4. 元组(Tuple):元组是Halco中用于存储和处理数据的基本数据结构。它可以存储数字、字符串、图像、区域等各种类型的数据。元组可以进行各种操作,如读取、修改、拼接、查询等。元组在Halco中广泛应用于参数传递、结果返回和数据存储。

  5. 模板(Template):模板是一种用于表示图像中的特征或目标的数据结构。它可以用于模板匹配、目标识别等任务。模板可以通过手动标注或者算法生成。

  6. 模型(Model):模型是一种用于表示图像中的物体或场景的数据结构。它可以用于3D重建、姿态估计等任务。模型可以通过3D扫描、摄像机标定或者算法生成。

  7. 图像金字塔(Image Pyramid):图像金字塔是一种用于多尺度图像处理的数据结构。它通过对原始图像进行多次降采样得到多个尺度的图像,用于提取不同尺度下的特征。图像金字塔可以用于图像匹配、目标检测等任务。

以下为个人所学,有待补充

HALCON数据类型大致分为

  • Iconic:图标
    •  image:图像

    • Region:区域
    • Extended Line Description(XLD):亚像素精度轮廓
  • Control:控制
    • String:字符
    • Integer:整型
    • Real:实型
    • Handle:句柄
  • Tuple

Image|通道

  1. 单通道:灰度图
  2. 3通道:RGB图像、其他彩色空间图像
  3. 多通道:Remote sensing 遥感图、Texture analysis 纹理分析

代码演示

* Image Acquisition 01: Code generated by Image Acquisition 01
read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-21.11-Progress/examples/images/brochure/brochure_page_01.jpg')
*获取图像通道
count_channels(Image,Num)
*循环读取每一个通道
for I := 1 to Num by 1
    *获取多通道指定图像
    access_channel (Image, channel, 1)
endfor
*分解通道
decompose3 (Image, RedImage, GreenImage, BlueImage)
*合并通道
compose2 (RedImage, GreenImage, MultiChannelImage)
*向图像附加通道
append_channel (MultiChannelImage, BlueImage, ImageExtended)

Halcon学习笔记(二)数据结构、通道+XLD,Halcon入门学习笔记,学习,笔记,数据结构

函数说明:

  1. count_channels函数用于计算图像的通道数。

    使用方法如下:

    count_channels (Image : InputImage : NumChannels)

    其中,Image是输入的图像对象,InputImage是输入的图像,NumChannels是输出参数,用于存储图像的通道数。

    示例代码如下:

    read_image (Image, 'image.jpg')

    count_channels (Image, NumChannels)

    disp (NumChannels)

    以上代码会读取名为'image.jpg'的图像,并计算图像的通道数,最后将结果显示出来。

  2. access_channel函数用于访问图像中的某个通道。

    使用方法如下:

    access_channel (Image : InputImage : ChannelIndex : ChannelImage)

    其中,Image是输入的图像对象,InputImage是输入的图像,ChannelIndex是要访问的通道索引,ChannelImage是输出参数,用于存储访问到的通道图像。

    示例代码如下:

    read_image (Image, 'image.jpg')

    access_channel (Image, ChannelIndex, ChannelImage)

    disp_image (ChannelImage)

    以上代码会读取名为'image.jpg'的图像,并访问指定通道索引的通道图像,最后将结果显示出来。

    注意:通道索引从1开始,对于彩色图像,通常有3个通道,分别对应红色、绿色和蓝色通道。

  3. decompose3函数用于将彩色图像分解为红色、绿色和蓝色三个通道的图像。

    使用方法如下:

    decompose3 (Image : RedChannel, GreenChannel, BlueChannel)

    其中,Image是输入的彩色图像,RedChannel、GreenChannel和BlueChannel是输出参数,分别用于存储红色、绿色和蓝色通道的图像。

    示例代码如下:

    read_image (Image, 'image.jpg')

    decompose3 (Image, RedChannel, GreenChannel, BlueChannel)

    disp_image (RedChannel) disp_image (GreenChannel) disp_image (BlueChannel)

    以上代码会读取名为'image.jpg'的彩色图像,并将其分解为红色、绿色和蓝色三个通道的图像,最后分别显示出来。

    注意:decompose3函数只适用于彩色图像,且要求输入图像的通道数为3。对于其他通道数的图像,可以使用access_channel函数来访问指定通道。

  4. compose2函数用于将两个单通道图像合成为一个彩色图像。

    使用方法如下:

    compose2 (RedChannel, GreenChannel : BlueChannel)

    其中,RedChannel和GreenChannel是输入的单通道图像,BlueChannel是输出参数,用于存储合成后的彩色图像。

    示例代码如下:

    read_image (RedChannel, 'red.jpg') read_image (GreenChannel, 'green.jpg')

    compose2 (RedChannel, GreenChannel, BlueChannel)

    disp_image (BlueChannel)

    以上代码会读取名为'red.jpg'和'green.jpg'的两个单通道图像,然后将它们合成为一个彩色图像,并将结果显示出来。

    注意:compose2函数要求输入的两个图像的尺寸和类型必须相同,且都是单通道图像。合成后的彩色图像的通道顺序为红色、绿色、蓝色。

  • append_channel函数用于将多个单通道图像合并成一个多通道图像。

    使用方法如下:

    append_channel (Image1, Image2, ..., ImageN : MultiChannelImage)

    其中,Image1、Image2、...、ImageN是输入的单通道图像,MultiChannelImage是输出参数,用于存储合并后的多通道图像。

    示例代码如下:

    read_image (RedChannel, 'red.jpg') read_image (GreenChannel, 'green.jpg') read_image (BlueChannel, 'blue.jpg')

    append_channel (RedChannel, GreenChannel, BlueChannel, ColorImage)

    disp_image (ColorImage)

    以上代码会读取名为'red.jpg'、'green.jpg'和'blue.jpg'的三个单通道图像,然后将它们合并为一个彩色图像,并将结果显示出来。

    注意:append_channel函数要求输入的图像的尺寸和类型必须相同,且都是单通道图像。合并后的多通道图像的通道顺序与输入的图像顺序一致。

    在 Halcon 中,append_channel 算子确实用于合并多个单通道图像成一个多通道图像,但是如果你发现不能合并多个通道,可能是由以下原因造成的:

    1. 图像尺寸不一致:合并的图像必须具有相同的尺寸,即它们的宽度和高度必须完全相同。如果尺寸不匹配,append_channel 无法将它们合并。

    2. 数据类型不兼容:尽管 Halcon 能够处理不同类型的图像数据(如byteint2real 等),但是在使用 append_channel 时,所有输入图像的数据类型应该是相同的。

    3. 错误的参数使用:确保你正确地传递了图像到 append_channel 算子。如果传递了错误的参数或变量,这可能会导致算子无法执行。

    4. Halcon版本差异:不同版本的 Halcon 可能在算子的实现上有所不同。确保你使用的 Halcon 版本支持 append_channel 算子,并且你遵循了当前版本的使用说明。

    5. 算子调用方式错误:确保你正确地调用了算子。在 Halcon 的脚本环境 HDevelop 中,你应该按照下面的格式来调用 append_channel

* 假设 Image1, Image2, Image3 是已经存在的单通道图像
append_channel (Image1, Image2, Image12)
append_channel (Image12, Image3, Image123)

                在这个例子中,我们首先将 Image1Image2 合并成一个双通道图像 Image12,然后将         ​​Image12Image3 合并成一个三通道图像 Image123

Image|Region

  • Region定义:Region指图像中的一块区域,在Halcon中可以点击工具栏中的“特征检测”,在弹出对话框中选择region,可以看到region的不同特征属性以及对应的数值。
  • Halcon学习笔记(二)数据结构、通道+XLD,Halcon入门学习笔记,学习,笔记,数据结构
  • 在Halcon中,将Image图像转换成Region区域有两种方法:
利用阈值分割算子threshold进行转化。如图所示:
  • threshold(Image : ImageThresholded, Threshold : Real)
  • Image是输入的图像,ImageThresholded是输出的二值化图像,Threshold是设定的阈值。

代码:

* Image Acquisition 01: Code generated by Image Acquisition 01
read_image (Image, 'path')
*获取尺寸
get_image_size (Image, Width, Height)
*打开窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
*阈值分割获取区域
threshold (Image, Region, 164, 215)
dev_display (Region)

Halcon学习笔记(二)数据结构、通道+XLD,Halcon入门学习笔记,学习,笔记,数据结构

threshold算子的工作原理如下:

  •  首先,根据设定的阈值,将图像中的像素分为两类:低于阈值的像素被置为0,高于阈值的像素被置为1。
  • 如果需要将高于阈值的像素置为其他指定的灰度值,可以使用threshold()函数的可选参数进行设置。
  • 通过二值化处理,可以将图像中的目标与背景进行分离,提取出感兴趣的目标区域,或者将图像中的噪声去除。
 使用灰度直方图进行转化,步骤如下:
  • 在工具栏中点击“灰度直方图”图标,打开使能输出按钮,拖动红色和绿色竖线到合适位置,接着插入代码即可。

Halcon学习笔记(二)数据结构、通道+XLD,Halcon入门学习笔记,学习,笔记,数据结构

Image|XLD 亚像素精度轮廓
  • XLD,亚像素精度轮廓,指图像中某一块区域的轮廓,在HALCON中查看XLD的特征步骤与查看Region特征的步骤相似。点击工具栏中的“特征检测”→“选择XLD”,在图像窗口选择要查看的XLD特征,可以看到XLD的特征属性及其相对应的数值,如下图所示:

Halcon学习笔记(二)数据结构、通道+XLD,Halcon入门学习笔记,学习,笔记,数据结构

应用实例:

Halcon学习笔记(二)数据结构、通道+XLD,Halcon入门学习笔记,学习,笔记,数据结构

代码:

*关闭窗口
dev_close_window ()
*获取图像
read_image (Image, 'fabrik')
*打开适应图像大小的窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
*提取图像得到亚像素边缘
edges_sub_pix (Image, Edges, 'canny', 1, 12, 22)
*显示边缘
dev_display (Edges)

edges_sub_pix算子详解:

edges_sub_pix 算子在 Halcon 中是一种高级图像处理算子,用于检测图像中的边缘并以亚像素精度返回它们的位置。这个算子非常适合于那些需要高精度边缘定位的应用,如计量任务、物体定位、形状分析等。

edges_sub_pix 算子的基本语法如下:

edges_sub_pix(Image: Edges, Filter: String, Alpha: Real, Low: Real, High: Real)

  • Image: 输入图像。
  • Edges: 输出参数,包含检测到的边缘的亚像素坐标。
  • Filter: 指定用于边缘检测的滤波器类型。常见的滤波器类型包括 "sobel""prewitt""roberts", 等。
  • Alpha: 滤波器的参数,用于控制边缘检测的灵敏度。
  • LowHigh: 这两个参数定义了用于边缘检测的滞后阈值。通常,Low 用于确定边缘开始的点,而 High 用于确定边缘结束的点。

edges_sub_pix 算子的工作原理是:

  1. 首先应用一个滤波器(如 Sobel 滤波器)来增强图像中的边缘。
  2. 接着,算子使用一个阈值处理来识别显著的边缘。
  3. 然后,使用亚像素算法精确地确定这些边缘的位置。
  4. 最后,输出包含这些边缘坐标的数据。

通过这种方法,edges_sub_pix 算子能够以高精度检测和定位图像中的边缘,这对于精确的视觉测量和分析至关重要。文章来源地址https://www.toymoban.com/news/detail-835690.html

到了这里,关于Halcon学习笔记(二)数据结构、通道+XLD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis数据结构学习笔记

    图文主要参考小林Coding的图解redis数据结构 除了它是内存数据库,使得所有的操作都在内存上进⾏之外,还有⼀个重要因素,它实现的数据结构,使 得我们对数据进⾏增删查改操作时,Redis 能⾼效的处理。 :::tips redisDb 结构 ,表示 Redis 数据库的结构,结构体⾥存放了指向了

    2024年02月02日
    浏览(44)
  • 数据结构学习笔记——多维数组、矩阵

    数组是由n(n≥1)个 相同数据类型 的数据元素组成的有限序列,在定义数组时,会为数组分配一个固定大小的内存空间,用来存储元素,数组在被定义后,其维度不可以被改变。 数组在确定其维度和维界后,元素的个数是固定的,所以不能进行插入和删除运算。数组中最常

    2024年02月03日
    浏览(48)
  • 【雨学习】数据结构入门---线性结构的笔记及代码实现

    数组元素类型相同,大小相等 定义:         n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,且只有一个后续节点         首节点前没有前驱节点,尾节点没有后续节点 专业术语:         首节点:第一个有效节点         尾节点:最后

    2024年01月23日
    浏览(53)
  • 数据结构学习笔记——二叉排序树

    查找算法中,基于树这种数据结构进行查找即为树形查找,可将其分为 二叉排序树 、 平衡二叉树 和 B树 三种树形查找方法: 二叉排序树也称为二叉查找树或二叉搜索树(注意:与二分查找的判定树不同),其中各结点值的大小关系是: 左子树根结点右子树 ,且左、右子树

    2024年02月09日
    浏览(54)
  • 区块链学习笔记(2)BTC数据结构

    1.哈希指针(hash pointers):一般的指针存储的是某个结构体在内存中的地址,哈希指针除了要保存结构体的地址外,还要保存这个结构体的哈希值。 通过哈希指针,我们不但可以找到结构体在内存中的位置,同时还可以检测出结构体的内容是否遭到了篡改。 因为我们记录了

    2023年04月16日
    浏览(53)
  • Python学习笔记(三) 数据结构与常用方法

    数据结构是计算机内部对数据按一定的结构进行排列组织的存放,以达到快速查找,提取但目的 常见的数据结构有:列表、字典、元组、集合、双端队列、区间 通过键值对key=value的形式保存元素的一种数据结构 一种不可变的数据结构,一旦创建不能添加、删除与修改 出于数

    2024年02月04日
    浏览(50)
  • 【学习笔记】数据结构算法文档(类C语言)

    1.1.1 线性表的顺序存储表示 1.1.2 顺序表中基本操作的实现 1.1.2.1 初始化 1.1.2.2 取值 1.1.2.3 查找 1.1.2.4 插入 1.1.2.5 删除 1.1.2.6 计数 1.2.1 单链表的定义和表示 ★ 关于结点 1.2.2 单链表基本操作的实现 1.2.2.1 初始化 1.2.2.2 取值 1.2.2.3 查找 1.2.2.4 插入 1.2.2.5 删除 1.2.2.6 前插法创建单

    2024年02月07日
    浏览(42)
  • C#学习笔记--复杂数据类型、函数和结构体

    特点:多个数据变量地一个集合体,可以自己命名 种类:枚举、数组和结构体 枚举:整型常量的集合 数组:任意变量类型的顺序存储的数据集合 结构体:任意变量类型的数据组合成的数据块 枚举 : 枚举可以方便表示对象的各种状态,本质还是一种变量。 例如我们可以用

    2024年02月08日
    浏览(43)
  • 【软考程序员学习笔记】——数据结构与算法基础

    目录  🍊一、数据结构概念和分类 🍊二、数组特点存储方式 🍊三、矩阵 特殊矩阵 非特殊矩阵 🍊四、栈和队列 🍊 五、二叉树的性质 🍊六、二叉树的遍历 (1)前序遍历(先根遍历,先序遍历) (2)中遍历(中根遍历) (3)后序遍历(后根遍历,后序遍历) 🍊七、二叉排序树 🍊八、

    2024年02月12日
    浏览(60)
  • 区块链技术与应用 - 学习笔记3【比特币数据结构】

    大家好,我是比特桃。 本系列笔记只专注于探讨研究区块链技术原理,不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划,在“加快数字发展 建设数字中国”篇章中,区块链被列为“十四五”七大数字经济重点产业之一,迎来创新发展新机遇。 经科技部批

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包