2011-01-11 3 views
-1

Этот вопрос предназначен как для абстрактного, так и для фокусирования одного подхода к моей проблеме, выраженного в «Find the most colourful image in a collection of images».Самое «тщательное» распределение точек по кругу

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

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

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

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

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

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

ответ

1

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

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

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

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

+0

Перефразируя цветовые пространства, я решил игнорировать попытку сопоставить человеческое видение и решить сначала упрощенный случай. – hippietrail

2

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

Опасность здесь состоит в том, что распределение с 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, сделает трюк. Все зависит от того, что именно вы хотите, чтобы определить лучшую метрику.

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