Tôi có một lớp vectơ với hàng triệu đa giác tạo độ phủ liên tục. Tôi cần phân loại chúng theo hình dạng của chúng. Tôi đã sử dụng một số chỉ mục hình dạng từ sinh thái cảnh quan như độ nén ( 4piA / P ^ 2 ), chiều rộng trung bình ( 2A / P ), số hình dạng ( P / sqrt (A) ), tôi cũng thấy câu trả lời này để Tính độ tròn / độ nén của đa giác?
Vấn đề của tôi là tất cả các số liệu này chỉ sử dụng một số tỷ lệ diện tích và chu vi. Ngay cả chỉ số Kích thước Fractal cũng chỉ sử dụng diện tích và chu vi ( 2ln (0,25P) / ln (A) ). Nhưng làm thế nào tôi có thể phân biệt hai đa giác có cùng diện tích và chu vi nhưng hình dạng hoàn toàn khác nhau? Giống như đa giác phân nhánh A này:
mà tôi đã cố vẽ với cùng diện tích và chu vi như dải cong B. Tất cả các chỉ số đã biết của tôi sẽ giống nhau đối với chúng. Nhưng đối với tôi, việc phân biệt các dải đơn giản (bao gồm cả cong như mặt trăng mới) là rất quan trọng với các hình dạng phân nhánh phức tạp.
Tôi cố tình chỉ ra đa giác B là một dải cong chứ không phải là một dải thẳng bởi vì tôi biết về chỉ số Vòng tròn liên quan phát hiện các hình dạng kéo dài thẳng nhưng đa giác của tôi cũng có thể có cùng một đường tròn. Ngay cả khi tôi xây dựng thân tàu Convex và tính tỷ lệ các khu vực Apolygon / Aconvex , nó có thể rất giống nhau ở đây.
Vì vậy, làm thế nào tôi có thể phân biệt rõ ràng đa giác A phân nhánh với đa giác B trong dữ liệu vectơ ? (Chuyển đổi chúng thành raster sẽ yêu cầu kích thước ô cực nhỏ, bộ dữ liệu khổng lồ và thiếu bộ nhớ, vì vậy điều đó là không thể). Có các chỉ số hình dạng khác bao gồm các tham số khác? Lý tưởng nhất, phương pháp này sẽ phân biệt không chỉ các đa giác phân nhánh rõ ràng mà ngay cả C và D:
Ý tưởng duy nhất của tôi là xây dựng thân tàu lồi sau đó xóa đa giác khỏi thân tàu lồi và đếm số lượng mảnh lớn mà nó để lại (xóa đa giác bằng đa giác chứ không phải toàn bộ lớp). Điều này có thể cho thấy sự phức tạp biên giới.
Tôi hoan nghênh các giải pháp / thuật toán toán học mà sau này tôi sẽ triển khai trong Python.