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



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



Я представляю пиксели по их красным, синим и зеленым значениям (например, pixel(116 133 55)).



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



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



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

687   1  

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)

Где sum-сумма по всем пикселям.

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

Comments

    Ничего не найдено.