Найти центроид в кластере пикселей

Как рассчитать центр тяжести кластера, образованного пикселями?

Я представляю пиксели по их КРАСНЫМ, СИНИМ и ЗЕЛЕНЫМ значениям (например, pixel(116 133 55)).

Центроид должен быть средним числом экземпляров в кластере, но как я могу вычислить среднее между пикселями?

[Я пытался вычислить среднее значение для каждого цвета (centroid["RED"]=sum_red_pixel_values ​​/ количество пикселей и т. Д.), Но это дает неверные результаты]

Если это поможет, я использую евклидову функцию расстояния.

1 ответ

Решение

sum_red_pixel_values/number of pixels даст вам среднюю интенсивность красного. Если вы хотите центроид, вам нужно найти среднее положение x и y всех пикселей, взвешенных по интенсивности пикселей.

centroid.x = sum(pixel.red * pixel.x) / sum(pixel.red)
centroid.y = sum(pixel.red * pixel.y) / sum(pixel.red)

где сумма по всем пикселям.

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

Другие вопросы по тегам