Измерение контрастности изображения с использованием Python - PullRequest
1 голос
/ 07 мая 2020

У меня есть код для яркости, и я сейчас изучаю измерение контраста

from PIL import Image
from math import sqrt
imag = Image.open("../Images/noise.jpg")

imag = imag.convert ('RGB')
imag.show()

X,Y = 0,0

pixelRGB = imag.getpixel((X,Y))
R,G,B = pixelRGB
brightness = sum([R,G,B])/3 ##0 is dark (black) and 255 is bright (white)
print(brightness)
print(R,G,B)

Конечно, контраст может быть чем-то похожим на этот код, любые идеи будут отличными, спасибо

1 Ответ

1 голос
/ 07 мая 2020

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

Самый простой способ посмотреть статистику изображения - использовать функцию ImageStat PIL:

#!/usr/bin/env python3

from PIL import Image, ImageStat

# Load image
im = Image.open('image.png')

# Calculate statistics
stats = ImageStat.Stat(im)                                                                 

for band,name in enumerate(im.getbands()): 
    print(f'Band: {name}, min/max: {stats.extrema[band]}, stddev: {stats.stddev[band]}')

Итак, если я создаю изображение в оттенках серого, подобное этому, с помощью ImageMagick :

magick -size 1024x768 gradient:"rgb(64,64,64)-rgb(200,200,200)" -depth 8 image.png

и запускаю указанный выше код, я получаю:

Band: L, min/max: (64, 200), stddev: 39.31443755161709

Если я создаю пурпурно-черный градиент:

magick -size 1024x768 gradient:magenta-black -depth 8 image.png

и запускаю код, я получаю:

Band: R, min/max: (0, 255), stddev: 73.68457550034924
Band: G, min/max: (0, 0), stddev: 0.0
Band: B, min/max: (0, 255), stddev: 73.68457550034924

Если минимальное и максимальное значения близки, контраст низкий. Если минимальное и максимальное значения широко разнесены, контраст высокий. Точно так же стандартное отклонение, поскольку оно измеряет, насколько «растекаются» пиксели по гистограмме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...