Pull to refresh

Comments 60

Никогда бы не подумал, что можно вот так просто автоматизированно раскрашивать.
В универе был какой то предмет, на котором была чертовски сложная задача. Так вот если решать ее по правлам, то там надо сидеть ого-го. А если в начале убрать из уравнения Х и Y, раскрыть скобки и сложить все что получится с обеих сторон от "=" то получалось математически неверная запись 3=5. Но почему то верное решение всегда отличалось от нее исключительно знаком дроби "/" т.е 3/5 есть ответ задачи без километров исписанной бумаги)… тока тссс)))



Здесь продемонстрирован режим наложения color+blur. считай одно и тоже когда кистями красят в color по десатурированным.
Силу режима наложения color (если это он, не видно) никто не отменял, но для картинки с деревьями это процесс достаточно сильно растянется)
Чем-то мне это напомнило цветовую экспликацию.
Мы делали это для анимационных сцен с художником-постановщиком, решая какие цвета или палитра будет использована для сцен. Чаще всего это были горизонтальные градиенты.

Можно поподробней про это? Беглый поиск дает только какие-то режиссерские/художественные экспликации на уровне «хочу чтобы здесь было синеньким», или это оно и есть?
По сути это референсы, с заданными праматрами цветов. Они могут быть детальными или могут быть общими.
Спасибо за статью, привлекательную своей краткостью.
Хотя из-за этого пришлось немного напрячь голову, чтобы ее понять.
Было бы проще это сделать, если бы в пункте 2 было сказано, что мат ожидание и дисперсия берется от значения канала l. И что делается предположение о прямой зависимости цвета от яркости. Если я правильно все понял :)

И немного бессмысленный вопрос: почему у вас l принимает 128 значений, а не, вроде привычные, 256?
Про канал добавил, спасибо. Цвет зависит от статистики окрестности точки, т. е. средней яркости и ее дисперсии, если вы это имеете ввиду, то да, правильно поняли :)
128 значений — поверил экспериментам Viera'ы (2 источник), там сравниваются разные размеры сигнатуры — от 32 до 512, 128 выбрано как оптимальное.
Круто!
На фотографии с деревьями видны косяки с подмешиванием голубого цвета. Если пользователь сможет указывать область на изображении доноре и область на исходном изображении, то раскрашивание займет больше времени, но будет сделано без таких ошибок.
подобный метод с указанием областей рассмотрен у Welsh'a (1-ый источник), указываются области схожих цветов, там они называются «swatches», передо мной же стоит цель полностью автоматизированного окрашивания, чтобы можно было применять к видео ряду.
Про окрашивание изображений и не только Colorization Using Optimization. Довольно интересные результаты. Исходники для матлаба есть.
спасибо, интересно, AKVIS Coloriage и некоторые другие реализуют подобный подход.
Холи Щит! Какой там алгоритм))) Маску нанесли — залили цветом в color. Причем «залить» приоритетнее чем «а нафига»).
Для таких плагинов проще самому в шопе по любому уроку.



А та что симпотичнее, немног посидеть нуно)
да да да) про трюк с десатурацией писал ниже) Но там онии не настаивают то на реставрации.
Можете пожалуйста прояснить две вещи?
1. Что есть сигнатура? Имею я например гистограмму яркости по L из Lab. Это 100 чисел отражающих количественное присутствие каждого значения L на изображении. Откуда берутся сигнатуры из 128 чисел?
2. В уравнении не очень понятно вычисление суммы по j. Что за сумма? От какого числа начинается суммирование?
image
1. Возможно, есть некоторая путаница, поясню. Преобразуем изображение в lab, берем канал l, получаем своего рода черно-белое изображение, каждый его пиксель принимает значение от 0 до 255, соответственно 256 значений, ну и первый элемент сигнатуры =количество пикселей с яркостью 0 и 1, второй — 2 и 3 и т. д., возможно, я неправильно выразился, но имелось ввиду именно это.
2. Вторая часть это среднее арифметическое значение сигнатуры, j естественно от 0 до N=128, то есть сумма всех элементов сигнатуры, потом делится на число элементов. Если вы о том, что не написано «j=0» внизу, то извините, я думал, что это подразумевается само собой.
1. Но L от 0 до 100, как можно построить черно-белое изображение увеличивая яркость? Разве в этом есть смысл? Или я чего-то недопонимаю?
2. А разве сумма не равна 1 из-за нормализации?
1. Преобразование изображения и построения сигнатуры велось средствами OpenCV (в практической реализации) там значения канала l изменяются от 0 до 255, почему, каюсь, не знаю, не заострял внимания, попробую разобраться.
2. Большое спасибо за вскрытую ошибку! Она образовалась из-за последовательности «вычисление корреляции -> понятие необходимости нормализации -> добавление нормализации», пересмотрю формулу, возможно, вместо H' можно использовать просто H.
2. Раз уж это корреляция, то скорее всего (если это конечно линейная корреляция) должна использоваться эта формула со средним.
image
Можете еще прокомментировать саму операцию нанесения цвета?

