Как найти яркость изображения

Гистограмма яркости фотографии — что это такое?

гистограмма яркости фотографии

О, НЕТ! ФОТКА ПЕРЕСВЕЧЕНА! Вот так часто получается, если оценивать яркость фотографии по самой картинке на экране фотоаппарата. Но практика показывает, что есть ситуации, когда это сделать затруднительно.

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

И вот тут на помощь приходит она — ГИСТОГРАММА!

Гистограмма показывает распределение по яркости точек на фотографии (вертикальная ось — количество точек, горизонтальная ось — яркость). Давайте рассмотрим это подробнее и поймём, где нам может помочь гистограмма.

гистограмма фотографии

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

изображение из пикселей

Теперь давайте, для простоты, возьмём абстрактное изображение (квадрат), на котором легко подсчитать, сколько пикселей и какой яркости там присутствует.

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

Например, на нашем абстрактном изображении есть:

  • 6 пикселей нулевой яркости (чёрные точки),
  • 25 пикселей с яркостью 50,
  • 30 пикселей с яркостью 100,
  • 11 пикселей с яркостью 150,
  • 22 пикселя с яркостю 200,
  • 27 пикселей с максимальной яркостью 255 (белые точки).

гистограмма фотографии

Теперь давайте соединим верхушки этих столбиков

гистограмма фотографии

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

гистограмма фотографии

Т.е. теперь мы знаем, что показывает гистограмма этой фотографии:

гистограмма фотографии

Читаем гистограмму и делаем вывод о том, что на фото все яркости пикселей умещаются внутри динамического диапазона (яркость больше нуля и меньше 255) и нет пикселей, которые имеют яркость «ноль» (чёрные точки) и яркость 255 (белые точки).

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

гистограмма фотографии - виды

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

Почему именно такой вывод о потери детализации я делаю, когда вижу левую или правую гистограмму? Это связано с тем, как мы видим изображение и как оно отображается на мониторе (это к вопросу о контрастах) — подробнее об этом читайте в статье КОНТРАСТ КАК ОСНОВА ФОТОГРАФИИ.

гистограмма фотографии модели на светлом фоне

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

Что делать, если гистограмма заваливается на правый или левый край?

гистограмма фотографии модели в чёрном платье

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

А вот левый пик гистограммы ЗАВАЛИВАЕТСЯ на левый край — это означает, что на фотографии есть значительный участок не просто тёмных, а чёрных точек (с потерей деталей). На фотографии эти чёрные точки могут быть или на платье или на волосах модели. В любом случае: модель и платье — это основные элементы фотографии и потеря детализации на модели и на платье недопустимы. Поэтому фотографию нужно переделать, перенастроить фотоаппарат и сделать фото ярче.

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

гистограмма силуэтной фотографии

А вот в силуэтной фотографии мне как раз-таки НУЖНО, чтобы фон был виден, а основной предмет съёмки был в полной темноте (см. пример) — тогда ситуация с заваливанием гистограммы на левый край оправдана — мы сознательно это делаем, уводя яркость главного предмета в темноту, иначе у нас получится обычная фотка, где виден и фон, и сам предмет съёмки.

Обратная ситуация с фотосъёмкой на белом фоне. Если мы хотим получить абсолютно белый фон, то мы намеренно повышаем яркость фотографии до тех пор, пока гистограмма не начнёт заваливаться на правый край.

Общий принцип оценки яркости фотографии такой — определяем, какой пик на гистограмме определяет наш основной предмет съёмки — стремимся к тому, чтобы этот пик был ближе к середине гистограммы — остальные участки гистограммы могут быть завалены на левый или правый край — это, конечно, нежелательно, но это и НЕ является нашим композиционным (или смысловым) центром на снимке.

Удачных Вам фотографий!

Есть фотография, размер 1,24см*0,3 см, разрешение 12800 пикс/дюйм. Фотография — скан мазка крови.
Надо: пройтись по фотографии слева направо с небольшим шагом (т.е. я выделяю и копирую на отдельный слой прямоугольные области) и определить степень яркости каждого слоя. Например, первый фрагмент в 3 раза ярче второго, второй в 2 раза темнее третьего и т.д.
Хотела сделать это с помощью уровней, посмотреть гистограмму для каждого слоя, т.к. в чем именно будет выражаться яркость (в каких единицах) не важно. Но так как фотография очень маленькая, то этот способ никакого результата не дал — гистограмма практически не видна.
Есть ли еще какой-нибудь способ?

the code below will give you the brightness level of an image from 0-10

1- calculate the average brightness of the image after converting the image to HSV format using opencv.

2- find where this value lies in the list of brightness range.

 import numpy as np
 import cv2
 import sys
 from collections import namedtuple

#brange brightness range
#bval brightness value
BLevel = namedtuple("BLevel", ['brange', 'bval'])

