union1(ConnectedRegions, RegionUnion)
它是将所有区域变成一个整体,选择一个即为所有
union2(ConnectedRegions, RegionUnion)
它是将两个区域合并成一个整体,仅限两个
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种选择,明、暗、同、不同
算子:disp_continue_message
功能:在荧幕上显示暂停程序继续操作的信息。
如果参数Box设置为’true’,则文本将写在白框内,这在不规则背景下很有用。
输入参数: WindowHandle图形窗口的窗口句柄,显示消息的位置。
Color将文本的颜色定义为字符串。 如果设置为[]或’’,则使用当前设置的颜色。 Color 输入显示的颜色,默认 l>lack踞色,参考 ‘black’,‘blue’,‘yellow’,‘red’,‘green’,‘cyan’,‘magen ta’,
Box如果设置为“ true”,则文本将写在白框中。默认值true。可选项’true’, ‘false’。
dev_open_window_fit_image(Image : : Row, Column, WidthLimit, HeightLimit : WindowHandle)
打开一个新的图形窗口,它保留给定图像的长宽比
保持给定图像的长宽比,以最小最尺寸打开一个图形窗口。
作用:计算一个区域的骨架
参数翻译(顺序对应以上参数顺序):
输入区域、
输出区域骨架
一般这两个函数分别位于程序的开头和结尾
光标右击函数,选择显示函数,可以看到三个函数
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:在程序执行期间控制变量窗口的更新或关闭,则每当程序修改变量
时,更改变量窗口(图标和控件变量)的内容。
主要是减少程序的运行时间
optimize_rft_speed确定了一种方法,该方法可为尺寸为 Width*Height的图像实现实数值FFT的最佳运行时间。为一个图像大小确定的数据不会影响用于其他图像大小的方法。
gray_range_rect: 用一个矩形结构元素在图像中滑动,新值=(矩形中最大的)灰度值-(矩形中最大的)最小的灰度值
作用:确定区域内的最小和最大灰度值;
参数翻译(对应以上参数顺序):
输入需要计算的区域、
输入灰度图像、
输入 低于(以上)绝对最高(最低)百分比 取值范围: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,则不会计算直方图以加快运行时间。
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
原型
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)
根据缩放因子实现图像缩放
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)
名称
get_domain - 获取图像的域(ROI)。
用法
get_domain(Image : Domain : : )
描述
算子get_domain将所有输入图像的定义域作为区域返回。
原型
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才有意义。
hom_mat2d_identity( : : : HomMat2DIdentity)
功能:产生仿射变换矩阵(产生一个空的二维空变换矩阵)
功能:为一个同质二维变换矩阵添加一个循环。
在我们编写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)
在找到模板之后,还需要对其进行转化,使之能够显示,这里用到两个函数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 (输入参数) ——输入转换矩阵
本地函数 用来估计生成背景图像
将图像傅里叶变换到频域中,通过高斯滤波,然后傅里叶反变换回来,得到的图像就是背景模板
显示函数:
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 ()
通过阈值实现图像的分水岭算法分割
watersheds_threshold(Image : Basins : Threshold : )
参考:
1
2
3
4
基于Halcon的图像预处理
11
图像、区域缩放
HALCON视觉算子2D/3DTransformations相关函数中文说明Tools(1)
17
21