2. Рассматриваем окрестность это пикселя в размере 25х25, вычисляем математическое ожидание и дисперсию (работаем с каналом l).

Т.е. мы выбираем рандомный пиксель в текущей ячейке сетки, создаем вокруг него абстрактную сетку большего размера и вычисляем Lm+-sigm?

После первых двух шагов мы получаем с цветного изображения 225 образцов цвета, каждый из которых характеризуется следующим: двумя значениями каналов a и b; мат. ожиданием и дисперсией.

Откуда 225 образцов?

3. Попиксельно обходим наше черно-белое изображение, вычисляем дисперсию и мат. ожидание, сравниваем с образцами, с наиболее подходящего образца переносим значения цветовых каналов a и b.

А тут тоже создаем сетку 25х25?
Dсе цветное изображение делится на 15х15 одинаковых участков (всего 225), в каждом этом участке берется один случайный пиксель, и в его окрестности вычисляется мо и дисперсия, всего 225 пикселей.
в третьем шаге для каждого, уже без всяких сеток, пикселя вычисляется мо и дисперсия в окрестности 25х25, в картинках это выглядит так, 15х15:

25x25:

Теперь ясно, не участок равен 15 на 15 пикселей, а всего участков 225. Спасибо!
По поводу L от 0 до 100, то, что L — целые числа от 0 до 100, это условность какого-то конкретного применения модели (в фотошопе, например, так), в теории же L должна быть непрерывна (на это натолкнула мысль, что L иногда измеряют от 0 до 1, да еще lab и аппаратно-независимая модель), поэтому нам ничто не мешает сделать 100, 256 или любое другое значение. 256 связано с привычными восемью битами на канал. И еще один контраргумент, если это 100 чисел, тогда a и b от -128 до 127, итого 100х256х256 цветов, что в 2,5 раза меньше RGB представления 256х256х256, а по теории любой цвет, представленный в RGB можно получить в lab без потерь
Вырвиглазно однако, меня аж передёрнуло.
Давно я этим баловался, вот даже уроки вспомнил, что делал
www.render.ru/books/show_book.php?book_id=394
сейчас фигней конечно смотрится и деда уже нету.

Так как я этим занимался прилично и вот что я вам скажу, вы читер) Дело в том, что расскрашивать обесцвеченные фотографии, десатурированные, и настоящие чб фотографии — две большие разницы.

Контрастная составляющая старой фотографии просто не подходит для смешивания с цветом очень часто вообще никак. Как выход — изменить контраст фотографии, подложки для цвета, но и это не дает результатов приемлимых, потому что каждый участок фотографии все равно должен подгонятся индивидуально. Десатурированные расскрашиваются кистью в режиме «color» на ура.

Все ВАУ фотографии именно предварительно десатурированы)
Столкнулся с этой проблемой на этапе практической реализации, поэтому гистограммы яркостей «растягиваются» на время этапов вычисления сигнатуры и вычисления/сравнения мат. ожиданий и дисперсий.
P.S. вон те деревца, кстати, если и были обесцвечены, то не мной, и да, я еще танки и старых фильмов пытался красить, результаты не товарного вида конечно, но не такие уж и плохие :)
Вы несомненнно башка. Я о таком ток мечтать могу. Теперь вы навеке мой друг, потому что я раньше так упорно изучал это через редактор и для меня было это мини откровением, что я описал выше) Мне совершенно не хватало общения с близким по духу человеку.
Что из своих мыслей я тогда в 2006 хотел кому то изложить, и вот изложил, прошло 7 лет и кому то пригодилось) Последняя теория в расскраске чб изображений я считаю еще не написана. Я, тогда еще, мудак студент, а теперь трижды мудачина предлагал начать с анализа десатурированных фотографий близких по освещению и похожих содержанием с ч.б фотографиями с пленки. Так как раскрасить десатурированное не проблема, остается понять как превести к похожему виду реальную ч.б фотографию.
Другой тест провести наоборот, каким образом меняются цвета фотографии, если подложку для цвета привести к похожему ч.б виду фотографии.

Конечно же, мы всегда упираеся в информацию. Фотография — ее носитель. Главное резкость и динамический диапазон. А он там ох как капец мал бывает. Каждая фотография так уникальна… расскраска все равно неведома без масок… И вижу я ее так(речь идет скорее об объекте человек в городе):

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