#all possible levels
_blevels = [
    BLevel(brange=range(0, 24), bval=0),
    BLevel(brange=range(23, 47), bval=1),
    BLevel(brange=range(46, 70), bval=2),
    BLevel(brange=range(69, 93), bval=3),
    BLevel(brange=range(92, 116), bval=4),
    BLevel(brange=range(115, 140), bval=5),
    BLevel(brange=range(139, 163), bval=6),
    BLevel(brange=range(162, 186), bval=7),
    BLevel(brange=range(185, 209), bval=8),
    BLevel(brange=range(208, 232), bval=9),
    BLevel(brange=range(231, 256), bval=10),
]


def detect_level(h_val):
     h_val = int(h_val)
     for blevel in _blevels:
        if h_val in blevel.brange:
            return blevel.bval
    raise ValueError("Brightness Level Out of Range")


 def get_img_avg_brightness():
     if len(sys.argv) < 2:
        print("USAGE: python3.7 brightness.py <image_path>")
        sys.exit(1)
     img = cv2.imread(sys.argv[1])
     hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
     _, _, v = cv2.split(hsv)

     return int(np.average(v.flatten()))

 if __name__ == '__main__':

     print("the image brightness level is: 
            {0}".format(detect_level(get_img_avg_brightness())))

Яркость и контраст

Достаточно
просто изменяется яркость и контрастность
изображения или выделения при использовании
инструмента. «Яркость-контраст».

Яркостьиконтрастявляются субъективными
характеристиками изображения,
воспринимаемыми человеком.

Яркостьпредставляет собой характеристику,
определяющую то, на сколько сильно цвета
пикселей отличаются от чёрного цвета.
Например, если оцифрованная фотография
сделана в солнечную погоду, то ее яркость
будет значительной. С другой стороны,
если фотография сделана вечером или
ночью, то её яркость будет невелика.

Контрастпредставляет собой
характеристику того, насколько большой
разброс имеют цвета пикселей изображения.
Чем больший разброс имеют значения
цветов пикселей, тем больший контраст
имеет изображение.

Гистограмма изображения

Несколько
следующих команд в меню «Цвет» используют
гистограммуизображения (уровни)
как основной или дополнительный
инструмент.Гистограмма(в фотографии)
— это график распределения полутонов
изображения, в котором по горизонтальной
оси представлена Яркость, а по вертикали
— относительное число пикселов с данным
значением яркости (рис. 3.5.). Гистограмма
изображения позволяет оценить количество
и разнообразие оттенков изображения,
а также общий уровень яркости изображения.

Рис. 3.5. Пример гистограммы

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

Так
гистограмма, приведенная на рис. 3.5.,
отображает количество пикселей
определённого тона для рис. 3.6.

Рис. 3.6. Пример изображения для построения
гистограммы

При
выборе инструмента «Уровни» и задании
параметров, как показано на рис. 3.7.
(бегунки справа слева сдвинуты к
середине), распределяем значение
интенсивностей равномерно по всей
области градаций серого цвета. Этим
самым повышаем контрастность изображения
(рис. 3.8.).

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

Гистограмма
для цветного изображения строится по
яркости, либо по каждому отдельному
каналу для основных цветов цветовой
модели. Например, для RGBмодели гистограмма может быть построена
для трех каналовR,GиBсоответственно.

Рис. 3.7. Изменение гистограммы

Рис. 3.8. Изображение с повышенной
контрастностью

Коррекция цветовых кривых

Вторым
значимым элементом после гистограммы
являются «Кривые», которые позволяют
управлять функцией яркости и контрастности.

Рассмотрим
функцию для управления яркостью и
контрастностью, областью определения
и значений которой являются значения
цветовых компонент в модели RGB. Аргументом
функции является цвет пикселя исходного
изображения. Значение функции представляет
собой цвет пикселя обработанного
изображения. Для изменения яркости/контраста
функция применяется для каждого пикселя
изображения.

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

а) б) в)

Рис. 3.9. Графики яркости

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

При
использовании преобразования контраста
прямая линия меняет свой наклон. При
увеличении контраста изображения (рис.
3.10., а) наклон прямой увеличивается, при
уменьшении контраста – уменьшается
(рис. 3.10., б). При этом сдвиг прямой в
горизонтальном направлении означает,
что помимо контраста изменяется и
яркость изображения.

а) б)

Рис. 3.10. Графики контрастности

Комбинации
наклона и сдвига прямой позволяют
одновременно изменять и яркость, и
контраст изображения. Например, на рис.
3.11. представлен график функции, усиливающей
контраст и увеличивающей яркость
изображения.

Рис. 3.11. Увеличение яркости и контрастности

Преобразование
яркости/контраста может быть применено
и к отдельным компонентам модели RGB,
например к компоненту красного цвета.
Тогда яркость/контраст будут изменяться
только для красного компонента, а для
других компонент они останутся
неизменными. Более того, можно задавать
различные преобразования яркости/контраста
одновременно для каждого компонента
модели RGB.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Определить яркость пикселей в конкретных точках

