halcon学习(算子汇总)

from:https://www.cnblogs.com/hanzhaoxin/archive/2013/01/09/2852213.html

dev_clear_obj(Objects : : : ) 
删除一个iconic对象

dev_error_var( : : ErrorVar, Mode : ) 
定义或取消定义一个错误变量

dev_get_exception_data( : : Exception, Name : Value) 
获取异常数据 
Exception:包含异常数据或用户定义的错误码的元组; 
Name:异常数据的名字 
Value:异常数据

dev_set_check( : : Mode : ) 
指定错误处理的模式 
当Mode为give_error时,抛出异常; 
当Mode为~give_error时,不抛出异常。

dev_update_pc( : : DisplayMode : ) 
在程序执行过程中,程序编辑器是否更新。

dev_update_time( : : DisplayMode : ) 
是否更新时间显示

dev_update_var( : : DisplayMode : ) 
是否实时更新变量窗口

dev_update_window( : : DisplayMode : ) 
是否实时更新图形窗口 
dev_clear_window( : : : ) 
清除图形窗口中的内容

dev_inspect_ctrl( : : Variable : ) 
打开变量Variable的变量监视窗口

dev_close_inspect_ctrl( : : Variable : ) 
关闭变量Variable的变量监视窗口

dev_close_window( : : : ) 
关闭(当前)活动的图形窗口

dev_display(Object : : : ) 
在当前窗口显示Image对象

dev_get_preferences( : : PreferenceNames : PreferenceValues) 
获取偏好名称对应的偏好值

dev_map_par( : : : ) 
打开可视化参数对话框

dev_map_prog( : : : ) 
用于再现被dev_unmap_prog( : : : ) 隐藏的主窗口。

dev_map_var( : : : ) 
用于再现被dev_unmap_var( : : : ) 隐藏的变量窗口。

dev_open_window( : : Row, Column, Width, Height, Background : WindowHandle) 
打开一个新的图形窗口

dev_set_color( : : ColorName : ) 
设置一个或多个输出颜色

dev_set_colored( : : NumColors : ) 
设置多种输出颜色

dev_set_draw( : : DrawMode : ) 
设置区域(Region)填充模式

dev_set_line_width( : : LineWidth : ) 
设置区域轮廓的线宽

dev_set_lut( : : LutName : ) 
设置查询表(lut)

dev_set_paint( : : Mode : ) 
定义灰度值输出模式

dev_set_part( : : Row1, Column1, Row2, Column2 : ) 
设置显示图像的部分

dev_set_preferences( : : PreferenceNames, PreferenceValues : ) 
在一个程序中设置HDevelop的偏好

dev_set_shape( : : Shape : ) 
定义区域的输出形状

dev_set_window( : : WindowHandle : ) 
激活一个图形窗口

dev_set_window_extents( : : Row, Column, Width, Height : ) 
改变一个图形窗口的位置和大小

from:https://blog.csdn.net/fred_yang2013/article/details/9665077

dev_update_window(: : DisplayMode: ) :默认状态下运行产生的所有的对象(图像,区域,或XLD)都在活动图形窗口显示。可以用OFF关闭此模式,默认值为off(不支持C++代码),因为这会拖慢程序运行的速度,我们需要的只是最终的结果。

dev_display(Operator)显示image,region等变量,当先输出image在输出region变量时,image可以被覆盖

get_system(: : Query: Information) 返回关于当前激活的halcon系统参数。例如查询当前处理器的核心数get_system('processor_num',Information)。获得信息的目的是为了再set_system,保持系统参数不变。

dev_open_window(左上角开始行数,左上角开始列数,窗口的宽,窗口的高,窗口的背景颜色,窗口标识符(输出));创建一个窗口

gen_grid_region(创建线或者像素区域名(输出),行方向的间隔,列方向的间隔,类型线或者像素,线的横向长度,列向长度);创建一个域。直线或者像素组成

clip_region(画的图像:被画的图像(输出):画的图像的矩形左上角的行坐标,列坐标,矩形右下角的行坐标,列坐标)  ;将域进行固定

read_image(图像名字(输出),文件名字);

reduce_domain(输入的图像,新的图像域,有新图像域的图像(输出))  减少图像域

 

sobel_amp(被处理的图像,处理后的图像:滤波类型,梯度大小) sobel 算子

根据选择的不同滤波器类型,使用的模板也不同,a,b分别表示和滤波模A,B板卷积之后单个像素的值

'sum_sqrt'              sqrt(a^2 + b^2) / 4                         

'sum_abs'           (|a| + |b|) / 4

'thin_sum_abs'          (thin(|a|) + thin(|b|)) / 4