2) Так как без масок расскраска неведома, со временем можно набрать словарь:
а) из за освещения (солнце, пасмурно) зависит контраст подложки
б) из за контраста подложки мы дожны выбрать цвет для окраски. Красный в тени и красный на солнце не есть красный)
в) градиенты и рефлексы хрен передать! Там такой ад я не понимаю даже как это тольком поторить))
3) Набрав словарь подобный словарь для масок… можно попытаться сделать профили для расскраски ихображения. Небо дожно стать значительно темнее для нанесения на себя голубого цвета. и тому подобное))Вобщем болтать непереболтать и все идет от исходника. Я порой сразу скажу по первому взгляду. будет ли толк или нет)
По поводу реальных чб фото и их контрастности, на данном этапе это пока остается человеку, то бишь предварительная обработка, мы ж только красим, не меняя исходную яркость.
А идею со словарем я посмотрю, интересно, спасибо :)
Сформулируйте пожалуйста чем отличается «десатурированная» фотография от «настоящей чб»?
Термин «контрастная составляющая» — мне не ясен.
Десатурированные фотографии изначально получены цветными и обесцвечены. В этом случае цвет в режиме color накладывается на это изображение очень хорошо, я не знаю как это обяснить точно технологически, но с фотографии убирается цвет как раз с теми характеристиками, которые очень близки при обраном расскрашивании в режиме color.

В пленочных фотографиях понятия о цвете и о 3-х фильтрах вообще нет. Там другие законы и RGB смешивается как химия хочет. Потому цвет в режиме color визуально не ложиться вообще и смотрится очень инородно. Нужно менять подложку для этого.
Помилуйте! Законы физики везде одни и те же. И плёночная фотография тут не исключение. И фильтры там есть. Цветные. Только для съёмки. А сенсибилизированы они (для проявки в стоке) как и положено — в основе своей для зелёного, ну или как там гласит формула адекватного универсального перевода в чб — R30 G60 B10.
Яркостный контраст цвету не помеха. А вот аномальное распределение плотностей по участкам как раз и будет свидетельствовать о применении фильтров при съёмке (особо специфичные вещи оставим в стороне).
Законы физики все в порядке.) Из практического опыта говорю, что для расскрашивания это две абсолютно разные фотографии. Разница в том, что на чб пленке результут совсем другой, нежели с цифровика обесцветить фотографию. Да, с цифровика можно привети фотографию по контрасту и яркости оттенков подобному на пленке, но для этого нужно иметь пленочный вариант для подгонки одного к другому и все равно точного результата не будет. Я говорю не про современные чб пленки.
По логике проблемы возникают за счет того, что для получения сигнатуры мы донора десатурируем, а исходник у нас обесцвечивается по другому алгоритму.
Как мне видится решение проблемы — нужно вычислить или подобрать функции преобразования разных RGB разными пленками. Далее при генерации сигнатуры делать преобразование донора по этой формуле, а не тупо LАВ использовать.

Совсем в идеале это было бы вычислить для основных пленок (по идее они будут более менее однотипными) некие характерные для них «цветовые модели» где как-бы пленка делает десатурацию оставляя только одну составляющую, отбросив две.

Может немного сумбурно написал, но думаю общая мысль ясна.
Я не понял — а при чём здесь вообще «сигнатуры»? Как по похожей гистограмме можно сделать вывод о некоей эквивалентности цветовой информации???
Если не делать семантический анализ изображения, то яркость это единственное, на основе чего мы можем сделать вывод о возможной цветовой информации. Конечно, способ не идеальный и я сейчас думаю над его улучшением, но результаты показывает неплохие, траву от воды отличает :)
Можете прокомментировать перенос цвета на черно-белое изображение?

2. Рассматриваем окрестность это пикселя в размере 25х25, вычисляем математическое ожидание и дисперсию (работаем с каналом l).

Т.е. бы берем рандомный пиксель в ячейке сетки, создаем вокруг него абстрактный квадрат и в нем вычисляем грубо говоря среднее и дисперсию для канала L?

После первых двух шагов мы получаем с цветного изображения 225 образцов цвета, каждый из которых характеризуется следующим: двумя значениями каналов a и b; мат. ожиданием и дисперсией.

Откуда 225 образцов?

3. Попиксельно обходим наше черно-белое изображение, вычисляем дисперсию и мат. ожидание, сравниваем с образцами, с наиболее подходящего образца переносим значения цветовых каналов a и b.