uniknown

interested
interested
Сообщения: 2
Зарегистрирован: 24 ноя 2016, 09:44
Версия LabVIEW: 2010
Контактная информация:

Определить яркость пикселей в конкретных точках

Здравствуйте!
Подскажите пожалуйста, как можно реализовать идею..
Необходимо определить яркость определенных пикселей изображения
Пиксели располагаются на окружности, которую мы задаем вручную на изображении. Окружность ограничивает исследуемую область рисунка. А точки располагаются на окружности, например, каждые 10 градусов, это наверное прописывается формулой…
т.е. получится 36 точек с найденными координатами, и в этих 36 точках находим яркость пикселей..

sun-1.jpg

Может стоит использовать Vision, там есть функция IMAQ Spoke и аналогичные, но нет вывода координат точек и определения яркости в этих точках

Artem.spb

Activity Автор

professor
professor
Сообщения: 3136
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 32 раза
Поблагодарили: 135 раз
Контактная информация:

Re: Определить яркость пикселей в конкретных точках

Сообщение

Artem.spb » 24 ноя 2016, 11:57

Можно и без vision обойтись (мы же пользуемся лицензионным софтом :))
Яркость проще всего определить в пространстве HSV, V=value оно же яркость, уже готовый ответ.
Если брать обычный picture, то там цвета представлены в пространстве RGB, дальше несложной математикой (или инструментами vision) находите нужные точки и переводите один цвет в другой.
Если пользоваться vision, то там есть готовый инструмент преобразования цветов RGB-HSV, если руками, то формулы пересчёта можно найти тут
Не исключено, что можно, погуглив, найти готовые решения, но я их не проверял

Аватара пользователя

IvanLis

guru
guru
Сообщения: 5406
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 25 раз
Поблагодарили: 75 раз

Re: Определить яркость пикселей в конкретных точках

Сообщение

IvanLis » 24 ноя 2016, 20:24

Artem.spb писал(а):интересная идея использовать в качестве яркости масимум компонентов ргб. не думал, что яркость так банально определяется :)

На сколько я помню, при преобразовании RGB->HSV, нужно масштабировать в диапазон [0;1].
Т.е. прогнать все составляющие, и только потом выполнить сдвиг, домножить на коэф. пропорциональности.
Но на практике часто за минимум принимают 0, а за максимум 255.
Но я могу ошибаться, так что за истину не ручаюсь.

uniknown

interested
interested
Сообщения: 2
Зарегистрирован: 24 ноя 2016, 09:44
Версия LabVIEW: 2010
Контактная информация:

Re: Определить яркость пикселей в конкретных точках

Сообщение

uniknown » 25 ноя 2016, 08:47

zxc_pavel писал(а):С vision, наверное, так можно сделать
Только когда регион выбираете, зажимайте SHIFT, чтобы окружность получилась :)
ну и на кнопку потом

Большое спасибо Вам! А чтобы покрыть большее количество точек — можно ли в области исследуемой части изображения обозначать вручную несколько окружностей и, быть может, задавать им определенные радиусы? Т.е., например, получится 36 точек окружности радиусом R1, затем еще 36 точек радиусом R2,… ….. и 36 точек радиусом R5?

Поэкспериментировала, но получается задавать только продублировав область выделения..

Еще разобралась с выводом получаемых данных в эксель, удобно :)

Аватара пользователя

IvanLis

guru
guru
Сообщения: 5406
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 25 раз
Поблагодарили: 75 раз

Re: Определить яркость пикселей в конкретных точках

Сообщение

IvanLis » 25 ноя 2016, 18:37

uniknown писал(а):Большое спасибо Вам! А чтобы покрыть большее количество точек — можно ли в области исследуемой части изображения обозначать вручную несколько окружностей и, быть может, задавать им определенные радиусы? Т.е., например, получится 36 точек окружности радиусом R1, затем еще 36 точек радиусом R2,… ….. и 36 точек радиусом R5?

Поэкспериментировала, но получается задавать только продублировав область выделения..

Еще разобралась с выводом получаемых данных в эксель, удобно :)

00.png

  • 15 Ответы
    1951 Просмотры
    Последнее сообщение taras_33

    29 ноя 2022, 20:23

  • 2 Ответы
    573 Просмотры
    Последнее сообщение dadreamer

    07 июн 2022, 21:51

  • 1 Ответы
    506 Просмотры
    Последнее сообщение Artem.spb

    15 июн 2022, 20:22

  • 1 Ответы
    396 Просмотры
    Последнее сообщение IvanLis

    07 ноя 2022, 21:05

  • 5 Ответы
    536 Просмотры
    Последнее сообщение dadreamer

    24 мар 2023, 18:26

Понравилась статья? Поделить с друзьями:
  • Как найти функции проводимости переключательных схем
  • Как найти естественный прирост населения в процентах
  • Как составить карту лото
  • Как найти работающий порт
  • Как найти человека по карелии