'thin_max_abs'          max(thin(|a|),thin(|b|)) / 4

'x'                     b / 4

'y'                     a / 4

thin(x)分别表示一个垂直最大值(垂直方向只取一个最大)(模板A)和一个水平最大值(模板B),否则就是0.因此对于thin_sum_abs和thin_max_abs梯度图像的边缘就变细了。不同滤波处理方式如图处理结果如图。

threshold(被处理图像,分割后的域:最小的灰度值,最大的灰度值)  返回  min<= >=max的那部分图像

dilation_rectangle1(要扩张的区域,扩张后的图像,矩形的宽,矩形的高)以检测出的点为中心进行矩形扩张

fill_up(检测的图像域,检测后的图像域)把区域中检测到的不一样颜色的孔进行着色(默认是八邻域检测)

 

 skeleton(:: : ) 

skeleton算子计算区域内的骨架,也就是输入区域的中轴线。在骨架上的每一个点可以被看做圆的中心点,并且有尽可能大的半径,但是仍然被完全包含在区域里。

Region是被变细的区域;Skeleton是结果骨架

有关此方法具体可以参考Eckardt,U. “Verdünnungmit Perfekten Punkten”,Proceedings 10. DAGM-Symposium, IFB 180, Zurich, 1988。

 

 sobel_dir(Image:EdgeAmplitude, EdgeDirection: FilterType, Size: )

用Sobel算子检测边缘(幅度(梯度向量的长度)和方向)

sobel_dir计算图像的一阶导数并且被用来当做边缘检测器。滤波器基于下面的滤波模板来模拟一阶导数

 A =                                

1       2      1

0       0      0

-1      -2     -1

B=

1       0     -1

2       0     -2

1       0     -1

根据选择的不同的滤波类型,使用不同的滤波模板。(下面的式子a,b表示用模板A,B和图像进行卷积的结果,表示一个特定的像素值)

'sum_sqrt'              sqrt(a^2 + b^2) / 4

'sum_abs'               (|a| + |b|) / 4

对于一个3x3大小的Sobel算子,分别直接应用A,B模板进行检测就可以了。如果要使用大一些尺寸的滤波器首先要进行高斯滤波或者二项式滤波。高斯滤波器必须使用如下所示的滤波类型。并且此存只可以是5,7,9,13。二项式滤波器通过在FilterType后面添加"_binomaial"。它的尺寸可以使用3到39中任何一个值。并且它可以通过两个Size参数选择不同数量的行和列方向进行平滑,,第一个Size参数表示模板的宽(在列的方向平滑,也就是行),第二个Size参数表示模板的高(在行的方向进行平滑,也就是列)。二值滤波器只可以用在字节类型的图像上,uint2和real。因为平滑滤波减小了边缘幅度,在这种情况下边缘幅度乘以2以减少信息的丢失。因此

sobel_dir(I,Amp,Dir,FilterType,S)

forSize > 3 在概念上等于

scale_image(I,F,2,0)

gauss_image(F,G,S-2)

sobel_dir(G,Amp,Dir,FilterType,3)

或者

scale_image(I,F,2,0)

binomial_filter(F,G,S[0]-2,S[1]-2)

sobel_dir(G,Amp,Dir,FilterType,3).

边缘方向返回值放在EdgeDirection中,并且分两步存储,例如一个边缘方向为在正方向相对于x轴为x度并且在边缘方向图像中存储x/2。并且在强度变化的方向也被考虑在其中,用[Ex,Ey]表示梯度方向。下面的边缘方向作为r/2返回:

intensityincrease                     Ex / Ey        edge direction r

frombottom to top                      0 /+         0

