roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 09:22

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 08 май 2010, 13:55 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2009, 10:44
Сообщения: 353
Откуда: Омск
Skype: artymen1
ФИО: Артем Константинович
Ищу алгоритм, реализующий фотошоповский "Auto Levels" (или gimp'овский "Увеличить контраст"). Я не нашел конечную реализацию, но выяснил, как приблизительно он работает. Задача алгоритма - увеличить контраст изображения со слабой динамикой.
Изображение рассматривается как монохроматичное (если с цветом работать, то получится Auto Colors, но мне нужно сохранить цвета), составляется гистограмма уровней, на горизонтальной оси которой значение яркости от 0 до 255, а по вертикали количество пикселей с соответствующей яркостью. Чем контрастнее изображение, тем равномернее и ровнее она будет распределена от начала до конца, у неконтрастного изображения она соберется в кучу примерно посередине, а начало и конец всей оси будут пусты. Автоматически назначается самая черная точка (как бы(!) мин. значение), самая белая точка (как бы(!) макс. значение) и, опционально, серая точка (где-то посреди), и гистограмма растягивается так, чтобы мин. точка оказалась в 0, макс. точка в 255, а средняя посередине (опционально).
Исходная (серая) и скорректированная (черная) гистограммы:
Вложение:
sshot-1.jpg
sshot-1.jpg [ 22.28 КиБ | Просмотров: 4034 ]

Собственно, неясно:
1. Как автоматически выбрать точки ? Фотошоп и gimp делают это по-разному, соответственно, и результаты разные. Меня больше результат у gimp устраивает. Я пробовал в исходниках рыться, но бестолку, там все запрятано в сложной струткре объектно-ориентированного кода.
2. Как по растянутой гистограмме пересчитать пиксели ? Предполагаю, что для каждого уровня запоминаются пиксели, а потом им присваиваются новые значения. Тут еще интересный момент есть. Я работаю с моделью HSV и меня интересует значение S (насыщенность). В результате обработки фотошопом/гимпом оно тоже изменяется (собственно, это мне и нужно), на темных и ярких участках она уменьшается. Значит, "масштабируется" не тупо одно значение V (яркость) у пикселя, а как то по-другому. Полагаю, что каждая составляющая RGB масштибируется, это очень похоже, исходя из того как насыщенность расчитывается из RGB (см. RGB —> HSV).
3. Сколько потребуется памяти ? Я примерно понял из исходников GEGL, что там тупо в один проход пиксели "масштабируются", ничего не запоминается, не сравнивается и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 08 май 2010, 14:07 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Вроде всё делается в 2 прохода - первым считаем гистограмму и выбираем по ней линейное преобразование, вторым производим это преобразование. Памяти соотв. надо только под гистограмму.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 08 май 2010, 14:34 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2009, 10:44
Сообщения: 353
Откуда: Омск
Skype: artymen1
ФИО: Артем Константинович
С памятью успокоили :) А как это преобразование делать, меня как раз и интересует. Возможно, вам это кажется очевидным, но для меня это самое темное пятно во всем алгоритме :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 09 май 2010, 14:40 
Не в сети

