Halcon算子总结

1.union1与union2

union1(ConnectedRegions, RegionUnion)
它是将所有区域变成一个整体,选择一个即为所有
union2(ConnectedRegions, RegionUnion)
它是将两个区域合并成一个整体,仅限两个

2.dyn_threshold

dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark )
参数分析:
OrigImage:需要进行阈值分割的原始图像

ThresholdImage: 通过一定图像预处理得到的阈值图像(这个预处理通常是对原图应用mean_image/gauss_image/binomial_filter 处理后的图像)

RegionDynThresh: 对原图进行阈值分割后输出图像

Offset: 是一个阈值调节值,在做对比时,需要和ThresholdImage上某一点像素值同时作用。

LightDark:是一个关键选择,’dark’, ‘light’, ‘equal’, ‘not_equal’一共有4种选择,明、暗、同、不同

3.disp_continue_message

算子:disp_continue_message

功能:在荧幕上显示暂停程序继续操作的信息。

如果参数Box设置为’true’,则文本将写在白框内,这在不规则背景下很有用。

输入参数: WindowHandle图形窗口的窗口句柄,显示消息的位置。

Color将文本的颜色定义为字符串。 如果设置为[]或’’,则使用当前设置的颜色。 Color 输入显示的颜色,默认 l>lack踞色,参考 ‘black’,‘blue’,‘yellow’,‘red’,‘green’,‘cyan’,‘magen ta’,

Box如果设置为“ true”,则文本将写在白框中。默认值true。可选项’true’, ‘false’。

4.dev_open_window_fit_image

dev_open_window_fit_image(Image : : Row, Column, WidthLimit, HeightLimit : WindowHandle)
打开一个新的图形窗口,它保留给定图像的长宽比
保持给定图像的长宽比,以最小最尺寸打开一个图形窗口。

5.skeleton

作用:计算一个区域的骨架
参数翻译(顺序对应以上参数顺序):
输入区域、
输出区域骨架

6.dev_update_off()和dev_update_no()函数

一般这两个函数分别位于程序的开头和结尾
光标右击函数,选择显示函数,可以看到三个函数
dev_update_pc (‘off’)
dev_update_var (‘off’)
dev_update_window (‘off’)
return ()

解释

dev_update_window:定义 程序执行打开和关闭期间,图像对象是否在图形窗口中显示;在单步模式下,该规则无效,单个算子调用以后,对象总是显示在图形窗口上;在测量一系列算子的运行时
间的时候,应该设置为OFF,以减少HDevelop中GUI更新的运行时间的影响.

dev_update_pc:在程序执行期间,控制程序计数器的更新。

dev_update_var:在程序执行期间控制变量窗口的更新或关闭,则每当程序修改变量
时,更改变量窗口(图标和控件变量)的内容。

主要是减少程序的运行时间

7.optimize_rft_speed( : : Width, Height, Mode : )

optimize_rft_speed确定了一种方法,该方法可为尺寸为 Width*Height的图像实现实数值FFT的最佳运行时间。为一个图像大小确定的数据不会影响用于其他图像大小的方法。

8.gray_range_rect

gray_range_rect: 用一个矩形结构元素在图像中滑动,新值=(矩形中最大的)灰度值-(矩形中最大的)最小的灰度值

9.min_max_gray

作用:确定区域内的最小和最大灰度值;
参数翻译(对应以上参数顺序):
输入需要计算的区域、
输入灰度图像、
输入 低于(以上)绝对最高(最低)百分比 取值范围:0 <= Percent && Percent <= 50、
输出最小灰度值、
输出最大灰度值、
输出灰度值范围;

描述:
算子min_max_gray创建输入图像(Image)在计算区域内(Regions)灰度值的绝对频率直方图,并计算与输入图像的面积相对应的像素百分比数,然后它在直方图的两边向内移动这个像素数,并确定最小和最大的灰度值;
percent含义:区域面积乘以percent得到一个数a,然后用这个数a分别从最小灰度值和最大灰度值处向里截取a个像素点,然后在剩下的像素点中取最小最大灰度值。
例如.:
例如Regions的面积是Area = 60, 百分比是percent = 5, 所以根据以上所述a=3;
直方图为: Histogram = [2,8,0,7,13,0,0,…,0,10,10,5,3,1,1]
最大灰度值是:Maximum = 255,
最小灰度值是:Minimum = 0,
范围是:Range = 255(最大值减最小值)
使用 min_max_gray 算子会返回: Maximum = 253, Minimum = 1, Range = 252;

