2 次元点集合の穴検出
質問:
2 次元の点セットが与えられた場合、その点セット内の穴を見つけるにはどうすればよいでしょうか?アルゴリズムには、これらの穴を見つけるために調整可能な感度が必要です。
解決策:
点セットのビットマップ表現を作成します。
ビットマップ内の接続されたコンポーネントを検索します。
各連結成分の凸包を計算します。
穴の境界を出力します。
アルゴリズム:
<code class="language-python">import numpy as np from scipy.ndimage import label def find_holes(points, sensitivity=1): """ 查找二维点集中的孔洞。 参数: points: 二维点列表。 sensitivity: 算法的灵敏度。较高的值将导致找到更多孔洞。 返回: 表示孔洞边界的凸包列表。 """ # 创建点集的位图表示。 xmin, xmax, ymin, ymax = get_bounding_box(points) bitmap = np.zeros((ymax - ymin + 1, xmax - xmin + 1), dtype=np.uint8) for point in points: bitmap[point[1] - ymin, point[0] - xmin] = 1 # 查找位图中的连通分量。 labeled, num_components = label(bitmap) # 计算每个连通分量的凸包。 holes = [] for i in range(1, num_components + 1): component_mask = (labeled == i) component_points = np.where(component_mask) convex_hull = compute_convex_hull(component_points) holes.append(convex_hull) # 输出孔洞的边界。 return holes</code>
例:
<code class="language-python">import matplotlib.pyplot as plt # 生成一组随机点。 points = np.random.rand(100, 2) # 查找点集中的孔洞。 holes = find_holes(points) # 绘制点和孔洞。 plt.scatter(points[:, 0], points[:, 1]) for hole in holes: plt.plot(hole[:, 0], hole[:, 1]) plt.show()</code>
出力:
[2D 散布図、穴のマーク]
ディスカッション:
アルゴリズムの感度パラメーターは、検出される穴のサイズを制御します。感度が高いと、より多くのホールが検出されますが、感度が低いと、検出されるホールは少なくなります。最適な感度は特定の用途によって異なります。
このアルゴリズムを使用すると、点群、画像、メッシュなど、さまざまな種類のデータ セット内の穴を見つけることができます。これは、データを分析してパターンを特定するための多用途かつ強力なツールです。
以上が調整可能な感度で 2D 点セット内の穴を効率的に検出するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。