Halcon常用算子及功能解释(包括用法)

一、图像显示与窗口操作

Halcon常用算子及功能解释(包括用法)_第1张图片

  1. dev_open_window
    • 功能:打开新的图形窗口。可以指定窗口位置、大小和背景颜色等参数。这个窗口用于后续显示图像、区域等图形对象和文本信息。
    • 示例:dev_open_window(0, 0, 512, 512, 'black', WindowHandle),其中0,0是窗口左上角坐标,512,512是窗口大小,'black'是背景颜色,WindowHandle用于存储窗口句柄。
  2. dev_open_window_fit_image
    • 功能:打开适应图像大小的窗口,确保图像完整显示在窗口内,无需手动调整窗口大小。
    • 示例:dev_open_window_fit_image(Image, 0, 0, -1, -1, WindowHandle)Image是要显示的图像,0,0是窗口初始位置,-1,-1表示自动计算窗口大小,WindowHandle是窗口句柄。
  3. dev_get_window
    • 功能:获取当前活动窗口或指定图像窗口的句柄。利用句柄可以对窗口进行各种操作,如设置属性、显示内容等。
    • 示例:WindowHandle = dev_get_window(),获取当前活动窗口句柄并存储在WindowHandle中。
  4. dev_clear_window
    • 功能:清除图像窗口中的内容,方便重新绘制新图像或显示其他信息。常用于显示新图像前清空窗口。
    • 示例:dev_clear_window(WindowHandle),清空由WindowHandle指定的窗口。
  5. dev_close_window
    • 功能:关闭指定的活动窗口,释放窗口占用的资源。
    • 示例:dev_close_window(WindowHandle),关闭由WindowHandle标识的窗口。
  6. dev_display
    • 功能:在当前活动窗口中显示图像、区域、轮廓等图形对象。可以同时显示多个对象,便于对比和查看结果。
    • 示例:dev_display(Image),在当前窗口显示Imagedev_display(Region1, Region2),同时显示Region1Region2两个区域。
  7. dev_disp_text
    • 功能:在当前窗口指定位置显示文本信息,用于添加注释、说明或显示结果等。
    • 示例:dev_disp_text('This is a sample text', 100, 100, 'window', 'black', [], []),在窗口中(100,100)位置显示黑色文本This is a sample text
  8. disp_message
    • 功能:在指定窗口特定位置显示文本消息,并且可以设置文本的字体、颜色、大小等属性。
    • 示例:disp_message(WindowHandle, 'Result: Pass', 'window', 12, 12, 'black', 'true'),在WindowHandle窗口的(12,12)位置显示黑色文本Result: Pass'true'可能表示覆盖原有文本等属性。
  9. set_display_font
    • 功能:设置当前窗口中显示文本的字体类型、大小、加粗、倾斜等属性,以更好地呈现文本信息。
    • 示例:set_display_font(WindowHandle, 16, 'mono', 'true', 'false'),将WindowHandle窗口中的文本字体大小设为 16,字体为mono,加粗为true,倾斜为false
  10. dev_set_color
  • 功能:设置图形对象的显示颜色,如线条、区域填充、文本等的颜色,可以用颜色名称或 RGB 值指定。
  • 示例:dev_set_color('red'),将后续图形对象颜色设为红色;dev_set_color([255,0,0]),通过 RGB 值将颜色设为红色。
  1. dev_set_line_width
  • 功能:定义图形对象轮廓线的线宽,使线条更清晰或突出,可根据需要调整。
  • 示例:dev_set_line_width(2),将后续图形对象的轮廓线宽设为 2。
  1. dev_set_draw
  • 功能:设置区域的填充模式,可选择填充区域内部、仅显示轮廓或不显示等模式,用于突出区域形状或边界。
  • 示例:dev_set_draw('margin'),设置区域仅显示轮廓;dev_set_draw('fill'),填充区域内部。

二、图像加载与保存

  1. read_image
    • 功能:从文件系统读取图像文件并加载到内存,支持多种常见图像格式,如 JPEG、PNG、BMP 等。
    • 示例:read_image(Image, 'image.jpg'),从文件image.jpg读取图像并存储在Image中。
  2. write_image
    • 功能:将内存中的图像保存到指定文件路径,可选择不同图像格式和保存参数,如压缩质量等。
    • 示例:write_image(Image, 'png', 0, 'saved_image.png'),将Image以 PNG 格式保存为saved_image.png0可能是与压缩等相关的参数。

三、图像裁剪与变换

  1. crop_part
    • 功能:从原始图像中剪切出一个或多个矩形区域的图像,通过指定裁剪区域的左上角和右下角坐标确定范围。
    • 示例:crop_part(Image, CroppedImage, 100, 100, 300, 300),从Image中裁剪出左上角为(100,100),右下角为(300,300)的区域并存储在CroppedImage中。
  2. rgb1_to_gray
    • 功能:将彩色图像转换为灰度图,通过加权算法将 RGB 三个通道信息融合为一个灰度值,得到单通道灰度图像。
    • 示例:rgb1_to_gray(ColorImage, GrayImage),将彩色图像ColorImage转换为灰度图像GrayImage
  3. compose3
    • 功能:将三幅单通道图像(如红、绿、蓝通道图像)合并成一幅彩色图像,用于图像合成或重建等操作。
    • 示例:compose3(RedChannel, GreenChannel, BlueChannel, ColorImage),将RedChannelGreenChannelBlueChannel合并为彩色图像ColorImage
  4. invert_image
    • 功能:对图像灰度值取反,将原来亮的区域变暗,暗的区域变亮,用于图像增强。
    • 示例:invert_image(Image, InvertedImage),将Image取反得到InvertedImage

四、图像滤波与平滑

  1. mean_image
    • 功能:对图像进行均值滤波操作,通过计算图像中每个像素点及其邻域像素的平均值来替换该像素点的值,从而达到平滑图像、减少噪声的效果。邻域大小可根据需求设定,一般以像素点为中心的矩形区域。
    • 示例:mean_image(Image, SmoothedImage, 5, 5),这里以 5×5 的邻域对图像Image进行均值滤波,得到平滑后的图像SmoothedImage
  2. gaussian_filter
    • 功能:采用高斯函数对图像进行滤波处理,高斯滤波能够在有效去除噪声的同时,较好地保留图像的边缘等细节信息。可设置高斯核的大小和标准差等参数来控制滤波效果。
    • 示例:gaussian_filter(Image, FilteredImage, 3, 1.5),使用大小为 3×3、标准差为 1.5 的高斯核对图像Image进行滤波,得到FilteredImage
  3. median_image
    • 功能:执行中值滤波操作,它将图像中每个像素点及其邻域像素的值进行排序,然后取中间值来替换该像素点的值。这种滤波方式对于去除椒盐噪声等脉冲噪声非常有效,且在一定程度上能保留图像边缘。
    • 示例:median_image(Image, MedianFilteredImage, 3),以 3×3 的邻域对图像Image进行中值滤波,得到MedianFilteredImage

