Pengesanan lubang set titik dua dimensi
Soalan:
Memandangkan set titik dua dimensi, bagaimana untuk mencari lubang dalam set titik? Algoritma harus mempunyai sensitiviti boleh laras untuk mencari lubang ini.
Penyelesaian:
Mencipta perwakilan bitmap bagi set titik.
Cari komponen yang disambungkan dalam peta bit.
Hitung badan cembung setiap komponen yang disambungkan.
Keluarkan sempadan lubang.
Algoritma:
<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>
Contoh:
<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>
Output:
[Plot serakan 2D, lubang ditanda]
Perbincangan:
Parameter sensitiviti algoritma mengawal saiz lubang yang ditemui. Kepekaan yang lebih tinggi akan menyebabkan lebih banyak lubang ditemui, manakala sensitiviti yang lebih rendah akan menyebabkan lebih sedikit lubang ditemui. Kepekaan optimum bergantung pada aplikasi tertentu.
Algoritma boleh digunakan untuk mencari lubang dalam pelbagai jenis set data yang berbeza, termasuk awan titik, imej dan jerat. Ia adalah alat yang serba boleh dan berkuasa untuk menganalisis data dan mengenal pasti corak.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengesan Lubang dengan Cekap dalam Set Titik 2D dengan Sensitiviti Boleh Laras?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!