HALCON算子函数Chapter 14:Regions
- 格式:doc
- 大小:60.00 KB
- 文档页数:12
Halcon⼀⽇⼀练:阈值分割的⼏个算⼦threshold(Image:Region:MinGray:MaxGray:)功能:得到灰度值在最⼩与最⼤这间的那些部分。
其返回仍然是⼀个区域。
MinGray<MaxGray.这个算⼦可以⽤灰度直⽅图求取到最佳的域值如在上⼀篇中,我们使⽤灰度直⽅图求取图像的最佳阈值,我们发现0-56时最佳,将值代⼊程序中即可。
read_image(Image, 'Clip')//读取图像threshold(Image, Region, 0, 56)//对图像进⾏分割connection(Region, ConnectedRegions)//连通区域select_obj(ConnectedRegions, ObjectSelected, 1)//选择区域中的索引区域1char_threshold(Image,HistoRegion:Characters:Sigma,Percent:Threshold)功能:阈值分割提取字符此⽅法的关键在于找到直⽅图中的最⼤值,在最⼤值的左侧找到关键阈值,其中阈值的计算⽅法如下:histogram[threshold]*100.0<histogram[maximum]*(100.0-Percent)也就是threshold所对应的灰度值频率不能⼤于最⼤值频率*(100。
0-percent)例程:dev_close_window ()read_image (Alpha1, 'alpha1')get_image_size (Alpha1, Width, Height)dev_open_window (0, 0, Width, Height, 'black', WindowHandle)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')dev_display (Alpha1)dev_set_color ('white')dev_clear_window ()char_threshold (Alpha1, Alpha1, Characters, 6, 95, Threshold)dev_display (Characters)gray_histo (Alpha1, Alpha1, AbsoluteHisto, RelativeHisto)disp_continue_message (WindowHandle, 'black', 'true')stop ()dev_display (Alpha1)dev_set_color ('green')gen_region_histo (Histo1, RelativeHisto, 255, 255, 1)。
halcon threshold阈值算法摘要:1.引言2.halcon 阈值算法概述3.常用阈值分割方法4.动态阈值分割方法5.应用实例6.结论正文:一、引言在计算机视觉领域,图像分割是重要的研究内容之一。
图像分割的目的是将图像中不同的目标物体分离出来,以便进行识别和分析。
halcon 是一款由德国MVTec 公司开发的机器视觉软件库,它提供了丰富的图像处理和分析功能。
在halcon 中,阈值算法是一种常用的图像分割方法。
本文将详细介绍halcon 阈值算法的相关内容。
二、halcon 阈值算法概述阈值算法是一种基于像素灰度值进行图像分割的方法。
通过设置一定的阈值,将图像中的像素分为两个或多个区域。
在halcon 中,有多种阈值分割方法可供选择,如全局阈值分割、动态阈值分割等。
三、常用阈值分割方法1.全局阈值分割:threshold 函数可以用于全局阈值分割。
该函数根据输入图像的灰度直方图设置阈值,将图像中的像素分为两个区域。
全局阈值分割适用于环境稳定、光照变化不大、目标与背景存在明显灰度差的场合。
2.动态阈值分割:halcon 提供了dynamic_threshold 函数,用于动态阈值分割。
动态阈值分割根据图像中的像素灰度值自动调整阈值,可以有效应对光照变化和物体形状的变化。
四、动态阈值分割方法1.基于区域生长:region_growing 函数可以用于基于区域生长的动态阈值分割。
该函数通过设置种子区域和邻域搜索方式,逐步合并邻近的像素,形成目标区域。
2.基于边缘检测:edge_detection 函数可以用于基于边缘检测的动态阈值分割。
该函数通过检测图像中的边缘,将边缘相连的像素分为一个区域。
五、应用实例以下以颗粒检测为例,介绍如何使用halcon 阈值算法进行应用。
首先,通过readimage 函数读取图像,然后使用threshold 函数进行全局阈值分割,得到二值化图像。
接着,使用dyn_threshold 函数进行动态阈值分割,得到目标颗粒区域。
Halcon学习笔记--数组操作和⽂件(4)⼀、数组操作对数组可以完成整体赋值,区域赋值,数组之间赋值,某个元素赋值(这个很类似Matlab)count_seconds(T1)Htuple1 := [1,2,3,4,5,6]Htuple3 := sin(Htuple1)*数组元素修改Htuple1[2] := 'ABC'*数组区域修改Htuple1[1:3] := ['ccc','ddd','eee']*数组之间赋值Htuple2 := Htuple1[1:|Htuple1|-1]count_seconds(T2)T3 := T2-T1逐步运⾏count_seconds(t)算⼦是计算程序运⾏的时间;⼆、⽂件操作⽂件操作包括读和写,⽂件格式有:Text,图像,区域等,常⽤算⼦解释如下:1.open_file( : : , : ):'output':创建新的⽂本,⽤write‘append':在原有的⽂本基础上写⼊该⽂件'input':打开⽂件,打开⼀个已经存在的⽂件,⽤以read2.fwrite_string( : : , : )写⼊⽂件3.fnew_line( : : : )换⾏4.close_file( : : : )关闭⽂件5.fread_char( : : : )读⼊字符6.fread_line( : : : , )⾏读取,IsEOF:判断是否到了⽂本⽂件的末尾7.fread_string( : : : , )read_image (Image, 'fabrik')*区域增长算⼦regiongrowing (Image, Regions, 3, 3, 6, 100)count_obj (Regions, Number)*创建⼀个即将要⼊数值⽂件open_file ('E:/欣奕华/项⽬/Halcon/STUDY/⽹络课程笔记/1.⽂件数组/area.dat', 'output', FileHandle)for I := 1 to Number by 1*选择区域select_obj (Regions, ObjectSelected, I)area_center (ObjectSelected, Area, Row, Column)*⽂件要写⼊值fwrite_string (FileHandle, I + ' ' + 'Row :'+ Row + ' Column :'+ Column + 'Area :'+Area )*换⾏fnew_line (FileHandle)endforregiongrowing (Image, Regions, 3, 3, 6, 100) 区域增长算⼦函数作⽤:⽤区域⽣长实现图像分割函数原理:如果相邻像素的灰度值差⼩于等于Tolerance,则被融为⼀个区域。
HALCON算子函数完整汇总Chapter_19:XLD19、1 Access1、get_contour_xld功能:返回XLD轮廓(contour)得坐标。
2、get_lines_xld功能:返回一个XLD多边形(polygon)数据。
3、get_parallels_xld功能:返回一个XLD并行数据。
4、get_polygon_xld功能:返回一个XLD多边形(polygon)数据。
19、2 Creation1、gen_contour_nurbs_xld功能:将一个NURBS曲线转换为一个XLD(密度?)轮廓(contour)。
2、gen_contour_polygon_rounded_xld功能:根据一个多边形(polygon)(以元组形式给出)得圆形角点创建一个XLD轮廓(contour)。
3、gen_contour_polygon_xld功能:根据一个多边形(polygon)(以元组形式给出)创建一个XLD轮廓(contour)。
4、gen_contour_region_xld功能:根据区域创建XLD轮廓(contour)。
5、gen_contours_skeleton_xld功能:将框架转换为XLD轮廓(contour)。
6、gen_cross_contour_xld功能:根据每个输入点交叉得形状创键一个XLD轮廓(contour)。
7、gen_ellipse_contour_xld功能:根据相应得椭圆弧创建一个XLD轮廓(contour)。
8、gen_parallels_xld功能:提取并行XLD多边形(polygon)。
9、gen_polygons_xld功能:根据多边形近似创建XLD轮廓(contour)。
10、gen_rectangle2_contour_xld功能:创建一个矩形XLD轮廓(contour)。
11、mod_parallels_xld功能:提取一个包括同质区域得并行XLD多边形(polygon)。
threshold 按设置的阙值提取图像区域。
connection 合并所有选定像素触摸相互连通区。
Select_shape 选择区域面积(属性:'面积')在指定区间内。
Smallest_rectangle1计算每个区域的坐标(连续/栏)的包围矩形。
dilation_circle ( Region ,RegionDilation , Radius ) 膨胀Radius为半径complement ( Region , RegionComplement )反填充Region区域get_mbutton ( WindowHandle, &Row, &Column, &Button ) 等待至用户鼠标有输入,Row,和Column返回坐标,左键输入:Button=1;中键:Button=2;右键:Button=4set_tposittion(windowhandle,Row,Column)设置文本输出坐标mean_image ( Image : ImageMean : MaskWidth, MaskHeight : )取平均值平滑图像MaskWidt h &MaskHeight ∈ {3, 5, 7, 9, 11, 15, 23, 31, 43, 61, 101} select_region_point (ConnectRegion, OneObject, Row, Column)在连同区ConnectRegion中用坐标选中区域gauss_image ( Image : ImageGauss : Size : )高斯模糊图像,size:3,5,7,9,11 sub_image ( ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : ) ImageSub=(ImageMinuend-ImageSubtrahend)*Mult+Add,增强两幅图像的差异elliptic_axis ( Regions : : : Ra, Rb, Phi ),计算Region区域中的椭圆参数decompose3 ( MultiChannelImage : Image1, Image2, Image3 : : )三通道图像转换为三个图像trans_from_rgb ( ImageRed, ImageGreen, ImageBlue :ImageResult1,ImageResult2, ImageResult3 : ColorSpace : )从一个rgb图像转换为一个任意格式图像difference ( Region, Sub : RegionDifference )计算两个区域的不同,并返回dev_update_pc ( DisplayMode) 设置程序是否总在前面,对置顶有作用(不支持C++代码)dev_update_window (DisplayMode) 默认状态下所有的对象(图像,区域,或XLD)都在活动图形窗口显示。
halcon学习笔记——(11)Image,region,xld初步⼀读取的3种⽅式:read_image( image,'filename') //image 是输出对象,后⾯是输⼊⽂件的路径和名称读取多图:1,申明⼀个数组,分别保存路径ImagePath:=[]ImagePath[0]:='D:/1.bmp'ImagePath[1]:='D:/2.bmp'ImagePath[2]:='D:/3.bmp'for i:=0 to 2 by 1read_image(Image,ImagePath[i])endfor2,for 循环for i:=1 to 3 by 1read_image(Image,'D:/’+'i'+'.bmp')endfor3, 读取⽬录下所有⽂件助⼿,打开图像,选择路径,插⼊代码list_files(输⼊⽂件⽬录地址,选取的要求(files指定选取⽂件格式,recursive递归,深⼊所有,derectories选取⽂件夹,follow_links,max_depth 5...),输出的被选择的⽂件列表)选择符合规则的tuple,其中\\.是转义符,等价于'-->'tuple_regexp_select(⽂件名字,['\\.(bmp|tif)$','ignore_case忽略⼤⼩写'],输出)fabric⽂件路径⼆图像变量Region预处理:消除噪声mean_image/ binomial_filter抑制⼩斑点或者细线median_image平滑smooth_image保存边缘的平滑anisotropic_diffusion变量Region:Region 为某些附和要求性质的像素的⼦集,或者说⼀些被选择的图块区域s,region⼤⼩不受图像限制,有fill和margin两种表达⽅式,类似于游程编码,可⽤于压缩,eg:⽤a2b3c4代表aabbbccccregion操作:选择相应区域select_shape(regions,output,'select type',..requirements)计算相应区域的⾯积,中⼼坐标:area_center(regions,area,row,column)不规则区域的转换:shape_trans(region,regiontrans,type)convex hull凸包围(由外向内包围)outer_circle 外圆(能够包括对象的半径最⼩的圆形)inner_circle 内圆rectangle1 正矩形rectangle2 最⼩包围矩形inner_rectangle1 最⼤内矩形三图型变量XLD(eXtended Line Descriptions)XLD代表亚像素级别的轮廓或者多边形threshold_sub_pix(inputimage, output,requirement)gen_contour_region_xld(inputRegion,output,...)XLD的选择操作(select_shape_xld/selet_contours_xld):select_shape_xld(XLD:SelectedXLD:Features,Operation,Min,Max:)select_contours_xld(Contours:SelectedContours:Feature,Min1,Max1,Min2,Max2:)计算xld的⾯积以及中⼼位置:area_center_xld(XLD:::Area,row,column,pointOrder)xld的合并操作:union_colliner_contours_xld: 合并同⼀直线的xldunion_cocircular_contours_xld: 合并同圆的xldunion_adjacent_contours_xld: 合并相邻的xldxld的转换操作与region类似:shape_trans_xld(XLD:XLDTrans:Type:)有上⾯⼏个类型Xld的分割操作(segment_contours_xld)把初始xld分割成直线,直线和圆,直线和椭圆segment_contours_xld(Contours: ContoursSplit: Mode,SmoothCont, MaxLineDist1, MaxLineDist2:)Xld 的拟合操作(fit_***_contour_xld) 把不完整的形状拟合完整fit_line_contour_xldfit_circle_contour_xldfit_ellipse_contour_xldfit_rectangle2_contour_xld总结:图像和视频,⽂件的读取Region和XLD的初步介绍注意:在使⽤edges_sub_pix提取出来的结果,往往不是完整的圆形,需要⽤union来整合出完整的圆形。
list_files( : : Directory, Options : Files)Directory:目录(文件夹路径)Options:选项'max_files 1000' 指定遍历的最大文件数目Files:文件(文件的路径)tuple_regexp_select( : : Data, Expression : Selection) Data:被选择的文件路径数组Expression:文件格式的筛选规则'ignore_case' 忽略大小写Selection:选择出的文件路径数组示例:1: * 遍历文件夹D:/资料库/Downloads2: list_files ('D:/资料库/Downloads', ['files','follow_links'], ImageFiles) 3:4: * 筛选bmp或jpg格式的文件5: tuple_regexp_select (ImageFiles, ['\\.(bmp|jpg)$','ignore_case'], ImageFi les)6:7: * 依次读取图片8:for Index := 0 to |ImageFiles| - 1 by 19: read_image (Image, ImageFiles[Index])10:11: endfor/////////////////////////////////////////////////////////////////////////////// /////////////////////(一)Halcon的语法结构特点类似于Pascal 与 Visual Basic,大部分的语句是Halcon提供的算子,此外也包含了少部分的控制语句;不允许单独声明变量;提供自动的内存管理(初始化、析构及OverWrite),但句柄则需要显示释放;C++(算子模式)通过代码导出,以C++为例,默认导出为算子型的语法结构,而非面向对象的;在此模式下,全部函数声明为全局类型,数据类型只需要用Hobject、HTuple两类类型进行声明;C++(面向对象)可以以面向对象的方式重写代码,也即利用类及类的成员函数;在这种模式下,控制变量的类型仍未HTuple,而图形数据可以由多种类型,如HImage等;其他语言(略)HImage 可以查看halcon中类相关的内容(二)Halcon的数据类型两类参数:1、图形参数Iconic(image, region, XLD)2、与控制参数Control(string, integer, real, handle),在Halcon算子的参数中,依次为:输入图形参数、输出图形参数、输入控制参数、输出控制参数;并且其输入参数不会被算子改变。
halcon函数手册threshold(Image : Region : MinGray, MaxGray : )Descriptionthreshold selects the pixels from the input image whose gray values g fulfill the following condition:All points of an image fulfilling the condition are returned as one region. If more than one gray valueinterval is passed (tuples for MinGray and MaxGray), one separate region is returned for each interval. For vector field images, the threshold is not applied to gray values but to the lengths of the vectors.找出图像中灰度值大于MinGray,小于MaxGray的像素点connection(Region : ConnectedRegions : : )Descriptionconnection determines the connected components of the input regions given in Region. The neighborhood used for this can be setvia set_system('neighborhood',<4/8>). The default is 8-neighborhood, which is useful for determining the connected components of the foreground. The maximum number of connected components that is returnedby connection can be set via set_system('max_connection',). The default value of 0 causes all connected components to be returned. The inverse operator of connection is union1.select_shape(Regions : SelectedRegions : Features, Operat ion, Min, Max : )DescriptionThe operator select_shape chooses regions according to shape. For each input region from Regions the indicated features(Features) are calculated. If each (Operation = 'and') or at least one (Operation = 'or') of the calculated features is within the default limits (Min,Max) the region is adapted into the output (duplicated).Condition:For an illustration of the different features, please refer to the documentationof the operator region_features.选择指定特征(满足指定条件)的区域,特征常见为面积。
sub_image (ImageConverted1, ImageConverted2, ImageSub, 1, 0)一幅图减另一幅图。
用一幅图的灰度减另一幅的灰度成新的一幅图。
mult_image (Image, ImagePart, ImageResult, 0.015, 0)一幅图加一幅成的一幅图convert_image_type (Traffic2, ImageConverted2, 'int2')转换图像的格式crop_part (ImageNoise, ImagePart, 0, 0, Width, Height)取出一幅图的中部分dots_image (ImageResult, DotImage, 5, 'dark', 2)取出图像中圆点partition_dynamic (SelectedRegions, Partitioned, 25, 20)根据各个区域的特征将各个区域分割开。
intersection (Partitioned, Region, Characters)取出两个区域中重叠的部分,如果Region 有两个区域在Partitioned 中,则这两个区域合并成一区域。
difference (RegionDilation, RegionErosion, RegionDifference)取出两个区域中不重叠的部分。
critical_points_sub_pix (FilterResponse, 'facet', 1.5, 0.7, RowMin, ColMin, RowMax, ColMax, RowSaddle, ColSaddle)取出图像中的关键点。
corner_response (Image, FilterResponse, 3, 0.04)auto_threshold (Image, Regions, 10)自动阈值分割,根据灰度直方图中两波峰中的波谷取出阈值。
HALCON算子函數——Chapter 14 : Regions 14.1 Access1. get_region_chain功能:一個對象的輪廓(contour)作為鏈式碼。
2. get_region_contour功能:查詢一個目標的輪廓(contour)。
3. get_region_convex功能:查詢突起的外表作為輪廓(contour)。
4. get_region_points功能:查詢一個區域的像素數。
5. get_region_polygon功能:用一個多邊形近似獲取區域。
6. get_region_runs功能:查詢一個區域的掃描寬度編碼。
14.2 Creation1. gen_checker_region功能:創建一個方格式區域。
2. gen_circle功能:創建一個圓周。
3. gen_ellipse功能:創建一個橢圓。
4. gen_empty_region功能:創建一個空的區域。
5. gen_grid_region功能:根據行或像素數創建一個區域_。
6. gen_random_region功能:創建一個隨機區域。
7. gen_random_regions功能:創建隨機區域如圓周,矩形和橢圓。
8. gen_rectangle1功能:創建一個與坐標軸平行的長方形。
9. gen_rectangle2功能:創建任意方向的矩形。
10. gen_region_contour_xld功能:從XLD元組中創建一個區域。
11. gen_region_histo功能:將一個直方圖轉換為一個區域。
12. gen_region_hline功能:將Hesse正規形狀中描述的輸入線存儲為區域。
13. gen_region_line功能:將輸入線以區域形式存儲。
14. gen_region_points功能:將個別的像素存儲為圖像區域。
15. gen_region_polygon功能:將一個多邊形存儲為一個目標圖像。
16. gen_region_polygon_filled功能:將一個多邊形存儲為一個已填充區域。
17. gen_region_polygon_xld功能:創建一個XLD多邊形中的區域。
18. gen_region_runs功能:創建一個掃描寬度編碼中的圖像區域。
19. label_to_region功能:提取一幅圖像中灰度值相同的區域。
14.3 Features1. area center功能:一個區域的面積(大小)和中心。
2. circularity功能:影響一個區域與圓的相似度的形狀系數。
3. compactness功能:影響一個區域致密度的形狀系數。
4. connect and_holes功能:連接部分和中斷的數目。
5. contlength功能:描述一個區域輪廓(contour)的長度。
6. convexity功能:影響一個區域凸性的形狀系數。
7. diameter region功能:一個區域兩個邊界點的最大距離。
8. eccentricity功能:來源於橢圓參數的形狀系數。
9. elliptic axis功能:相似橢圓的參數。
10.euler number功能:計算Euler數目。
11. find neighbors功能:搜尋直接鄰域。
12. get region_index功能:包括給定像素在內的所有的區域的索引。
13. get region_thickness功能:查詢主軸附近區域的寬度(厚度)。
14. hamming distance功能:兩個區域間的漢明距離。
15. hamming_distance_norm功能:兩個區域間的歸一化漢明距離。
16. inner circle功能:一個區域內部最大的圓周。
17. inner_rectangle1功能:一個區域內部最大的矩形。
18. moments_region_2nd功能:區域的某時刻幾何特性,。
19. moments_region_2nd invar功能:區域的某時刻幾何特性。
20. moments_region_2nd rel_invar功能:計算相關時刻參數。
21. moments_region 3rd功能:區域的某時刻幾何特性。
22. moments_region_3rd invar功能:區域的某時刻幾何特性。
23. moments_region_central功能:區域的某時刻幾何特性。
24. moments_region_central_invar功能:區域的某時刻幾何特性。
25. orientation_region功能:一個區域的定向。
26. rectangularity功能:影響一個區域矩形相似度的形狀系數。
27. roundness功能:輪廓中獲取的形狀系數。
28.runlength_distribution功能:一個區域掃描寬度編碼所需的順串的分配。
29. runlength_features功能:區域掃描寬度編碼的特征值。
30. select_region_point功能:選擇包括給定像素在內的所有區域。
31. select_region_spatial功能:討論區域的關聯性。
32. select_shape功能:根據圖形特征選擇區域。
33. select_shape_proto功能:選擇彼此有某種關系的區域。
34. select_shape_std功能:選擇給定形狀的區域。
35. smallest_circle功能:一個區域的最小周長。
36. smallest_rectangle1功能:平行於坐標軸的包圍某區域的矩形。
37. smallest_rectangle2功能:任意方向包圍某區域的最小矩形。
38. spatial_relation功能:根據坐標軸方向左、右、上、下排列相關區域。
14.4 Geometric-Transformations1. affine_trans_region功能:對區域進行任意的二維變換。
功能:反饋一個平行於X或Y坐標軸的區域。
3. move_region功能:對區域進行變換。
4. polar_trans_region功能:將一個環狀弧內的區域轉換為極坐標。
5. polar_trans_region_inv功能:將極坐標中的區域轉換為笛卡爾坐標中的區域。
6. projective_trans_region功能:對一個區域進行射影變換。
7. transpose_region功能:翻譯關於一個點的一個區域。
8. zoom_region功能:縮放一個區域。
14.5 Sets1. complement功能:返回一個區域的補碼。
2. difference功能:計算兩個區域的差距(不同)。
功能:計算兩個區域的交集。
4. symm_difference功能:計算兩個區域對稱差異。
5. union1功能:返回所有輸入區域的並集。
6. union2功能:返回兩個區域的並集。
14.6 Tests1. test_equal_region功能:檢測兩個目標區域是否相同。
2. test_subset_region功能:檢測一個區域是否包含在另一個區域中。
14.7 Transformation1. background_seg功能:決定給定區域背景相連的部分。
2. clip_region功能:將一個區域修改為矩形。
3. clip_region rel功能:根據大小修改一個區域。
4. connection功能:計算一個區域相連接的部分。
5. distance transform功能:計算一個區域的距離變換。
6. eliminate runs功能:消除一個給定寬度的順串。
7. expand region功能:填充區域間的間隙或分離互相重疊的區域。
8.fill up功能:填充區域中的中斷(裂縫等)。
9. fill_up_shape功能:填充擁有給定圖形特征區域的中斷。
10. hamming_change_region功能:創建一個有給定漢明距離的區域。
11. interjacent功能:利用給定區域分割圖像。
12. junctions_skeleton功能:找到框架中的結點和終點。
13. merge_regions_line_scan功能:從行掃描圖像合並區域。
14.partition dynamic功能:在較小垂直范圍的位置水平分割一個區域。
15. partition_dynamic功能:將一個區域分割為等大的矩形。
16. rank_region功能:給對區域的操作歸類。
17. remove noise region功能:去除一個區域內的噪聲。
18. shape_trans功能:改變一個區域的形狀。
19. skeleton功能:計算一個區域的框架。
20. sort region功能:根據相鄰位置歸類區域。
21. split_skeleton_lines功能:用一個像素寬,沒有分支的線來分離線。
22. split_skeleton_region功能:用一個像素寬,沒有分支的區域來分離線。