Halcon算子介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像、窗口基础操作部分
基础操作
dev_close_window()
关闭当前激活得窗口
read_image( :Image:: )
读取图像,可以支持多种格式,比如TIFF,PNG,JPEG-XR,JPEG—2000等,还支持一次性读取多个图像。
Image:输出,读取完后在halcon所存放得变量名
:图片路径,可以就是多个路径,可以就是绝对路径或者相对路径,还可以省略扩展名
示例:
*Readingan image:
read_image(Image,'mreut')
*Reading 3 images into an imagearray:
read_image(Images,[’ic0','ic1’,'ic2'])
stop()
停止程序(等待用户继续运行)
get_image_size(Image:: :Width,Height)
获取图像得尺寸
Image:要获取尺寸得图像
Width:输出,图像得宽度
Height:输出,图像得高度
dev_open_window(::Row, Column,Width, Height,Background:WindowHandle)
打开一个新得图像窗口
Row:图像窗口左上角得起始行,默认0。
(好像没什么用)
Column:图像窗口左上角得起始列,默认0、(好像没什么用)
Width:图像窗口得宽度,默认256
Height:图像窗口得高度,默认256
Background:新窗口得背景颜色,默认黑色(black)
WindowHandle:窗口得识别Id
dev_display(Object :::)
将图像显示到当前得图像窗口上
Object:要显示得图像对象
dev_set_draw( : :DrawMode :)
设置Region得显示形式
DrawMode:区域得显示形式,默认'fill',可选'fill','margin’,fill表示显示实心区域,margin 表示只显示区域得外边界
dev_set_color(::ColorName :)
设置输出颜色
ColorName:颜色名称,默认’white’,可选值(格式):’white',’black’,’gray', 'red', 'green','blue', '#003075’,’#e53019’,'#ffb529'
disp_message( ::WindowHandle, String,CoordSystem,Row, Column,Color,Box:)
输出一段文字信息
WindowHandle:要显示文字得窗口handle
String:要显示得文字信息,会显示在一个行里
CoordSystem:使用得坐标系,默认window,可选’window', 'image'
Row,Column:文字坐标,默认12
Color:文字颜色,默认'black’,可选'’,'black’,'blue’,’yellow',’red', 'gr een','cyan’,’magenta’,’forest green', 'lime green’,'coral’,'slate blue' Box:就是否包含在一个背景框内,默认'true’,可选'true','false'
基础语法
If(‘condition’)… else … endif
条件判断
While(‘condition’)… endwhile
While循环
forIndex := ‘start‘ to ‘max’ by ‘step’… endfor
for循环
图像处理部分
基础操作
图像转化
convert_image_type(Image:ImageConve rted: NewType:)
转换图像类型
Image : 要转化得图像
ImageConverted: 输出,转化后得图像
NewType:要转化得图像类型,详见Halcon得图像像素类型
depose3(MultiChannelImage :Image1, Image2,Image3 ::)
把一个RGB图像转化为3个单通道得图像
MultiChannelImage:输入得多通道图像(应该就是3通道?)
Image1, Image2, Image3:输出,转化后得单通道图像,1就是red,2就是green,3就是blue
rgb1_to_gray(RGBImage :GrayImage :: )
把一张RGB图像转化为灰度图像
RGBImage:输入得RGB图像
GrayImage:输出,得到得灰度图像
腐蚀膨胀
gen_disc_se(: SE:Type,Width,Height, Smax :)
创建一个椭圆形结构元素,用于图像得腐蚀膨胀
SE:输出,生成后得结构元素,图像类型
Type:结构元素得图像像素类型,默认就是'byte’,可选:'byte’,’uint2’,'real’,详见Halcon得图像像素类型
gray_erosion(Image,SE : ImageErosion::)
使用结构元素对图像做腐蚀操作(结构元素可以就是gen_disc_se得输出)
Image:要做腐蚀操作得图像
SE:结构元素
ImageErosion:输出,腐蚀后得图像
gray_dilation(Image,SE : ImageDilation::)
使用结构元素对图像做膨胀操作(结构元素可以就是gen_disc_se得输出)
Image:要做膨胀操作得图像
SE:结构元素
ImageDilation:输出,膨胀后得图像
区域处理部分
基础操作
threshold(Image: Region:MinGray,MaxGray: )
将图像根据灰度值二值化
Image:需要进行二值化得图像
Region:输出,二值化后得结果区域
MinGray:最小灰度值,默认128
MaxGray:最大灰度值,默认255,必须大于MinGray
connection(Region :ConnectedRegions::)
计算出区域中连接得部分
Region:要计算得区域
ConnectedRegions:输出,计算后得Region数组,相连得部分将被划分为一个区域,会以不同颜色加以区分
select_shape(Regions :SelectedRegions: Features,Operation,Min, Max:)
从一个区域数组中选择出符合某特征条件得区域
Regions:输入得区域数组
SelectedRegions:输出,选出得符合某些特征条件得区域数组
Features:条件特征,详见区域特征说明
Operation:对于符合特征得区域得连接操作,可以就是And或者Or
Min:特征得最小值
Max:特征得最大值
示例:
read_image(Image,'monkey')
threshold(Image,S1,160,255)
connection(S1,S2)
select_shape(S2,Eyes,['area','anisometry'],'and’,[500,1、0],[50000,1、7]) disp_region(Eyes,WindowHandle)
difference(Region,Sub: RegionDifference :: )
计算两个区域得差
Region:需要处理得区域
Sub:被减去得区域
RegionDifference:输出,计算后得结果.
示例:
* providesthe regionXwithoutthe pointsinY
difference(X,Y,RegionDifference)
u
: )
Reg connection过得区域数组)
Reg
union2(Region1,Region2:RegionUnion : : )
把两个区域合并成一个区域
Region1:要合并得第一个区域
Region2:要合并得第二个区域
RegionUnion:输出,合并后得区域
plement(Region :Regionplement ::)
计算一个区域得补(一般指全图像区域减去该区域)
Region:要计算得区域
Regionplement:输出,计算后得区域
阈值分割
threshold(Image :Region:MinGray, Max
Gray:)
详见:threshold
auto_threshold(Image :Regions : Sigma:)自动阈值分割
bin_threshold(Image :Region :: )
用于提取背景为白色,且前后北京较为分明;自动选取sigma值进行告诉光滑处理,光滑直到只有一个最小值;例如提取白纸黑字,可以用此算子;
mage :输入得图像
Region:输出,分割后得区域
char_threshold(Image,HistoRegion : Characte rs :Sigma, Percent:Threshold)
阈值分割提取字符
Image:输入得图像
HistoRegion :要提取字符所在得区域
Characters :输出,提取得到得字符区域
Sigma:高斯光滑因子
Percent:灰度直方图中得灰度值差得百分比
Threshold:得到得用于阈值处理得阈值
示例:
read_image(Image, 'letters’)
char_threshold(Image,Image,Seg,0、0,5、0, Threshold)
connection (Seg,Connected)
dual_threshold(Image :RegionCrossings :MinSize,MinGray,Threshold : )
应用于分隔符号图像得阈值处理。
通常伴随着如Diff_of_gauss,sub_image等这样得算子使用;就像前后两帧做差得到图像(差帧法),像素值有正值有负值。
Image:输入得图像
RegionCrossings :输出,获得得区域
MinSize:输出得区域得最小面积
MinGray: 区域得最小灰度绝对值
Threshold:分割值
腐蚀膨胀
erosion_circle(Region:RegionErosion :Radi us:)
使用圆心结构元素对图像做腐蚀操作
Region:要做腐蚀操作得区域(也可以就是区域数组)
RegionDilation:输出,腐蚀后得区域(或区域数组)
Radius:腐蚀操作得圆形结构得半径
dilation_circle(Region:RegionDilation:Radius: )
使用圆形结构对区域做膨胀操作
Region:要做膨胀操作得区域(也可以就是区域数组)
RegionDilation:输出,膨胀后得区域(或区域数组)
Radius:膨胀操作得圆形结构得半径
erosion_rectangle1(Region :RegionErosion : Width,Height :)
使用矩形结构元素对图像做腐蚀操作
Region:要做腐蚀操作得区域(也可以就是区域数组)
RegionDilation:输出,腐蚀后得区域(或区域数组)
Width,Height:腐蚀操作得矩形结构得宽与高
dilation_rectangle1(Region :RegionDilation : Width,Height : )
使用矩形结构元素对图像做膨胀操作
Region:要做腐蚀操作得区域(也可以就是区域数组)
RegionDilation:输出,膨胀后得区域(或区域数组)
Width,Height:膨胀操作得矩形结构得宽与高
生成区域
gen_rectangle2( :Rectangle :Row,Column,P hi,Length1,Length2:)
生成与坐标成任意角度得矩形
Rectangle :输出,生成后得矩形
Row,Column:用于生成得矩形得中心坐标
Phi:生成矩形与水平轴得角度,以弧度为单位
Length1, Length2 :生成矩形得长宽得一半
亚像素轮廓(XLD)部分
基础操作
threshold_sub_pix(Image :Border :Thres hold:)
提取图像得XLD
Image:要提取xld得图像(单通道,如果为多通道只提取第一通道)
Border:输出,得到得XLD
Threshold:提取XLD得阈值,灰度值以阈值为分界提取XLD
gen_contour_region_xld(Regions :Contours: Mode: )
从区域(区域数组)生成亚像素轮廓
Regions:要生成亚像素轮廓得区域(或区域数组)
Contours:输出,生成后得亚像素轮廓
Mode:生成方式,默认’border',可输入范围区域:'border','border_holes','cen ter’
select_shape_xld(XLD :SelectedXLD :Features, Operation, Min,Max :)
选择特定形状特征要求得XLD轮廓或多边形
XLD:输入,要提取得XLD
SelectedXLD:输出,提取得到得XLD
Features:提取XLD得特征依据,默认为’area’,详见特征依据说明
Operation:特征之间得逻辑关系,默认’and'
Min,Max:特征值得要求范围
select_contours_xld(Contours:Selecte
dContours :Feature, Min1, Max1, Min2,Max 2:)
选择多种特征要求得XLD轮廓(如长度开闭等,不支持多边形)
Contours:要提取得XLD轮廓
SelectedContours:输出,提取得到得XLD轮廓
Feature:提取得特征依据,详见特征依据说明
Min1,Max,Min2,Max2:特征值得要求范围
area_center_xld(XLD ::: Area, Row, Column, PointOrder)
获取封闭得亚像素轮廓(或轮廓数组)得面积与重心坐标
XLD:输入得亚像素轮廓(或轮廓数组)
Area:输出,亚像素轮廓得面积
Row:输出,轮廓得重心得row坐标
Column:输出,轮廓得重心得column坐标
PointOrder:输出,沿边界点顺序,正向或者反向
转换操作
shape_trans_xld(XLD:XLDTrans :Type: )
将目标轮廓(或轮廓数组)转化成其她形状
XLD:要转化得XLD(或XLD数组)
XLDTrans:输出,转化后得XLD(或数组)
Type:转化得类型,默认'convex',详见XLD轮廓得转化类型说明
分割
segment_contours_xld(Contours:ContoursSplit: Mode, SmoothCont,MaxLineDist1, MaxLineDist2 : )
把原XLD分割成:“直线",“直线与圆",“直线与椭圆”
Contours:需要被分割得轮廓(或数组)
ContoursSplit:输出,分割后得轮廓数组
Mode:分割模式,默认lines_circles,可选’lines', 'lines_circles’,’lines_ellipse s’
SmoothCont:用于平滑轮廓得点数量
MaxLineDist1:轮廓到近似线得最大距离(第一次迭代)
MaxLineDist2:轮廓到近似线得最大距离(第二次迭代)
拟合操作(未完)
fit_line_contour_xld(Contours::Algorithm,MaxNumPoints,ClippingEndPoints,Iterations,ClippingFactor : RowBegin,ColBegin,Ro wEnd,ColEnd,Nr,Nc, Dist)
根据已知轮廓拟合直线,获得得就是直线得参数
Contours:输入得轮廓
Algorithm:拟合算法,默认tukey,可选'regression’,’huber','tukey','gauss', ’drop',详见轮廓拟合算法说明轮廓拟合算法说明
MaxNumPoints:用于计算得轮廓点得最大数目(-1为所有点),默认—1
ClippingEndPoints:起始与结尾上忽略得点数,默认0
Iterations:迭代最大次数(不用于回归?)
ClippingFactor:离群值得剪切因子,值越小忽略得离群值越多
RowBegin,ColBegin:拟合后得到得直线开始点坐标
RowEnd,ColEnd:拟合后得到得直线结束点坐标
Nr,Nc:直线得法向量
Dist:原点到直线得距离
fit_circle_contour_xld(Contours : :Algorithm,MaxNumPoints, MaxClosureDist,Clipping EndPoints, Iterations,ClippingFactor:Row, Column,Radius, StartPhi, EndPhi,Point Order)
根据已知轮廓来拟合圆,并获得圆参数
Contours:输入得轮廓
Algorithm:拟合算法,默认algebraic,可选' ’algebraic', 'ahuber',’atukey','geometric','geohuber',’geotukey',详见轮廓拟合算法说明轮廓拟合算法说明
MaxNumPoints:用于计算得轮廓点得最大数目(-1为所有点),默认-1
MaxClosureDist:小于这个值被认为就是轮廓封闭得,区分拟合圆与圆弧
ClippingEndPoints:轮廓开始点与结束点参加与拟合点得个数(起始与结尾上忽略得点数?),默认0
Iterations:迭代次数
ClippingFactor:离群值得剪切因子,值越小忽略得离群值越多
Row,Column:圆心坐标
Radius:圆半径
StartPhi, EndPhi:圆弧开始角度,结束角度
PointOrder:边界点得次序
fit_ellipse_contour_xld(Contours::Algorithm, MaxNumPoints,MaxClosureDist, ClippingEndPoints, VossTabSize,Iterations,ClippingFactor : Row,Column,Phi, Radius1,Radius2,StartPhi, EndPhi,PointOrder)
拟合椭圆
fit_rectangle2_contour_xld(Contours : : Algorithm,MaxNumPoints,MaxClosureDist,ClippingEndPoints,Iterations,ClippingFactor: Row,Column,Phi,Length1,Length2,Poi ntOrder)
拟合矩形
测量
基础操作
gen_measure_rectangle2( ::Row,Column,Phi,Length1,Length2,Width,Height, Int erpolation :MeasureHandle)
创建一个任意方向得矩形测量句柄(区域)
Row,Column:矩形中心点坐标
Phi:矩形主轴方向与水平轴夹角
Length1:矩形宽度一半
Length2:矩形高度一半
Width,Height:处理图像得宽,高
Interpolation:插值方法
MeasureHandle:测量句柄
附:
Halcon得图像像素类型
Halcon中得像素类型有如下(首字母应当为小写):
Int1
Int2
Uint2
Int4
Int8
Byte:最常见得灰度图像,8位,一个字节,0~255
Real
Direction
Cyclic
plex
特征依据说明
以下就是一些可选得条件特征说明(代码中首字母应该为小写):Area:区域大小,应该就是以像素为单位
Row:区域中心得row坐标
Column:区域中心得column坐标
Width:区域得宽度
Height:区域得高度
Row1:区域得起始row坐标(顶部)
Column1:区域得起始column坐标(左侧)
Row2:区域得最终row坐标(底部)
Column2:区域得最终column坐标(右侧)
Circularity:区域得圆度
pactness:区域得紧密度
Contlength:区域外轮廓得总长度
Convexity:区域得凸性
Rectangularity:区域得垂直度
Ra:等效椭圆得长轴半径
Rb:等效椭圆得短轴半径
Phi:等效椭圆得方向
Anisometry:椭圆参数,Ra/Rb长轴与短轴得比值Bulkiness:椭圆参数,蓬松度π*Ra*Rb/A
struct_factor:椭圆参数,Anisometry*Bulkiness-1
outer_radius:最小外接圆半径
inner_radius:最大内接圆半径
inner_width:最大内接矩形宽度
inner_height:最大内接矩形高度
dist_mean:区域边界到中心得平均距离
dist_deviation:区域边界到中心距离得偏差
roundness:圆度,与circularity计算方法不同ﻩ
num_sides:多边形边数
connect_num:连通数ﻩ
holes_num:区域内洞数
area_holes:所有洞得面积
max_diameter:最大直径ﻩ
orientate:区域方向ﻩ
euler_number:欧拉数,即连通数与洞数得差ﻩrect2_phi:最小外接矩形得方向
rect2_len1:最小外接矩形长度得一半??
rect2_len2:最小外接矩形宽度得一半ﻩ
moments_m11:几何矩ﻩ
moments_m20:几何矩
moments_m02:几何矩
moments_ia:几何矩
moments_ib:几何矩ﻩ
moments_m11_invar:几何矩ﻩ
moments_m20_invar:几何矩ﻩ
moments_m02_invar:几何矩ﻩ
moments_phi1:几何矩
moments_phi2:几何矩
moments_m21:几何矩ﻩ
moments_m12:几何矩
moments_m03:几何矩
moments_m30:几何矩ﻩ
moments_m21_invar:几何矩
moments_m12_invar:几何矩
moments_m03_invar:几何矩ﻩ
moments_m30_invar:几何矩
moments_i1:几何矩ﻩ
moments_i2:几何矩
moments_i3:几何矩ﻩ
moments_i4:几何矩
moments_psi1:几何矩ﻩ
moments_psi2:几何矩
moments_psi3:几何矩
moments_psi4:几何矩
区域得xld生成方式说明
border:边界像素得外边框将被用来生成边界border_holes:除了外边界,还包含内边界center:边界像素得中心将被用来生成边界
XLD轮廓得转化类型说明
Convex:凸壳(貌似就是去除表面凹处)
Ellipse:最小外接椭圆
outer_circle:最小外接圆
rectangle1:最小外接矩形,长宽会与坐标轴平行
rectangle2:最小外接矩形,长宽角度与坐标轴无关轮廓拟合算法说明
拟合直线
Regression:
Huber:
Tukey:
Gauss:
Drop:
拟合圆
Algebraic:
Ahuber:
Atukey:
Geometric:
Geohuber:
Geotukey:。