fromlower right to upper left          - /+         ]0,90[

fromright to left                      - /0         90

fromupper right to lower left          - /-         ]90,180[

fromtop to bottom                      0 /-         180

fromupper left to lower right          + /-         ]180,270[

fromleft to right                      + /0         270

fromlower left to upper right          + /+         ]270,360[.

边缘幅度为0的点被标记为边缘方向255(未定义方向)

Sobel_amp可以在OpenCL设备上执行。注意当用高斯滤波器模板尺寸大于三,结果可以在不同CPU中实现

参数:

Image(input_object)  (multichannel-)image(-array) →object(byte / int2 / uint2 / real)

Inputimage.

EdgeAmplitude(output_object)  (multichannel-)image(-array) →object(byte / int2 / uint2 / real)

Edgeamplitude (gradient magnitude) image.

EdgeDirection(output_object)  (multichannel-)image(-array) →object(direction)

Edgedirection image.

FilterType(input_control)  string →(string)

Filtertype.

Defaultvalue: 'sum_abs'

Listof values: 'sum_abs', 'sum_sqrt', 'sum_abs_binomial', 'sum_sqrt_binomial'

Listof values (for compute devices): 'sum_abs', 'sum_sqrt', 'sum_abs_binomial','sum_sqrt_binomial'

Size(input_control)  integer(-array) →(integer)

Sizeof filter mask.

Defaultvalue: 3

Listof values: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,39

difference(Region,Sub: RegionDifference: :) 计算两个Region中的不同(Regionsin Region)- (Regions in Sub)

Region(input_object)  region(-array) →object

Regionsto be processed.

Sub(input_object)  region(-array) →object

Theunion of these regions is subtracted from Region.

RegionDifference(output_object)  region(-array) →object

Resultingregion.

计算结果就是除去Region中存在于Sub中的点。Notethat, internally, all regions of Sub are united to a single region before thedifferences between the individual regions of Region and the united region arecalculated.

对于上述两个输入参数,空域是合法的。在输出中,也许会出现空域的结果。

shape_trans(Region:RegionTrans: Type: )  改变区域的形状

Region(input_object)  region(-array) →object

Regionsto be transformed.

RegionTrans(output_object)  region(-array) →object

Transformedregions.

Type(input_control)  string →(string)

Typeof transformation.

Defaultvalue: 'convex'

Listof values: 'convex', 'ellipse', 'outer_circle', 'inner_circle', 'rectangle1','rectangle2', 'inner_rectangle1', 'inner_center'

根据Type的类型来改变输入区域的图像:

'convex'  凸包

'ellipse'椭圆

'outer_circle'最小包容圆

'inner_circle'最大的内部圆

'rectangle1'平行于坐标系的最小的包围矩形

'rectangle2'最小包围矩形

'inner_rectangle1'最大的平行于坐标系的内部矩形

'inner_center'输入区域骨架上的离区域中心最近的点

dilation_circle(Region:RegionDilation: Radius: )用圆的结构化区域膨胀一个区域

算子应用一个Minkowski和一个圆形结构元素相加作用于输入域Region。由于圆模板是对称的,所以膨胀也是对称的。作为结构元素的圆的尺寸是由参数Radius决定的。

这个算子返回一个扩大的区域,平滑的边界,并且在区域内部的小于圆模板的洞被封闭了。

Itis useful to select only values like 3.5, 5.5, etc. for Radius in order toavoid a translation of a region, because integer radii result in the circlehaving a non-integer center of gravity which is rounded to the next integer.

 

create_variation_model(: : Width, Height, Type, Mode: ModelID) 为图像对比创建一个变化模型

Width(input_control)  extent.x →(integer)

Widthof theimages to be compared.

Defaultvalue:640

Suggestedvalues:160, 192, 320, 384, 640, 768

Height(input_control)  extent.y →(integer)

Heightof theimages to be compared.

Defaultvalue:480

Suggestedvalues:120, 144, 240, 288, 480, 576

Type(input_control)  string →(string)

Typeof theimages to be compared.

Defaultvalue:'byte'

Suggestedvalues:'byte', 'int2', 'uint2'

Mode(input_control)  string →(string)

Methodused forcomputing the variation model.

Defaultvalue:'standard'

Suggestedvalues:'standard', 'robust', 'direct'

ModelID(output_control)  variation_model →(integer)

IDof thevariation model.

通常情况下变量模型用来把好的对象和不好的对象区分出来。它假设这个区分可以只通过对象的灰度值实现。

变量模型包含一个对象的理想图像,这个理想图像是用compare_variation_model或者compare_ext_variation_model来进行比较的,并且图像代表了对象上每一点的灰度值数量变化。图像和训练的对象模型以及后来用来用来对比的模型的大小都是由Width和Height参数确定的。用来训练和比较的图像类型是通过参数Type来确定的。

变化模型是用多个合格的图像来训练的。因此,训练图像在同一位置和角度来显示对象时很重要的。如果不能通过外部方法保证上述条件,那么对象的姿势可以用匹配(matching)来决定(见find_shape_model)。图像可以通过affine_trans_image转换成一个参考姿势。

     参数Mode用来决定理想的图像对象和相应的变化图像的计算模式。当Mode=’standard’,理想的图像对象(theidealimage of the object)(为计算变化图像做准备)是训练图像在各自的图像位置求平均的结果。相应的变化图像是训练图像在各自图像位置的标准差(standarddeviation)。这个模式的优点就是可以迭代的进行训练,例如,只要是一个好的对象时可用的,那么就可以用train_variation_model来进行训练。但是这样做的缺点就是要注意训练的图相是好图像,因为平均标准方差对于其它图相没有鲁棒性,例如,如果一个差图像不小心被放入到训练图像中,理想图像对象的精度和变化图像可能会退化。

     如果变化模型在训练时不可避免的要参杂一些包含错误的图像,那么参数Mode可以设置为’robust’。在这种模式下,理想的图像对象是这些所有训练图像的在各自位置的中间值。相应的变化图像是训练图像和中值图像再各自图像位置的一个合适尺度的绝对中值偏差。这种模式的优点是对于差图像是鲁棒的。缺点就是它不能迭代的进行训练,例如,所有的训练图像必须用concat_obj累积并且被train_variation_model一次性训练。

     在一些情况下很难获得多个训练图像。在这种情况下,不可以通过单个训练图像获得有用的变化图像。为了解决这个问题,变化图像可以被综合的创造,例如,通过使用灰度值形态学方法(gray_erosion_shapeand gray_dilation_shape)把训练图像按行或者列方向移动+/- 1像素,然后再综合修正图像。其他的一种方法是使用参数Mode=’direct’。在这种情况下,变量模型变化模型只可以用prepare_direct_variation_model直接指定理想图像和变化图像。因为在对象的边缘变化比较剧烈,应当使用边缘算子像soble_amp,edges_image,或者gray_rang_rect来创建变化图像。

 

inspect_shape_model(Image(input_object):ModelImages(output_object), ModelRegions(output_object)  : NumLevels(input_control), Contrast  (input_control): )  创建一个形状模型的表示

 Image(input_object)  (multichannel-)image →object (byte / uint2)

Inputimage.

ModelImages(output_object) (multichannel-)image-array → object(byte /uint2)

Imagepyramid of the input image

ModelRegions(output_object)  region-array →object

Modelregion pyramid

NumLevels(input_control)  integer →(integer)

Numberof pyramid levels.

Defaultvalue: 4

Listof values: 1, 2, 3, 4, 5, 6, 7, 8,9, 10

Contrast(input_control)  number(-array) →(integer)

Thresholdor hysteresis thresholds forthe contrast of the object in the image andoptionally minimum size of theobject parts.

Defaultvalue: 30

Suggestedvalues: 10, 20, 30, 40, 60,80, 100, 120, 140, 160

 

为了决定参数Numlevels和Contrast算子inspect_shape_model特别有用,这两个参数可以快速方便的用在create_shape_model,create_scaled_shape_model,or create_aniso_shape_model上。模型表象基于多个图像金字塔层创建,这个层数被参数NumLevels决定,为了和create_shape_model,create_scaled_shape_model,and create_aniso_shape_model做对比,这个模型只用来对输入的对象进行旋转或者设置尺度,例如0度和1。作为输出,算子创建输出一个图像对象ModeImages包含每一个图像金字塔层和一个区域(Region)ModelRegions代表每一个金字塔层模型。每一个对象可以通过select_obj访问。如果输入的图像Image是单通道的,那么这个方法创造的模型用在create_shape_model,create_scaled_shape_modelor create_aniso_shape_model方法中它们的参数metrics只可用'use_polarity','ignore_global_polarity',and 'ignore_local_polarity'。如果输入图像时多通道那么参数用'ignore_color_polarity'。就像方法create_shape_model,create_scaled_shape_model,and create_aniso_shape_model,描述的那样,金字塔层的个数应该是越大越好,但是考虑到模型必须在金字塔的最高层是可以辨认的并且必须有足够的模型点。参数Contrast要满足那些对于模板对象有意义的特征用在模型上。Contrast可以是一个tuple包含两个值。在这种情况下,模型使用一个像用在edges_image那样的滞后阈值法分割。在这里,tuple里的第一个值是小阈值,第二个是大阈值。(关于更多的滞后阈值法参见hysteresis_threshold)。Contrast还可以包含一个第三个值作为tuple的最后一个元素。这个值根据部分的大小决定一个挑选有意义的模型部分的阈值。例如,这个部分的点数比最小尺寸还要少,那么就会被抑制。对于每一个连续的金字塔层最小尺寸阈值除以二。如果小的模型部分那就应当被抑制,但是不应当使用滞后阈值分割法,不过这三个值一定要在Contrast中指定。在这种情况下,前连个值可以被设定为相同的值。在这种情况下,inspect_shape_model使用不同的NumLevels和Contrast参数值交互的被调用多次,直到获得了一个满意的模型。然后create_shape_modelcreate_scaled_shape_model,or create_aniso_shape_model使用那些获得的参数。

你可能感兴趣的:(Halcon)