이 Python 코드는 이전 답변에서 설명한 것과 유사한 비트맵 벡터 접근 방식의 구현을 제공합니다. 비트맵의 데이터 밀도를 계산하고, 사용되지 않는 영역을 식별하고, 출력을 분할하고, 결과를 다각형화하여 2D 점 집합에서 구멍을 찾습니다.
import numpy as np import cv2 import matplotlib.pyplot as plt def find_holes(points, resolution=100): """Find holes in a set of 2D points. Args: points: A list of (x, y) tuples representing the points. resolution: The resolution of the bitmap to use. Higher resolution results in more accurate results, but is slower. Returns: A list of (x, y) tuples representing the vertices of the holes. """ # Create a bitmap of the points. bitmap = np.zeros((resolution, resolution), dtype=np.uint8) for point in points: x, y = point bitmap[int(y * resolution), int(x * resolution)] = 255 # Compute data density in the bitmap. density = cv2.dilate(bitmap, np.ones((3, 3))) - cv2.erode(bitmap, np.ones((3, 3))) # Identify unused areas in the bitmap. unused_areas = np.where(density == 0) # Segment the unused areas. segmented_areas = cv2.watershed(density, np.zeros((resolution, resolution), dtype=np.int32), markers=unused_areas[0], mask=bitmap) # Polygonize the segmented areas. holes = [] for i in range(1, np.max(segmented_areas) + 1): mask = np.zeros((resolution, resolution), dtype=np.uint8) mask[segmented_areas == i] = 255 _, contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: hole = [] for point in contour: x, y = point[0] hole.append((x / resolution, y / resolution)) holes.append(hole) return holes # Example usage # Generate a set of random points. points = [(np.random.rand(), np.random.rand()) for _ in range(1000)] # Find the holes in the set of points. holes = find_holes(points, resolution=50) # Plot the points and the holes. plt.scatter([x for (x, y) in points], [y for (x, y) in points], s=1, c='black') for hole in holes: plt.plot([x for (x, y) in hole], [y for (x, y) in hole], c='red') plt.show()
이 코드는 비트맵 작업에 OpenCV를 사용하고 배열에 NumPy를 사용합니다. 조작 및 플로팅을 위한 matplotlib. 다양한 데이터 유형 및 좌표계와 함께 작동하도록 쉽게 수정할 수 있습니다.
위 내용은 Python에서 비트맵 및 벡터 접근 방식을 사용하여 흩어져 있는 2D 점 세트 내의 구멍을 효율적으로 감지하고 윤곽을 잡을 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!