注意:
对于int4、int8和real类型的图像,上述计算不是通过直方图进行的,而是使用排序选择算法。如果Percent设置为50,Min = Max = Median。如果Percent为0,则不会计算直方图以加快运行时间。

10.gen_circle_contour_xld(算子)

gen_circle_contour_xld - 创建圆或圆弧的XLD轮廓。

gen_circle_contour_xld(:ContCircle:Row,Column,Radius,StartPhi,EndPhi,PointOrder,Resolution ?

描述
gen_circle_contour_xld创建一个或多个圆弧或闭合圆。圆圈由它们的中心(行,列)和它们的半径指定。除此之外,圆弧的特征在于起点StartPhi的角度,终点EndPhi的角度和沿边界的PointOrder。得到的轮廓ContCircle的分辨率通过包含相邻轮廓点之间像素的欧几里德距离的分辨率来控制。通常,倒数第二个到最后一个点之间的距离小于分辨率。

多线程类型:可重入(与非独占运算符并行运行)。
多线程范围:全局(可以从任何线程调用)。
没有并行化处理。

参数
ContCircle(output_object)xld_cont(-array)→对象
产生的轮廓。
Row(input_control)circle.center.y(-array)→(real)
圆心或圆弧的中心的行坐标。
默认值:200.0
Column (input_control)circle.center.x(-array)→(真实)
圆心或圆弧的圆柱坐标。
默认值:200.0
Radius (input_control)circle.radius(-array)→(真实)
圆弧或圆弧的半径。
默认值:100.0
限制:半径> 0
StartPhi(input_control)real(-array)→(真实)
圆的起点或圆弧[rad]的角度。
默认值:0.0
EndPhi(input_control)real(-array)→(真实)
圆弧或圆弧[rad]的终点角度。
默认值:6.28318
PointOrder(input_control)string(-array)→(string)
沿圆或圆弧的点顺序。
默认值:‘正面’
价值清单:‘负面’,‘正面’
Resolution(input_control)真实→(真实)
相邻轮廓点之间的距离。
默认值:1.0
限制:分辨率> = 0.00001

11.calculate_lines_gauss_parameters

原型
calculate_lines_gauss_parameters( : : MaxLineWidth, Contrast : Sigma, Low, High)

功能
根据要提取线的最大宽度以及对比度计算出lines_gauss算子输入的Sigma、Low、High值。

参数列表
MaxLineWidth (input_control) : lines_gauss要提取线条的最大宽度
Contrast (input_control) :lines_gauss要提取线的对比度。Contrast 值不仅可以一个,也可以为两个。当值为两个时,数组中的第二个值是要提取线的最小对比度,并且其值不能大于第一个值。比如:[20,10]
Sigma (output_control) :获取用于lines_gauss输入的Sigma值
Low (output_control):获取用于lines_gauss输入的Low 值
High (output_control) :获取用于lines_gauss输入的High 值

详解
对于参数Contrast 需要说明的是,如果只选择一个值时,最小对比度将会默认为最大对比度的1/3,最小对比度越小,线条将会延伸到对比度较低的区域,即线条越长。反之,值越高,线条越短,但越突出。
lines_gauss算子用到的滞后阈值方法中的Low、High值是根据线的最大宽度以及对比度(两个高低对比度)计算得出的。

举例
read_image (Image, ‘mreut’)
*Contrast 值为60,事实上其值为[60,20],所以下面这行代码等同于
*calculate_lines_gauss_parameters (30, [60,20], Sigma, Low, High)
calculate_lines_gauss_parameters (30, 60, Sigma, Low, High)
将calculate_lines_gauss_parameters计算出的值作为lines_gauss的输入,避免调试lines_gauss参数困难
lines_gauss (Image, Lines, Sigma, Low, High, ‘light’, ‘true’, ‘bar-shaped’, ‘true’)
dev_display (Image)
dev_display (Lines)

12.zoom_image_factor

根据缩放因子实现图像缩放
zoom_image_factor(Image : ImageZoomed : ScaleWidth, ScaleHeight, Interpolation : )

dev_close_window ()
read_image(Image,‘monkey’)
zoom_image_factor(Image,ZooImage, 0.5, 0.5, ‘bilinear’)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
dev_open_window_fit_image (ZooImage, 0, 0, -1, -1, WindowHandle1)
dev_display (ZooImage)

13. get_domain

名称
get_domain - 获取图像的域(ROI)。

用法
get_domain(Image : Domain : : )

描述
算子get_domain将所有输入图像的定义域作为区域返回。

14. lines_gauss

原型
lines_gauss(Image : Lines : Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions : )

功能
检测线条以及其宽度。

参数列表
Image (input_object) :输入图像
Lines (output_object) :检测线条(XLD)
Sigma (input_control) :高斯滤波值
Low (input_control) :滞后阈值分割的低阈值
High (input_control) :滞后阈值分割的高阈值
LightDark (input_control) :提取线条类型( ‘dark’,‘light’)
ExtractWidth (input_control) :是否提取线宽(‘false’,‘true’)
LineModel (input_control) :用来调整线条位置和宽度的线模型(‘bar-shaped’, ‘gaussian’, ‘none’, ‘parabolic’)
CompleteJunctions (input_control) :在断连的部分是否添加节点使线条连续(‘false’, ‘true’)

详解
lines_gauss 主要功能是提取图像上的线条,提取的结果属于亚像素精度的XLD轮廓。

参数LightDark 其实就是让你选择你要提取线条的类型,暗色还是亮色,选’dark’, ‘light’。

参数ExtractWidth是否提取每条XLD轮廓线的线宽,true提取,false不提取。

参数LineModel 如果选择 除’none’以外的参数,lines_gauss算子会补偿非对称线条(即在线条的中心两侧有不同对比度的线条),来校正提取出的线条的位置和宽度。用于校准的线模型有’bar-shaped’, ‘gaussian’, ‘none’, ‘parabolic’四种。线模型’bar-shaped’适用于大多数应用;如果管状物体采用背光方式打光(比如血管的X光图像),提取线条可以使用’gaussian’, 'parabolic’模型;’parabolic’模型常用来提取边缘比较锐利的线条(比如采用背光照明图像中的线条);’gaussian’则用来提取边缘相对不那么锐利的线条。只有将ExtractWidth设置为true时,参数LineModel才有意义。

15.hom_mat2d_identity

hom_mat2d_identity( : : : HomMat2DIdentity)
功能:产生仿射变换矩阵(产生一个空的二维空变换矩阵)

16.hom_mat2d_rotate_local

功能:为一个同质二维变换矩阵添加一个循环。

17.sub_image

在我们编写halcon程序中可能常会用到图像相减算子sub_image,例如在做高斯高通滤波的时候,最后的结果是要用原图像减去滤波后的图像才能得到锐化图像。该算子的参数形式如下:

sub_image(ImageMinuend , ImageSubtrahend : ImageSub : Mult , Add 😃

第一个参数是被减图像,第二个参数是减数图像,第三个参数是结果图像,第四个参数是乘数因子,第五个参数是灰度补充值

算子可以用以下计算式子表达:

ImageSub =( ImageMinuend - ImageSubtrahend ) *Mult + Add

之所以乘以Mult是要拉大两幅图像相减后的对比度,加上一个Add是为了增加相减后的图像的整体亮度。

例子:

dev_close_window()
read_image(Image1,‘fabrik’)
get_image_size(Image1,width,height)
dev_open_window(0,0,width/1.2,height/1.2,‘black’,windowhandle)
dev_display(Image1)
dev_open_window(height/1.2, 0, width/1.2, height/1.2, ‘black’, WindowHandle1)
dev_open_window(0, width/1.2, width/1.2, height/1.2, ‘black’, WindowHandle2)
dev_set_window(WindowHandle1)
read_image(Image2, ‘monKey’)
dev_set_window(WindowHandle2)
*两幅图像相减乘以2拉大对比度,加上10提高整体亮度
sub_image(Image1, Image2, ImageSub, 2.0, 10.0)

18.affine_trans_contour_xld()和vector_angle_to_rigid()

在找到模板之后,还需要对其进行转化,使之能够显示,这里用到两个函数vector_angle_to_rigid()和affine_trans_contour_xld()。前一个是从一个点和角度计算一个刚体仿射变换,这个函数从匹配函数的结果中对构造一个刚体仿射变换很有用,把参考图像变为当前图像

1.vector_angle_to_rigid
vector_angle_to_rigid()——从点和角度计算刚性仿射变换。
函数原型:vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)

描述:
vector_angle_to_rigid根据点对应关系和两个对应角度计算刚性仿射变换,即由旋转和平移组成的变换,并将其作为齐次变换矩阵HomMat2D返回。

参数:
Row1 (输入参数) ——原始点的行坐标
Column1 (输入参数) ——原始点的列坐标
Angle1 (输入参数) ——原始点的角度
Row2 (输入参数) ——转换点的行坐标
Column2 (输入参数) ——转换点的列坐标
Angle2 (输入参数) ——转换点的角度
HomMat2D (输出参数) ——输出转换矩阵

2.affine_trans_contour_xld
affine_trans_contour_xld——对XLD轮廓进行任意仿射2D变换。

函数原型:affine_trans_contour_xld(Contours : ContoursAffineTrans : HomMat2D : )

描述:
affine_trans_contour_xld将任意仿射2D变换,即缩放、旋转、平移和倾斜(倾斜)应用于轮廓中给定的xld轮廓,并以ContoursAffineTrans的形式返回变换后的轮廓。仿射变换由HomMat2D中给出的齐次变换矩阵来描述,它可以使用hom_mat2d_identity、hom_mat2d_scale、hom_mat2d_rotate、hom_mat2d_translate等运算符创建,也可以是向量_angle_to_rigid等运算符的结果。

    齐次变换矩阵的组成部分解释如下:图像的行坐标对应于定义变换矩阵的坐标系的x,列坐标对应于定义变换矩阵的坐标系的y。这对于获得图像的右手坐标系是必要的。特别是,这样可以确保在正确的方向上执行旋转。注意,矩阵的(x,y)顺序与图像中坐标的通常(行、列)顺序相对应。

参数:
Contours (输入参数) ——输入XLD轮廓。
ContoursAffineTrans (输出参数) ——转换后的XLD轮廓
HomMat2D (输入参数) ——输入转换矩阵

19.estimate_background_illumination

本地函数 用来估计生成背景图像
将图像傅里叶变换到频域中,通过高斯滤波,然后傅里叶反变换回来,得到的图像就是背景模板
显示函数:
get_image_size (Image, Width, Height)
rft_generic (Image, ImageFFT, ‘to_freq’, ‘none’, ‘complex’, Width)
gen_gauss_filter (ImageGauss, 50, 50, 0, ‘n’, ‘rft’, Width, Height)
convol_fft (ImageFFT, ImageGauss, ImageConvol)
rft_generic (ImageConvol, IlluminationImage, ‘from_freq’, ‘none’, ‘byte’, Width)
return ()

20.watershed_threshold

通过阈值实现图像的分水岭算法分割
watersheds_threshold(Image : Basins : Threshold : )

21.cooc_feature_image

  • Energy:灰度值能量 (能量:是灰度共生矩阵各元素值的平方和,是对图像纹理的灰度变化稳定程度的度量,反应了图像灰度分布均匀程度和纹理粗细度。能量值大表明当前纹理是一种规则变化较为稳定的纹理)
    • Correlation:灰度值的相关性 (能量:是灰度共生矩阵各元素值的平方和,是对图像纹理的灰度变化稳定程度的度量,反应了图像灰度分布均匀程度和纹理粗细度。能量值大表明当前纹理是一种规则变化较为稳定的纹理)
    • Homogeneity:灰度值的局部同质性 (是图像包含信息量的随机性度量。当共生矩阵中所有值均相等或者像素值表现出最大的随机性时,熵最大;因此熵值表明了图像灰度分布的复杂程度,熵值越大,图像越复杂)
    • Contrast:灰度值对比 (反差:又称为对比度,度量矩阵的值是如何分布和图像中局部变化的多少,反应了图像的清晰度和纹理的沟纹深浅。纹理的沟纹越深,反差越大,效果清晰;反之,对比值小,则沟纹浅,效果模糊)

参考:
1
2
3
4
基于Halcon的图像预处理
11
图像、区域缩放
HALCON视觉算子2D/3DTransformations相关函数中文说明Tools(1)
17
21

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值