Стандартное отклонение с ChunkyPNG

Я пытаюсь найти контраст изображения с помощью ChunkyPNG. Есть ли способ получить стандартное отклонение изображения с помощью ChunkyPNG?

1 ответ

Решение

Глядя на код ChunkyPNG, я не смог найти модуль статистики.

Но вы можете использовать следующий метод:

image = ChunkyPNG::Image.from_file('any PNG image file')

# @return [Hash] some statistics based on image pixels
def compute_image_stats(image, &pixel_transformation)
  # compute pixels values
  data  = image.pixels.map {|pixel| yield(pixel)} # apply the pixel convertion

  # compute stats
  n         = data.size # sum of pixels
  mean      = data.inject(:+).to_f / n
  variance  = data.inject(0) {|sum, item| sum += (item - mean)**2} / n
  sd        = Math.sqrt(variance) # standard deviation

  {mean: mean, variance: variance, sd: sd}
end

# compute stats for grayscale image version
compute_image_stats(image) {|pixel| ChunkyPNG::Color.grayscale_teint(pixel)}
# compute stats for blue channel
compute_image_stats(image) {|pixel| ChunkyPNG::Color.b(pixel)}

Я включил в статистику все характеристики, потому что они были рассчитаны для расчета стандартного отклонения (sd).

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