closest_point_transform(Region : Distances, ClosestPoints : Metric, Foreground, ClosestPointMode, Width, Height : )
closest_point_transform分别计算输入区域Region (或其补码)的每个像素到区域外(例如区域外边框上像素)最近像素的
距离并通过参数Distances返回信息。
除了距离之外,对应的最近像素通过参数ClosestPoints返回。
参数Foreground决定是为区域内的所有点计算距离(Foreground= 'true'),
还是为区域外的所有点计算距离(Foreground= 'false')。
对输出图像的每个像素点计算Distances和ClosestPoints 。
图像的大小由Width, Height指定。
输入区域总是裁剪到输出图像的范围。
如果必须计算整个区域内的距离,则应该移动该区域(请参阅move_region),
使其只有正坐标,并且输出图像的宽度和高度应该足够大,以包含该区域。
输入区域的范围可以用smallest_rectangle1获得。
参数Metric决定了哪个度量用于计算距离。
如果Metric = 'city-block',则计算从点到区域边界的最短路径的距离,该区域只允许水平和垂直的“移动”。它们的权值为1。
如果Metric = 'chessboard',则计算从最短路径到边界的距离,允许水平、垂直和对角线的"移动"。它们的权值为1。
如果Metric = 'octagonal',则使用这些方法的组合,这将导致对角线路径获得更高的权重。
如果Metric = ' chamferr -3-4',水平和垂直运动的权重为3,而对角运动的权重为4。
为了对距离进行归一化,得到的距离图像除以3。
由于这个归一化步骤需要一些时间,而且通常对点的相对距离感兴趣,因此可以使用Metric = 'chamfer- 3-4-非归一化'来抑制归一化。
最后,如果Metric = 'euclidean',计算出的距离近似于euclidean。
参数ClosestPointMode决定如何存储最近的点。
对于ClosestPointMode = 'absolute',绝对坐标存储在ClosestPoints中。
对于ClosestPointMode = 'relative',相对于相应像素坐标的偏移量存储在ClosestPoints中。
例程
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 610, 610, 'black', WindowHandle)
* Output every fourth closest-point vector.
dev_set_paint (['vector_field',4,0,1])
gen_circle (Circle, 30, 30, 25.5)
closest_point_transform (Circle, Distances, ClosestPoints, 'euclidean', 'true', 'relative', 61, 61)
dev_clear_window ()
dev_set_part (0, 0, 60, 60)
dev_display (Distances)
dev_set_draw ('margin')
dev_set_color ('green')
dev_display (Circle)
dev_set_color ('cyan')
dev_display (ClosestPoints)
|