У меня есть два полигона: Полигон 1 и Полигон 2.
Используя две метрики, площадь и длину периметра, я хочу количественно выразить, что у Полигона 1 периметр неровный / неровный / нерегулярный, чем у Полигона 2.
Каждый многоугольник имеет одинаковую длину периметра, но каждый покрывает совершенно разные области. Для количественной оценки неравномерности / неровности / нерегулярности каждого полигона следует рассчитать следующее:
area/perimeter
или
perimeter/area
Я думал perimeter/area
, но потом я нашел этот пост в блоге, который использует area/perimeter
: http://www.r-bloggers.com/measuring-the-gerrymander-with-spatstat/
spatial-statistics
Лучиано
источник
источник
Ответы:
Взгляните на программу под названием FRAGSTATS ( http://www.umass.edu/landeco/research/fragstats/downloads/fragstats_downloads.html ). В разделе метрик патчей упоминается «Индекс измерения фракталов», который в примечаниях гласит «Индекс измерений фракталов привлекателен, потому что он отражает сложность формы в диапазоне пространственных масштабов (размеров патчей). Таким образом, как и индекс формы (SHAPE), он преодолевает одно из основных ограничений отношения площади прямого периметра как меры сложности формы ». ( http://www.umass.edu/landeco/research/fragstats/documents/Metrics/Shape%20Metrics/Metrics/P9%20-%20FRAC.htm ).
источник
Отношение площади к периметру не имеет большого значения, квадрат и прямоугольник, вероятно, будут иметь одинаковую зубчатость, но они могут иметь одинаковый периметр, и чем дальше от квадрата прямоугольник, тем меньше площадь.
Чтобы вычислить "неровность", я думаю, вам нужно знать, сколько вершин находится под углами, превышающими 180 градусов. Это не должно быть слишком сложно для расчета, если вы используете хранилище геометрии, где известно направление вращения многоугольника (обычно против часовой стрелки, и в этом случае, если вы переходите от точки 1 к точке 2, угол превышает 180 градусов, если точка 3 находится справа от линии, определенной пунктами 1 и 2). В противном случае вам нужно сначала определить вращение.
источник
Попробуйте индекс нормализованного периметра ( http://clear.uconn.edu/tools/Shape_Metrics/ ). Индекс нормализованного периметра использует круг равной площади для нормализации метрики. Таким образом, формула является эффективной (в Python, импорт математика)
normPeriIndex = (2*math.sqrt(math.pi*Area))/perimeter
Для вашего примера:
Полигон 1: нормализованный индекс периметра = 0,358
Полигон 2: нормализованный индекс периметра = 0,947
Нормализованный индекс периметра сравнивает входной периметр с наиболее компактным многоугольником с той же площадью (круг равной площади), то есть вы можете использовать его для идентификации объектов с нерегулярными границами. Еще одна замечательная вещь заключается в том, что это легко и быстро рассчитать.
Вы также можете посмотреть на нормированную дисперсию, которая рассчитывает среднее расстояние от точек по периметру от центроида (дисперсия). Для этого вы также рассчитаете отклонение, которое представляет собой среднюю разницу между каждым расстоянием и радиусом круга равной площади, тогда окончательная формула будет (дисперсия - отклонение) / дисперсия.
источник