ホームページ > バックエンド開発 > C++ > 調整可能な感度で 2D 点セット内の穴を効率的に検出するにはどうすればよいでしょうか?

調整可能な感度で 2D 点セット内の穴を効率的に検出するにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2025-01-18 07:41:07
オリジナル
921 人が閲覧しました

How Can We Efficiently Detect Holes in 2D Point Sets with Adjustable Sensitivity?

2 次元点集合の穴検出

質問:

2 次元の点セットが与えられた場合、その点セット内の穴を見つけるにはどうすればよいでしょうか?アルゴリズムには、これらの穴を見つけるために調整可能な感度が必要です。

解決策:

  1. 点セットのビットマップ表現を作成します。

    • 点をスキャンし、点セットの境界ボックスを決定します。
    • 境界ボックスと同じ寸法のビットマップを作成します。
    • 各ポイントについて、ビットマップ内の対応するピクセルを 1 に設定します。
  2. ビットマップ内の接続されたコンポーネントを検索します。

    • 標準の連結コンポーネント アルゴリズムを使用して、ビットマップ内の連結コンポーネントを識別します。
    • 各接続コンポーネントは、点セット内の穴を表します。
  3. 各連結成分の凸包を計算します。

    • 標準の凸包アルゴリズムを使用して、各連結成分の凸包を計算します。
    • 凸包は穴の境界を表します。
  4. 穴の境界を出力します。

    • アルゴリズムの出力は凸包のリストであり、各凸包は点セット内の穴の境界を表します。

アルゴリズム:

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート