0.create_distance_transform_xld(Contour : : Mode, MaxDistance : DistanceTransformID)
create_distance_transform_xld创建参考轮廓Contour 的XLD距离转换,
并在DistanceTransformID中返回结果句柄。
一旦创建了XLD距离转换,操作符apply_distance_transform_xld将计算从测试轮廓到参考轮廓Contour的逐点的距离。
更精确的讲是,于测试轮廓的每一点,计算出其与轮廓Contour 的最小距离。
参数Mode确定apply_distance_transform_xld计算哪个距离:
'point_to_point'计算到轮廓基准点的最小距离。
与此相反,'point_to_segment'计算到轮廓线中轮廓线段的最小距离(见下图)。
虚线表示从左边测试轮廓的第一点开始计算的距离。
距离d1对应于'point_to_point'模式,
而距离d2对应于'point_to_segment'模式。
灰色区域表示在参考轮廓周围的最大距离内的区域,为该区域计算距离。
测试轮廓点2的距离将设置为MaxDistance,因为它在这个区域之外。
参数MaxDistance指定与调用方感兴趣的参考轮廓线的最大距离。
如果测试轮廓点到参考轮廓的距离超过MaxDistance,
则将apply_distance_transform_xld的输出距离设置为MaxDistance。
如果重复使用引用轮廓,
那么操作符create_distance_transform_xld和apply_distance_transform_xld可以替代distance_contours_xld。
create_distance_transform_xld在轮廓 Contour 周围的相关区域为每个像素存储其参考轮廓 Contour 的最近点或线段(取决于Mode)。
这使得apply_distance_transform_xld可以相当快地计算距离,
几乎不依赖于参考轮廓的点或段的数量、测试轮廓的Mode和点的位置。
然而,XLD距离变换的准备可能需要几秒或几分钟,
这取决于参考轮廓的点或段的数量以及轮廓周围受MaxDistance影响的相关区域。
此外,如果Mode设置为'point_to_point', create_distance_transform_xld会更快。
get_distance_transform_xld_contour和get_distance_transform_xld_param
可用于获取XLD距离变换DistanceTransformID的参考轮廓和参数。
1.apply_distance_transform_xld(Contour : ContourOut : DistanceTransformID : )
apply_distance_transform_xld 使用参考轮廓的XLD 距离变换DistanceTransformID,
确定Contour轮廓每个点 到参考轮廓最小距离。
返回的轮廓ContourOut 包含计算距离的属性“distance”。
可以通过使用get_contour_attrib_xld查询属性'distance'来访问它们。
注意,这些距离依赖于create_distance_transform_xld的参数:
这些距离被剪切到参数MaxDistance指定的最大距离。
其参数Mode决定是计算距离'point_to_point',
还是'point_to_segment'。
有关详细信息,请参阅上边的create_distance_transform_xld介绍。
2.clear_distance_transform_xld( : : DistanceTransformID : )
clear_distance_transform_xld清除由create_distance_transform_xld创建的XLD距离转换IDistanceTransformID。
3.write_distance_transform_xld( : : DistanceTransformID, FileName : )
将XLD距离DistanceTransformID写入FileName 给出的文件中。
XLD距离转换的默认HALCON扩展名是“hdtc”。
4.read_distance_transform_xld( : : FileName : DistanceTransformID)
read_distance_transform_xld从FileName 提供的文件中读取以前用write_distance_transform_xld存储的XLD距离转换,
并返回句柄DistanceTransformID。
XLD距离转换的默认HALCON扩展名是“hdtc”。
get_distance_transform_xld_contour可用于获取用于构建XLD距离转换DistanceTransformID的参考轮廓。
5.get_distance_transform_xld_contour( : Contour : DistanceTransformID : )
get_distance_transform_xld_contour返回用于构建XLD距离转换DistanceTransformID的参考轮廓。
在使用apply_distance_transform_xld将给定轮廓与参考轮廓进行比较时,可以使用该方法进行可视化。
6.serialize_distance_transform_xld( : : DistanceTransformID : SerializedItemHandle)
serialize_distance_transform_xld序列化XLD距离转换DistanceTransformID。
序列化的XLD距离转换在句柄SerializedItemHandle中返回,
可以使用deserialize_distance_transform_xld反序列化。
7.get_distance_transform_xld_param( : : DistanceTransformID, GenParamName : GenParamValue)
get_distance_transform_xld_param返回用于构建XLD距离转换DistanceTransformID的参数。
参数的名称在GenParamName中传递,
它们的值在GenParamValue中返回。
GenParamName可以包含参数'mode'和'max_distance'的名称。
参数有'max_distance', 'mode'
8.set_distance_transform_xld_param( : : DistanceTransformID, GenParamName, GenParamValue : )
set_distance_transform_xld_param为XLD距离转换DistanceTransformID设置新参数。
参数的名称和值分别在GenParamName和GenParamValue中传递。
GenParamName可以包含参数'mode'和'max_distance'的名称。
然后用更新后的参数值重建原始参考轮廓的XLD距离变换。
GenParamName有'max_distance', 'mode'
GenParamValue 有 'point_to_point', 'point_to_segment'等。
例程:
dev_close_window ()
dev_open_window_fit_size (0, 0, 1280, 1024, -1, -1, WindowHandle)
Mode := 'point_to_point'
* Mode := 'point_to_segment'
Tolerance := 3
MaxDistance := 8
read_image (Image, 'metal-parts/circle_plate_01')
edges_sub_pix (Image, Edges, 'canny', 3, 20, 40)
select_contours_xld (Edges, EdgeOriginal, 'contour_length', 3000, 10000, -0.5, 0.5)
gen_image_const (ImageRow, 'real', 12, 10)
add_noise_white (ImageRow, ImageRowNoise, MaxDistance)
gen_image_const (ImageCol, 'real', 12, 10)
add_noise_white (ImageCol, ImageColNoise, MaxDistance)
get_image_size (Image, Width, Height)
zoom_image_size (ImageColNoise, ImageColNoiseZoom, Width, Height, 'weighted')
zoom_image_size (ImageRowNoise, ImageRowNoiseZoom, Width, Height, 'weighted')
real_to_vector_field (ImageRowNoiseZoom, ImageColNoiseZoom, VectorField, 'vector_field_relative')
unwarp_image_vector_field (Image, VectorField, ImageWarped)
edges_sub_pix (ImageWarped, EdgesWarped, 'canny', 3, 20, 40)
select_contours_xld (EdgesWarped, EdgeWarped, 'contour_length', 3000, 10000, -0.5, 0.5)
*
create_distance_transform_xld (EdgeOriginal, Mode, MaxDistance, DistanceTransformID)
apply_distance_transform_xld (EdgeWarped, TestContourOut, DistanceTransformID)
get_contour_attrib_xld (TestContourOut, 'distance', DistanceClipped)
segment_contour_attrib_xld (TestContourOut, ContourPart, 'distance', 'and', Tolerance, MaxDistance)
write_distance_transform_xld (DistanceTransformID, '1')
clear_distance_transform_xld (DistanceTransformID)
read_distance_transform_xld ('1', DistanceTransformID)
get_distance_transform_xld_contour (Contour, DistanceTransformID)
serialize_distance_transform_xld (DistanceTransformID, SerializedItemHandle)
open_file ('standard', 'output_binary', FileHandle)
fwrite_serialized_item (FileHandle, SerializedItemHandle)
close_file (FileHandle)
clear_serialized_item (SerializedItemHandle)
clear_distance_transform_xld (DistanceTransformID)
*
open_file ('standard', 'input_binary', FileHandle)
fread_serialized_item (FileHandle, SerializedItemHandle)
deserialize_distance_transform_xld (SerializedItemHandle, DistanceTransformID)
get_distance_transform_xld_param (DistanceTransformID, 'mode', GenParamValue)
set_distance_transform_xld_param (DistanceTransformID, 'mode', 'point_to_segment')
close_file (FileHandle)
clear_distance_transform_xld (DistanceTransformID)
clear_serialized_item (SerializedItemHandle)
|