Зарегистрирован: 09 май 2010, 14:33
Сообщения: 7
в книжке по ЦОС (http://freebooks.net.ua/3755-cifrovaja- ... enijj.html)
см. главы 2.2.6 и 10.2.3
изменение динамического диапазона гистограммы Q делается нелинейным гамма-преобразованием в форме

Q` = Q^g * (255 / 255^g)

множители выбираются так, чтобы диапазон [0,255] отображался сам в себя.

в той же книге описывается метод коррекции неоднородного освещения (10.3.2)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 11 май 2010, 22:19 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2009, 10:44
Сообщения: 353
Откуда: Омск
Skype: artymen1
ФИО: Артем Константинович
спасибо. книжка классная, только подход там такой глубокий и основательный, что при всем желании некогда читать. время стремительно идет. я вроде как понял, как преобразование делать, буду пробовать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 13 май 2010, 14:52 
Не в сети

Зарегистрирован: 09 май 2010, 14:33
Сообщения: 7
сграбил экран с маткада, оказывается, я уже это делал :-)


Вложения:
Capture1.jpg
Capture1.jpg [ 55.72 КиБ | Просмотров: 4267 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 13 май 2010, 19:15 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
а я всегда говорил что маткад сила )

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 13 май 2010, 21:14 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Там много полезных алгоритмов есть...

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 13 май 2010, 21:24 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2009, 10:44
Сообщения: 353
Откуда: Омск
Skype: artymen1
ФИО: Артем Константинович
аа, так это и есть гамма-коррекция... теперь я понял, почему гамма :) по сути, результата можно добиться такого же (но только если редактировать кривую), но это совершенно другой механизм, я уж молчу про то, что словом auto тут и не пахло... :)
P.S. я щас Qt осваиваю, скоро уже подойду к задаче вплотную :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 14 май 2010, 00:23 
Не в сети

Зарегистрирован: 09 май 2010, 14:33
Сообщения: 7
Duhas писал(а):
а я всегда говорил что маткад сила )

согласен))

artymen писал(а):
аа, так это и есть гамма-коррекция... теперь я понял, почему гамма :) по сути, результата можно добиться такого же (но только если редактировать кривую), но это совершенно другой механизм, я уж молчу про то, что словом auto тут и не пахло... :)
P.S. я щас Qt осваиваю, скоро уже подойду к задаче вплотную :)

с auto тоже всё просто, придумываете как выбирать уровень яркости X, уровень яркости Y, чтобы при преобразовании X перешёл в Y. Тут можно покумекать.

Предлагаю такой вариант (отцентровка гистограммы): X = СУММА(Qi * i)/СУММА(Qi) центр масс. Y = 128 центр.
Гамма g = (ln Y - ln 255)/(ln X - ln 255)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 14 май 2010, 09:05 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2009, 10:44
Сообщения: 353
Откуда: Омск
Skype: artymen1
ФИО: Артем Константинович
Во-первых, это все равно гамма-коррекция, теперь уже авто. Во-вторых, кто сказал, что мне необходима такая коррекция ? Камера работает в режиме автоэкспозиции, она собственно сама и подстраивает изображение, стремясь к определенному значению средней яркости, и сколько я видел гистограмм полученных изображений, у них всегда график находится примерно в центре. И я обозначил задачу с самого начала: необходимо повысить КОНТРАСТНОСТЬ. Другими словами, растянуть гистограмму. То, что вы предлагаете, это коррекции из области фотографии, где целью стоит улучшение изображения для ЧЕЛОВЕЧЕСКОГО восприятия. У меня совершенно иные цели.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 14 май 2010, 09:15 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
что-то мне говорит, что если человеческий глаз плохо видит что-то на изображении, то уж комп то точно не увидит...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 14 май 2010, 11:54 
Не в сети

Зарегистрирован: 20 ноя 2008, 19:31
Сообщения: 431
Откуда: Чернобыль
прог. языки: асмемблер
ФИО: Валентин Семенович
а если человек видит картинку которую ему комп показывает.. то точно голяк :)

Если есть терпение, то можно покопаться в исходниках Elphel камер и посмотреть как там сделана автоэкспозиция. Работает по гистограмме.
А если хочешь глубже копнуть, то учти что гамма-коррекцию можно считать частным случаем tone-mapping (который есть сердце HDR рендеренга)
Почитай. Там с десяток интересных алгоритмов. И софт гнусный есть http://en.wikipedia.org/wiki/Tone_mapping

_________________
За здравый смысл у нас принимается мнение большинства.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 14 май 2010, 14:29 
Не в сети

Зарегистрирован: 09 май 2010, 14:33
Сообщения: 7
artymen писал(а):
Другими словами, растянуть гистограмму.

а... похожую задачу и решал... отсечь слабые границы у гистограммы.
пороговый метод работал сносно. S1 - сумма значений гистограммы в точках <= x, S2 -сумма в точках > x.
При поиске границ x инкрементируется в цикле, а операция подсчёта сумм на очередном шаге - это просто сложение и вычитание G[x]. Когда отношение S1/S2 превысит порог - там левая точка. Таким же макаром ищем правую.
Вам надо растянуть яркость изображения линейно?
типа вот так: Если x1<Y<x2, То Y`= (Y - x1)*256/(x2-x1)

Добавлено спустя 46 минут 28 секунд:
Duhas писал(а):
что-то мне говорит, что если человеческий глаз плохо видит что-то на изображении, то уж комп то точно не увидит...

можно не увидеть, но среагировать )) т.е. зависит какую задачу решаем )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Авто-коррекция уровней изображения (Auto Levels)
СообщениеДобавлено: 14 май 2010, 17:44 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2009, 10:44
Сообщения: 353
Откуда: Омск
Skype: artymen1
ФИО: Артем Константинович
Спасибо, попробую !
Насчет автоматического определения границ. Это самое главное в моем алгоритме, оно и определяет задачу, которую я решаю. Дело в том, что я распознаю цвет и критерием фильтрации "плохих" пикселей я выбрал насыщенность, ведь чем она больше, тем больше можно доверять этому пикселю. Нужно либо установить фиксированный порог насыщенности, к которому и приводить растягивание гистограммы, либо наоборот, растянуть гистограмму, определив границы способом порога S1/S2, и из полученной гистограммы определить порог насыщенности.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO