distance_transform(Region : DistanceImage : Metric, Foreground, Width, Height : )
distance_transform分别计算输入区域(或其补码)的每个点到区域边界的距离。
参数Foreground决定是为区域内的所有点计算距离(Foreground= 'true'),
还是为区域外的所有点计算距离(Foreground= 'false')。
距离是为输出图像DistanceImage 的每个点计算的,它具有指定的尺寸 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。
Region输入区域,
DistanceImage包含距离信息的输出图像。
Metric用于距离变换的度量的类型。有'chamfer-3-4', 'chamfer-3-4-unnormalized', 'chessboard', 'city-block', 'euclidean', 'octagonal'
Foreground计算输入区域内(“true”)或外部(“false”)像素的距离。
Width,Height输出图像的长宽。
例程:
gen_rectangle1 (Rectangle1, 0, 0, 200, 400)
gen_rectangle1 (Rectangle2, 200, 0, 400, 200)
union2 (Rectangle1, Rectangle2, Shape)
distance_transform (Shape, DistanceImage, 'chessboard', 'true', 640, 480)
|