Выравнивание (или растяжение) гистограммы изображения RGB в Python

Я автоматически создаю изображения в формате JPG из мультиспектральных данных. Созданное изображение очень темное. Поэтому я подумал, что было бы лучше изменить яркость (например, Image.Enhance в PIL). Но возникла проблема, потому что одним снимкам нужно больше яркости, чем другим.

Исходное изображение, выравнивание гистограммы трех каналов (PIL) и что-то подобное, что мне нужно в IrfanView (автоматическая настройка цветов)

Следующей идеей было попробовать линейное растяжение гистограммы. Итак, я создал скрипт, который перебирает кортежи RGB и вычисляет новую интенсивность для пикселей. Разница была очень маленькая. Вероятно, потому что диапазон значений всегда был 0-255. Затем я попробовал выравнивание гистограммы (ImageOps) для R, G и B, но результат был плохим, см. Среднюю часть изображения. В Интернете я обнаружил, что это не лучший подход, потому что цвета могут резко меняться. Наверное, это мой случай.

Лучшая идея выглядит как преобразовать массив RGB в HSL, а затем изменить яркость, но я не могу использовать константу для максимальной яркости, потому что изображения разные и для них нужны разные константы. Должен ли я использовать выравнивание гистограммы на яркости или как лучше всего растянуть или, возможно, улучшить выравнивание гистограммы моего изображения?

Я ищу что-то вроде изображения / автоматической настройки цветов в IrfanView или в каком-то ПО используется имя Linear Normalization ...

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

Спасибо за любой ответ, буду очень рад.


ИЗМЕНИТЬ

Изображение слева для загрузки

Следующие изображения я могу загрузить позже, сегодня.


person Bulva    schedule 29.01.2016    source источник
comment
Привет, @Bulva, у тебя есть образец изображения, чтобы провести тесты?   -  person Eliezer Bernart    schedule 29.01.2016
comment
Да, у меня около 10 картинок. Так что, если у вас есть идеи, я могу проверить это на них   -  person Bulva    schedule 29.01.2016
comment
@Bulva Возможно, он хочет, чтобы вы поделились некоторыми из этих изображений, чтобы провести эксперименты   -  person MBo    schedule 02.02.2016
comment
Простите за ошибку. Я загружу несколько фотографий сегодня   -  person Bulva    schedule 02.02.2016
comment
Я добавил левое изображение из превью в свой пост. Следующие изображения я могу загрузить позже, если будет необходимо. Спасибо за помощь   -  person Bulva    schedule 02.02.2016


Ответы (2)


Я бы предложил использовать тот же подход, о котором вы заявили, с небольшими изменениями.

  • Преобразуйте изображение RGB в изображение LAB.
  • Примените локализованное выравнивание гистограммы к L-каналу.
  • Объедините его обратно с другими каналами.
  • Преобразуйте его обратно в изображение RGB.

Вы можете проверить мой ответ по этому поводу в другом вопросе здесь :

Код, который у меня есть, написан для OpenCV с использованием python. При желании вы можете изменить его для языка C.

Сообщите мне, помогло ли это вам !!

person Jeru Luke    schedule 14.12.2016

Я не уверен, применимо ли это, и сам не применял это, но я читал эту статью о подводном растяжении контраста: http://www.iaeng.org/IJCS/issues_v34/issue_2/IJCS_34_2_12.pdf

То, что он предлагает, может помочь

"In order to address the issues discussed above, we propose
an approach based on slide stretching. Firstly, we use contrast
stretching of RGB algorithm to equalize the colour contrast in
the images. Secondly, we apply the saturation and intensity
stretching of HSI to increase the true colour and solve the
problem of lighting"
person Krestone    schedule 14.11.2016