五、图像阈值分割

  1. threshold
    • 功能:根据设定的阈值对图像进行简单的二值化分割操作,将图像中的像素值与阈值进行比较,大于阈值的像素设置为前景(通常为白色,值为 255),小于阈值的像素设置为背景(通常为黑色,值为 0)。
    • 示例:threshold(Image, Region, 128),将图像Image中像素值大于 128 的部分划分为区域Region,其余部分为背景。
  2. auto_threshold
    • 功能:自动根据图像的灰度分布等特征来确定一个合适的阈值,然后按照与阈值操作类似的方式对图像进行二值化分割,无需人工手动设定阈值,方便在不同图像情况下快速获得较为合理的分割结果。
    • 示例:auto_threshold(Image, Region, 'max_separation'),这里根据图像Image的灰度分布,按照 'max_separation' 算法自动确定阈值,并将图像分割为区域Region和背景。
  3. otsu_threshold
    • 功能:基于大津法(Otsu's method)来确定阈值,该方法通过最大化类间方差来找到最优的阈值,使得分割后的前景和背景两类之间的差异最为明显,从而实现较好的图像二值化分割效果。
    • 示例:otsu_threshold(Image, Region, 0, 255),在 0 到 255 的灰度范围内,根据大津法对图像Image确定阈值并分割出区域Region

六、图像形态学操作

  1. erosion
    • 功能:对图像中的区域或二值化图像进行腐蚀操作,腐蚀操作会使区域的边界向内收缩,相当于用一个结构元素在图像上滑动,当结构元素完全包含在区域内时,才保留该位置的像素点,常用于去除图像中的小凸起、细化物体等。
    • 示例:erosion(Region, ErodedRegion, 3),这里使用大小为 3(可能是结构元素的尺寸)对区域Region进行腐蚀操作,得到ErodedRegion
  2. dilation
    • 功能:与腐蚀操作相反,是对图像中的区域或二值化图像进行膨胀操作,膨胀操作会使区域的边界向外扩展,用一个结构元素在图像上滑动,只要结构元素与区域有部分重叠,就保留该位置的像素点,常用于填充区域内的小空洞、连接相邻物体等。
    • 示例:dilation(Region, DilatedRegion, 3),使用大小为 3 的结构元素对区域Region进行膨胀操作,得到DilatedRegion
  3. opening
    • 功能:先对图像或区域进行腐蚀操作,然后再进行膨胀操作,其效果相当于去除图像中的小颗粒、小凸起等噪声,同时又能较好地保留图像或区域的主要形状和特征。
    • 示例:opening(Region, OpenedRegion, 3),用大小为 3 的结构元素对区域Region进行先腐蚀后膨胀的操作,得到OpenedRegion
  4. closing
    • 功能:先对图像或区域进行膨胀操作,然后再进行腐蚀操作,主要用于填充图像或区域内的小空洞、连接断开的物体等,同时能保持图像或区域的基本形状。
    • 示例:closing(Region, ClosedRegion, 3),使用大小为 3 的结构元素对区域Region进行先膨胀后腐蚀的操作,得到ClosedRegion
  5. morphologyEx
    • 功能:可以执行多种形态学操作,如梯度运算(计算膨胀后的区域与腐蚀后的区域之差)、顶帽运算(原图像减去开运算后的图像)、底帽运算(闭运算后的图像减去原图像)等,通过设置不同的参数来实现不同的形态学处理效果。
    • 示例:morphologyEx(Region, ProcessedRegion, 'gradient', 3),对区域Region进行梯度形态学操作,使用大小为 3 的结构元素,得到ProcessedRegion

七、图像边缘检测

  1. sobel_edges
    • 功能:利用 Sobel 算子对图像进行边缘检测,Sobel 算子通过计算图像在水平和垂直方向上的灰度变化率来确定边缘位置,能够快速检测出图像中的边缘信息,并且对噪声有一定的耐受能力。
    • 示例:sobel_edges(Image, Edges, 'sum'),使用 Sobel 算子对图像Image进行边缘检测,'sum' 可能表示将水平和垂直方向的边缘检测结果进行某种方式的组合,得到边缘图像Edges
  2. canny_edges
    • 功能:基于 Canny 边缘检测算法对图像进行边缘检测,Canny 边缘检测是一种较为经典的边缘检测方法,它通过对图像进行平滑处理、计算梯度、非极大值抑制、双阈值处理等一系列步骤来准确地检测出图像中的边缘,并且能够较好地排除虚假边缘。
    • 示例:canny_edges(Image, Edges, 100, 200),这里设定低阈值为 100,高阈值为 200,根据 Canny 边缘检测算法对图像Image进行边缘检测,得到边缘图像Edges

八、图像特征提取

  1. region_features
    • 功能:用于提取图像中区域的各种特征,如面积、周长、圆形度、重心位置等,这些特征可以用于后续的图像分析、目标识别等操作,通过设置不同的参数可以选择提取不同的特征。
    • 示例:region_features(Region, 'area', Area),提取区域Region的面积特征,并将结果存储在Area中;region_features(Region, 'centroid', Centroid),提取区域Region的重心特征,将结果存储在Centroid中。
  2. image_features
    • 功能:提取图像的整体特征,如灰度均值、灰度方差、纹理特征等,同样可通过设置不同的参数来选择提取不同的特征,这些特征对于图像分类、质量评估等应用非常重要。
    • 示例:image_features(Image, 'gray_mean', GrayMean),提取图像Image的灰度均值特征,将结果存储在GrayMean中;image_features(Image, 'texture', Texture),提取图像Image的纹理特征,将结果存储在Texture中。

九、图像匹配

  1. template_match
    • 功能:进行模板匹配操作,将一个事先准备好的模板图像与待匹配的目标图像进行比较,通过计算相似度等指标来寻找目标图像中与模板图像最相似的区域,常用于目标定位、检测等应用。
    • 示例:template_match(Image, Template, MatchedRegion, 'ssd'),将模板图像Template与目标图像Image进行模板匹配,采用'ssd'(平方差之和)作为相似度计算方法,找到最相似的区域并存储在MatchedRegion中。
  2. shape_match
    • 功能:基于形状特征进行匹配操作,主要关注图像中区域或物体的形状特征,通过计算形状相似度等指标来寻找目标图像中与给定形状最相似的区域或物体,在一些对形状要求较高的应用场景中非常有用。
    • 示例:shape_match(Image, Shape, MatchedRegion, 'hausdorff'),将形状Shape与目标图像Image进行形状匹配,采用 'hausdorff'(豪斯多夫距离)作为形状相似度计算方法,找到最相似的区域或物体并存储在MatchedRegion中。

十、图像几何变换

  1. rotate_image
    • 功能:对图像进行旋转操作,可以指定旋转中心和旋转角度,旋转后的图像保持其原有特征,只是在平面上发生了角度的改变,常用于调整图像的方向、纠正倾斜等情况。
    • 示例:rotate_image(Image, RotatedImage, 45, 'point', 100, 100),将图像Image以点 (100,100) 为旋转中心,旋转 45 度,得到旋转后的图像RotatedImage
  2. scale_image
    • 功能:对图像进行缩放操作,可以指定缩放因子,通过改变图像中像素的间距来实现图像的缩小或放大,常用于调整图像大小以适应不同的应用需求。
    • 示例:scale_image(Image, ScaledImage, 0.5),将图像Image按照缩放因子 0.5 进行缩放,得到缩小后的图像ScaledImage
  3. translate_image
    • 功能:对图像进行平移操作,可以指定平移的距离,在水平和垂直方向上移动图像中的所有像素,常用于调整图像在平面上的位置。
    • 示例:translate_image(Image, TranslatedImage, 100, 100),将图像Image在水平方向上平移 100 像素,在垂直方向上平移 100 像素,得到平移后的图像TranslatedImage

十一、示例代码

以下是一个使用 Halcon 编写的示例代码,展示了上述部分常用算子的综合应用,示例的主要功能是读取一张图像,进行一些预处理操作(如转换为灰度图、滤波),然后通过阈值分割提取目标区域,再对提取出的区域进行形态学操作和特征提取,并在窗口中显示相关结果。

import halcon as ha

# 1. 图像读取
image_path = "your_image_path.jpg"  # 替换为实际的图像路径
image = ha.read_image(image_path)

# 2. 打开一个适合图像大小的窗口用于显示
window_handle = ha.dev_open_window_fit_image(image, 0, 0, -1, -1)

# 3. 将彩色图像转换为灰度图
gray_image = ha.rgb1_to_gray(image)

# 4. 对灰度图进行高斯滤波,去除噪声
filtered_image = ha.gaussian_filter(gray_image, 3, 1.5)

# 5. 使用大津阈值法进行阈值分割,提取目标区域
thresholded_region = ha.otsu_threshold(filtered_image, 0, 255)

# 6. 对提取出的区域进行腐蚀操作,去除小的凸起或噪声点
eroded_region = ha.erosion(thresholded_region, 3)

# 7. 对腐蚀后的区域进行膨胀操作,恢复一些被过度腐蚀掉的部分
dilated_region = ha.dilation(eroded_region, 3)

# 8. 提取区域的特征,这里提取面积和重心位置
area = ha.region_features(dilated_region, 'area')
centroid = ha.region_features(dilated_region, 'centroid')

# 9. 在窗口中显示原始图像、灰度图、滤波后的图、阈值分割后的区域、最终处理后的区域以及显示区域特征信息
ha.dev_display(image)
ha.dev_display(gray_image)
ha.dev_display(filtered_image)
ha.dev_display(thresholded_region)
ha.dev_display(dilated_region)
ha.dev_disp_text(f"Area: {area}", 10, 10, 'window', 'black', [], [])
ha.dev_disp_text(f"Centroid: {centroid}", 10, 30, 'window', 'black', [], [])

# 10. 关闭窗口
ha.dev_close_window(window_handle)

请注意:

  1. 上述代码中的 halcon 模块假设已经正确安装并且可以被导入。在实际使用中,你可能需要根据你的 Halcon 安装情况进行相应的配置和调整。
  2. 需要将 "your_image_path.jpg" 替换为你实际要处理的图像文件的完整路径。
  3. 不同版本的 Halcon 可能在算子的具体使用方法和参数上存在细微差异,你可能需要根据你所使用的具体版本进行适当调整。

你可能感兴趣的:(计算机视觉,人工智能,图像处理)