Наиболее «тщательное» распределение точек по кругу - PullRequest
0 голосов
/ 11 января 2011

Этот вопрос предназначен как для отвлечения, так и для фокусировки на одном подходе к моей проблеме, выраженном в « Найти самое красочное изображение в коллекции изображений ».

Представьте, что у нас есть наборкруги, у каждого есть несколько точек вокруг его окружности.Мы хотим найти метрику, которая дает более высокий рейтинг кругу с точками, распределенными равномерно по кругу.Круги с некоторыми точками, разбросанными на все 360 °, лучше, но круги с гораздо большим количеством точек в одной области по сравнению с меньшим числом в другой области менее хороши.

Количество точек не ограничено.

Две или более точек могут совпадать.

Совпадающие точки по-прежнему актуальны.Круг с одной точкой на 0 ° и одной точкой на 180 ° лучше, чем круг с 100 точками на 0 ° и 1000 точек на 180 °.

Круг с одной точкой на каждый градус вокруг круга оченьхорошо.Круг с точкой каждые полградуса вокруг круга лучше.

В моем другом (вопрос на основе цвета) было предложено, что стандартное отклонение будет полезным, но с оговоркой.Это хорошее предложение и справляется ли оно с близостью от 359 ° до 1 °?

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Это очень сильно зависит от того, чего вы на самом деле хотите достичь. Если все, что вам нужно, это равномерное распределение, то вы можете просто взять все точки на окружности и усреднить их, чем ближе это среднее к центру круга, тем более равномерное распределение.

Однако здесь следует учитывать, что распределение с 180 точками при 0 ° и 180 точками при 180 ° столь же хорошо, как распределение с единственной точкой на каждый градус. Это просто вопрос определений, если это то, что вы хотите или нет.

Связанное, но немного более сложное понятие - это стандартное геометрическое отклонение: http://en.wikipedia.org/wiki/Geometric_standard_deviation

Другой метод, который был бы предложен в вашем другом вопросе, посмотрите на среднее число точек на всех углах и посмотрите, насколько для каждого угла количество точек отклоняется от этого.

т.е. пусть I будет вашим набором углов, скажем {0..359} и v_i = #points at angle i, for i in I, где точка p находится под углом i тогда и только floor(p) == i. Тогда mean_v = (sum of v_i for i in I) / length(I) и d_v_i = v_i - mean_v.

Теперь вы можете определить несколько метрик:

  1. maximum of abs(d_v_i) for i in I
  2. sum of abs(d_v_i) for i in I
  3. sqrt((sum of (d_v_i^2) for i in I) / length(I)) (это стандартное отклонение)

Вы можете взять гораздо больше метрик, любое число, выражающее отклонения, содержащиеся в d_v_i, поможет. Все зависит от того, что именно вы хотите, чтобы определить лучший показатель.

Последнее замечание, поскольку вы, вероятно, хотите сравнить метрики между различными входными наборами, то есть наборами с различным количеством точек данных, которые в вашем случае представляют собой изображения разного размера. Вероятно, вам нужно масштабировать метрики в соответствии с размером вашего ввода и в зависимости от метрики, которую вы используете, вам может потребоваться масштабировать по-разному. Однако существует простой способ проверки вашей метрики: просто рассчитайте метрику для изображения, затем масштабируйте изображение до другого размера и рассчитайте его снова для масштабированного изображения. Конечно, обе метрики должны быть одинаковыми.

1 голос
/ 11 января 2011

Итак, я бы посмотрел на разницу углов.Первым шагом является сортировка точек по кругу.Затем сложите квадрат разницы смежных углов.

Итак, давайте предположим, что p [0] равно 0 градусам, p [1] равно 10, а p [2] равно 20. Тогда ошибка равна (10-0) ^ 2 + (20-10)^ 2 + (360-20) ^ 2.

Вы также можете нормализовать по количеству точек или нормализовать каждую разницу на основе оптимального расстояния для количества точек (абс (разность) -оптимальное) ^2

Вы также можете использовать перцептивные цветовые пространства, а не только RGB или HSV.

...