Тут тоже создаем ячейку 25х25?
Забавно, что изначально писал комментарий сюда, но после отправки он исчез и я написал его заново, а оказалось, что он попал в ветку сверху. Странно.
По теме Окрашивания фотографий буквально недавно закончил писать девушке диплома.
Но окрашивание было довольно специфичное, а если быть точным есть спутниковый снимок большой но черно-белый, и есть цветной снимок того же района но намного меньшего разрешения, программный модуль для матлаба позволяет выбирать две этих картинки и получать на выходе картинку с разрешением большого файла и цветами маленького
image
а. — Исходное цветное (многоканальное)
б. — Исходное монохромное
в. — Результат вейвет-преобразования

Если кому интересно могу отдельно расписать всю технологию реализации и примеры кода.
(Программа не разрабатывалась полностью с нуля а был взят код от штатовского дипломного проекта)
Сам принцип был бы очень интересен, хотя бы ссылки, заранее спасибо
Если в двух словах то используется дискретное вейвлет преобразование, лучший результат даёт метод DMeyer
Как быстрый источник информации по данной технологии можно почитать тут
А тупо раздуть меньший файл до размера большего и цветовые каналы из него кинуть на бОльший — не судьба?
Если я правильно понял, изображения не обязаны совпадать один-в-один, может быть просто похожий снимок, иначе это действительно слишком простая задача)
Как раз изображения должны быть четко одного участка, задача не такая простая как кажется на первый взгляд
В таблице показаны разные метрические данные по различным методом слияния одного и того же изображения, жирным выделены «лучшие»

image

На выходных постараюсь написать пост на эту тему, все готово надо только оформить и все станет ясно.
Судьба, и такой способ пробовал, но тут уже вопрос в качестве итогового изображения и скорости выполнения.
Качество оставляет желать лучшего при таком слиянии, причем на несколько порядков, скорость преобразования раздуть и слить занимает порой до 5 секунд, а вейвлет делает то же за 0,25 секунды. Причем это с изображениями 400х400 а если взять хотя бы пару мега пикселей? Как надолго система сляжет под таким грузом?
хм, у меня для изображения 1024х768 весь представленный процесс занимает 2-3 секунды, он включает в себя «раздувание», попиксельный обход черно-белого с вычислением мо и дисперсии каждого пикселя и установки значения двух цветовых каналов каждого пикселя + работа метода SURF, КА и отдельного окрашивания объектов, просто же «раздуть и слить с готовыми цветовыми каналами» займет доли секунды.
Все зависит от способа реализации, компьютера и т.д.
Предлагаю продолжить общение после того как сделаю полную выкладку по теме.
Дарю идею — вкуриваете в какое-нибудь API для онлайн-поиска изображений дубликатов (Google, Tineye и т.п.), берёте оттуда метод идентификации изображения (сдаётся мне что там скорее всего юзается «первичный скетч»), метод этот надо сконфигурировать для бОльших допусков, и подключаете к своему сервису (работать уж будет только онлайн). Загружаете чб -> API рыщет по своей базе и выдаёт похожие сюжеты -> отбираем цветное, наиболее соответствующее -> ну и дальше уже переносите цвет.
А отбирать по гистограмме — это зло! И не на «рафинированных» примерах постоянно будет фэйк выдавать.
Про окрашивание. Берёте цветной образец, определяете равномерно окрашеные области, через Average снимаете цвет и переносите на чб. Как определить область однотонного окрашивания в чб? Курите «краевой контраст» (уж не знаю что там больше подойдёт — пространственные или вещественные)…
Но в общем не стоит овчинка выделка… Задача не имеет решения. Даже «раскрашенные» ч/б фильмы смотрятся убого (с однотонными масками телесного цвета вместо лиц и 16-цветной палитрой), а красят их вручную и это очень затратный процесс. А уж о какой-то «умной автоматизации», чтобы потом можно было ещё и без слёз на результат смотреть — и говорить не приходится.

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

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

Только думаю стоит добавить еще параметров для оценивания окрестности точки. Как минимум — частотные характеристики можно брать, думаю качество результата резко возрастет.
Ну и если это как приложение планируется выпустить — было бы здорово добавить автоматизацию поиска похожего изображения, например через гугл.

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

Этот метод часто используют фотографы для ретуши мелких деталей отдельно от крупных.
В вашем случае — оценивая кол-во деталей на каждом слое (например как интеграл модуля производной по площади окрестности) — можно в виде нескольких цифр получить информацию о фактуре поверхности.

А потом, чтобы не придумывать велосипеды — можно натравить на полученный массив NOMAD. Обучать его можно на десатурированном примере похожего изображения…
Sign up to leave a comment.

Articles

Change theme settings