在python中是否有任何函数或库用于使用倒角距离变换计算图像骨架(骨架化)?
以下链接是倒角距离变换的示例: http://www.inf.u-szeged.hu/~palagyi/skel/chamfer34.gif
谢谢
答案 0 :(得分:2)
您的问题未明确表达。倒角距离是两条曲线或两个二进制图像之间的距离
假设您有两条曲线。
计算倒角变换的最简单方法是将曲线A转换为图像中的Distance Transform。然后使用该距离计算曲线A中的每个点与曲线B中的点之间的最近距离。
换句话说,两条曲线或二进制图像之间的最近点距离之和。
import numpy as np
import cv2
# for Chamfer Distance between two curves
p_a - n x 2 numpy array
p_b - n x 2 numpy array
image_shape - (h, w) tuple
def chamfer(p_a, p_b, image_shape):
mask = np.ones(image_shape[:2], dtype=np.uint8) * 255
mask[p_a[:, 1].astype(int), p_a[:, 0].astype(int)] = 0
dist = cv2.distanceTransform(mask, cv2.DIST_L2, 3, dstType=cv2.CV_32F)
return dist[p_b[:, 1].astype(int), p_b[:, 0].astype(int)].sum()
chamfer_dist = 0.5 * (chamfer(p_a, p_b, image_shape) + chamfer(p_b, p_a, image_shape)
另一种选择是使用Hausdorff Distance,这在某些方面被认为是更好的
答案 1 :(得分:1)
不确定这是否是您要寻找的东西,但是我在这里使用精确的欧几里德距离变换有效地实现了TEASAR骨架化算法:https://github.com/seung-lab/kimimaro