Найти центроид в кластере пикселей
Как рассчитать центр тяжести кластера, образованного пикселями?
Я представляю пиксели по их КРАСНЫМ, СИНИМ и ЗЕЛЕНЫМ значениям (например, 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)
где сумма по всем пикселям.
Вы можете рассчитать это отдельно для красного, зеленого и синего, а затем для среднего, но если вы просто хотите получить среднее значение, было бы более эффективно усреднить (возможно, средневзвешенное значение, если вы хотите яркость) сначала красный, зеленый и синий каналы для каждого пикселя, а затем вычислить центроид на основе этого.