擅长:python、mysql、java
<p>你的问题措辞不清楚。切角距离是两条曲线或两幅二值图像之间的距离</p>
<p>假设你有两条曲线。在</p>
<ul>
<li>曲线A</li>
<li>曲线B</li>
</ul>
<p>计算切角变换的最简单方法是将曲线A转换为图像中的<a href="https://en.wikipedia.org/wiki/Distance_transform" rel="nofollow noreferrer">Distance Transform</a>。然后使用距离计算曲线A中每个点与曲线B点之间的最近距离</p>
<p>换句话说,两条曲线或二值图像之间最近点距离的总和。在</p>
<h3>示例代码</h3>
<pre><code>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)
</code></pre>
<p>另一个选择是使用<a href="https://docs.opencv.org/3.4/d0/de1/classcv_1_1HausdorffDistanceExtractor.html" rel="nofollow noreferrer">Hausdorff Distance</a>,这在某些方面被认为是更好的</p>