ChatGpt对于HALCON数据结构的回答:
-
图像(Image):图像是Halco中最基本的数据结构,用于表示二维图像。它包含了图像的像素值、尺寸、颜色模式等信息。图像可以是灰度图像(单通道图像)或彩色图像(多通道图像),颜色通道可以是RGB、HSV等。图像可以通过读取文件、采集设备或者算法生成。
-
区域(Region):区域用于表示图像中的感兴趣区域。它可以是一个矩形、圆形、多边形等形状,也可以是由像素组成的任意形状。区域可以用于图像分割、目标检测、形状匹配等应用。区域可以通过二值化、形状操作或者算法生成。
-
XLDs(扩展线描述符):XLDs是一种特殊的数据结构,用于表示图像中的线段、圆弧、椭圆等几何形状。XLDs 可以用于边缘检测、形状拟合、曲线跟踪等任务。XLDs可以通过边缘检测、边缘连接或者算法生成。
-
元组(Tuple):元组是Halco中用于存储和处理数据的基本数据结构。它可以存储数字、字符串、图像、区域等各种类型的数据。元组可以进行各种操作,如读取、修改、拼接、查询等。元组在Halco中广泛应用于参数传递、结果返回和数据存储。
-
模板(Template):模板是一种用于表示图像中的特征或目标的数据结构。它可以用于模板匹配、目标识别等任务。模板可以通过手动标注或者算法生成。
-
模型(Model):模型是一种用于表示图像中的物体或场景的数据结构。它可以用于3D重建、姿态估计等任务。模型可以通过3D扫描、摄像机标定或者算法生成。
-
图像金字塔(Image Pyramid):图像金字塔是一种用于多尺度图像处理的数据结构。它通过对原始图像进行多次降采样得到多个尺度的图像,用于提取不同尺度下的特征。图像金字塔可以用于图像匹配、目标检测等任务。
以下为个人所学,有待补充
HALCON数据类型大致分为
-
Iconic:图标
-
image:图像
- Region:区域
- Extended Line Description(XLD):亚像素精度轮廓
-
-
Control:控制
- String:字符
- Integer:整型
- Real:实型
- Handle:句柄
-
Tuple
Image|通道
- 单通道:灰度图
- 3通道:RGB图像、其他彩色空间图像
- 多通道: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)
函数说明:
-
count_channels函数用于计算图像的通道数。
使用方法如下:
count_channels (Image : InputImage : NumChannels)
其中,Image是输入的图像对象,InputImage是输入的图像,NumChannels是输出参数,用于存储图像的通道数。
示例代码如下:
read_image (Image, 'image.jpg')
count_channels (Image, NumChannels)
disp (NumChannels)
以上代码会读取名为'image.jpg'的图像,并计算图像的通道数,最后将结果显示出来。
-
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个通道,分别对应红色、绿色和蓝色通道。
-
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函数来访问指定通道。
-
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
算子确实用于合并多个单通道图像成一个多通道图像,但是如果你发现不能合并多个通道,可能是由以下原因造成的:-
图像尺寸不一致:合并的图像必须具有相同的尺寸,即它们的宽度和高度必须完全相同。如果尺寸不匹配,
append_channel
无法将它们合并。 -
数据类型不兼容:尽管 Halcon 能够处理不同类型的图像数据(如
byte
、int2
、real
等),但是在使用append_channel
时,所有输入图像的数据类型应该是相同的。 -
错误的参数使用:确保你正确地传递了图像到
append_channel
算子。如果传递了错误的参数或变量,这可能会导致算子无法执行。 -
Halcon版本差异:不同版本的 Halcon 可能在算子的实现上有所不同。确保你使用的 Halcon 版本支持
append_channel
算子,并且你遵循了当前版本的使用说明。 -
算子调用方式错误:确保你正确地调用了算子。在 Halcon 的脚本环境 HDevelop 中,你应该按照下面的格式来调用
append_channel
:
-
* 假设 Image1, Image2, Image3 是已经存在的单通道图像
append_channel (Image1, Image2, Image12)
append_channel (Image12, Image3, Image123)
在这个例子中,我们首先将 Image1
和 Image2
合并成一个双通道图像 Image12
,然后将 Image12
和 Image3
合并成一个三通道图像 Image123
。
Image|Region
- Region定义:Region指图像中的一块区域,在Halcon中可以点击工具栏中的“特征检测”,在弹出对话框中选择region,可以看到region的不同特征属性以及对应的数值。
- 在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)
threshold算子的工作原理如下:
- 首先,根据设定的阈值,将图像中的像素分为两类:低于阈值的像素被置为0,高于阈值的像素被置为1。
- 如果需要将高于阈值的像素置为其他指定的灰度值,可以使用threshold()函数的可选参数进行设置。
- 通过二值化处理,可以将图像中的目标与背景进行分离,提取出感兴趣的目标区域,或者将图像中的噪声去除。
使用灰度直方图进行转化,步骤如下:
- 在工具栏中点击“灰度直方图”图标,打开使能输出按钮,拖动红色和绿色竖线到合适位置,接着插入代码即可。
Image|XLD 亚像素精度轮廓
- XLD,亚像素精度轮廓,指图像中某一块区域的轮廓,在HALCON中查看XLD的特征步骤与查看Region特征的步骤相似。点击工具栏中的“特征检测”→“选择XLD”,在图像窗口选择要查看的XLD特征,可以看到XLD的特征属性及其相对应的数值,如下图所示:
应用实例:
代码:
*关闭窗口
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: 滤波器的参数,用于控制边缘检测的灵敏度。
- Low, High: 这两个参数定义了用于边缘检测的滞后阈值。通常,Low 用于确定边缘开始的点,而 High 用于确定边缘结束的点。
edges_sub_pix
算子的工作原理是:文章来源:https://www.toymoban.com/news/detail-835690.html
- 首先应用一个滤波器(如 Sobel 滤波器)来增强图像中的边缘。
- 接着,算子使用一个阈值处理来识别显著的边缘。
- 然后,使用亚像素算法精确地确定这些边缘的位置。
- 最后,输出包含这些边缘坐标的数据。
通过这种方法,edges_sub_pix
算子能够以高精度检测和定位图像中的边缘,这对于精确的视觉测量和分析至关重要。文章来源地址https://www.toymoban.com/news/detail-835690.html
到了这里,关于Halcon学习笔记(二)数据结构、通道+XLD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!