Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Апрель 08, 2015, 08:13



Название: IBL
Отправлено: Igors от Апрель 08, 2015, 08:13
Добрый день

Есть картинка, сферическая карта (поэтому так странно и выглядит). Картинка непростая - пиксели могут иметь любые значения (а не только 0..255). Напр на втором аттаче яркость в 10 раз меньше, но не все стало темно.

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

Спасибо



Название: Re: IBL
Отправлено: Racheengel от Май 05, 2015, 01:38
фильтр по интенсивности, бинаризация, затем поиск блобов?


Название: Re: IBL
Отправлено: Igors от Май 05, 2015, 08:20
фильтр по интенсивности, бинаризация, затем поиск блобов?
В общем, "все что нам известно - то и применим" :) В результате лампочки стоят в самых ярких местах картинки - а это совсем не то что нужно.

Наверное Вы видели рекламу всяких машинок по телеку. Часто 3D объект - лишь сама машинка, а все остальное - background, т.е. просто картинка (пусть большая и красивая). И тут вылазит проблема - машинка по освещенности должна сбиваться с картинкой - иначе машинка будет выглядеть как "инородное тело". Один из способов решения - расставить в сцене источники света, но их нужно слишком много чтобы сделать это руками.

Применительно к картинкам выше. Допустим есть стул (или шкаф) 3D объект, помещенный в эту картинку. Просто растыкав лампочки "где ярче" (а это светильник на потолке и окна) мы получим объект ярко освещенный с одной стороны, но никак не освещенный с других. Конечно это его сразу выдаст


Название: Re: IBL
Отправлено: Racheengel от Май 06, 2015, 00:56
Так а исходная сцена 2д или 3д? лампочки надо в 3д вставить и потом уже 2д картинку сгенерировать?
Или исходная картинка 2д без освещения и ее надо так подсветить, чтоб совмещалось с 3д объектом?


Название: Re: IBL
Отправлено: Igors от Май 06, 2015, 08:48
Так а исходная сцена 2д или 3д? лампочки надо в 3д вставить и потом уже 2д картинку сгенерировать?
Картинка - cферическая карта, ну или "карта окружения". Вы видели как текстура натягивается на сферу. Здесь то же самое, только камера всегда находится в центре сферы. Вращая камеру мы увидим ту или иную часть комнаты. Исходная картинка намеренно искажена чтобы компенсировать искажения сферы.

Или исходная картинка 2д без освещения и ее надо так подсветить, чтоб совмещалось с 3д объектом?
Наоборот, объекты надо подсветить так чтобы они совмещались с (неизменной) картинкой


Название: Re: IBL
Отправлено: Racheengel от Май 06, 2015, 22:36
Допустим есть стул (или шкаф) 3D объект, помещенный в эту картинку. Просто растыкав лампочки "где ярче" (а это светильник на потолке и окна) мы получим объект ярко освещенный с одной стороны, но никак не освещенный с других. Конечно это его сразу выдаст

Ну момент... Поскольку карта - сферическая, а объект помещается в центр сферы, то почему он будет только с одной стороны освещаться? Надо определить расположение всех ярких точек на ВСЕЙ поверхности сферы, а не только в видимой области. Тогда получится осветить объект со всех сторон.


Название: Re: IBL
Отправлено: Igors от Май 07, 2015, 06:45
Ну момент... Поскольку карта - сферическая, а объект помещается в центр сферы, то почему он будет только с одной стороны освещаться?
Потому что Вы собрались фильтровать и искать яркие точки - а они "сосредоточены" в нескольких (немногих) местах - вот все лампочки там и будут, а с др сторон - пусто

В общем, попал на "любопытного". Никаких решений он не предложит, а будет задавать вопрос за вопросом, пока его любопытство не иссякнет - и тогда наступит тишина. Или я неправ?  :)

Сам я не знаю решения, но полагаю что задачка простая, не нужно даже чего-то читать/гуглить


Название: Re: IBL
Отправлено: Racheengel от Май 08, 2015, 11:57
При чем тут любопытство? Чтоб найти решение, надо понять задачу вначале.

Я так понял, что "лампочки" по карте равномерно распределены. Просто надо брать не только видимую область для расчета, а ПОЛНУЮ карту. Найти яркие точки. Определить их 3D координаты НА СФЕРЕ. Потом просчитать освещение объекта, тут уже рейтрейсинг в помощь, ну да неважно что, что под рукой есть :)

А если лампочки расположены только с одной стороны объекта - ежу понятно, что другая будет в тени.



Название: Re: IBL
Отправлено: Igors от Май 08, 2015, 13:32
Я так понял, что "лампочки" по карте равномерно распределены. Просто надо брать не только видимую область для расчета, а ПОЛНУЮ карту.
Полная (вся) карта и предъявлена в первом посте. Просто когда она ляжет на сферу окружения - камера будет видеть ее небольшую часть, повернем камеру - увидим др часть и.т.д. Но к освещению это отношения не имеет

Найти яркие точки.
Посмотрите на вторую (темную) картинку. Справа большой кусок не имеет никаких ярких точек, ну значит и лампочек там не поставим. В том-то и хитрость что нужно "везде много света" - но "где-то еще больше".

А если лампочки расположены только с одной стороны объекта - ежу понятно, что другая будет в тени.
Ежу все понятно, поэтому у него вместо мозгов иголки  :)


Название: Re: IBL
Отправлено: Racheengel от Май 08, 2015, 14:51
Ну хорошо, что мы видим из первой картинки? Вернее, что "видит" комп? А видит он светлые и темные места. Компу не объяснишь, что вот то пятно - это лампочка, вон это - окно, а там вот на столе - просто блик. Поэтому придется искать только по интенсивности. Допустим не так брутально, как на второй картинке - я поэтому и предложил бинаризацию. Потом отсеять блобы, которые по размерам слишком малы, чтобы быть источниками света. Потом рассчитать среднюю интенсивность в пределах оставшихся блобов и их центры на 2Д картинке. Когда все это сделано - перевести их в 3Д, зная радиус сферы. Там расположить "лампочки" с учетом просчитанной интенсивности. Потом поставить объект, куда надо, и просчитать его освещение.
Наверно, есть другие варианты решения, не спорю. Но я бы для начала делал как-то так.


Название: Re: IBL
Отправлено: Igors от Май 08, 2015, 15:15
Термин "blob" (Binary Large OBject) может означать что угодно, не знаю что Вы имеете ввиду в данном случае. Также я не имею понятия про "бинаризацию"  :) И кстати
Допустим не так брутально, как на второй картинке
А картинки отличаются только множителем/амплитудой, здравый смысл говорит что расклад лампочек должен получаться одинаковый для первой и второй


Название: Re: IBL
Отправлено: Racheengel от Май 08, 2015, 21:20
ну если в двух словах:

Бинаризация - это превращение цветной картинки в монохромную (собственно, карту битов, где каждый пиксель превращается либо в 0, либо в 1). В простейшем случае, например, пиксели значением больше 128 становятся единицами, меньше - нулями (обычно цветную картинку переводят в серую и лишь потом бинаризируют по определенным правилам).

После того как карта битов получена - в ней можно искать блобы, т.е. сплошные области, состоящие из, скажем, единиц. Каждый блоб имеет характеристики - размер, диаметр, например еще "вес" и т.д. Поиском и анализом блобов занимаются как коммерческие библиотеки (MIL, Cognex, Halcon), так и бесплатные типа OpenCV (обычно они же могут и бинаризацию выполнить).

А когда блобы найдены - можно их центры с 2д системы координат перевести в 3д, в зависимости от радиуса сферы. И лампочки туда порастыкать :)


Название: Re: IBL
Отправлено: Igors от Май 09, 2015, 05:05
Бинаризация - это превращение цветной картинки в монохромную (собственно, карту битов, где каждый пиксель превращается либо в 0, либо в 1).
Понял, спасибо. Ну как-то это противоречит данной задаче - сначала берем картинку с большим диапазоном данных а потом режем, т.е. все данные выкидываем.

Ладно, расскажу свои мысли. Мой оптимизм (задача легкая) основывается на том что похожую задачу я уже когда-то делал. Разница в том что надо было разделить HDRI имедж на области "примерно равной энергии" (аттач). Здесь почти все то же самое, но есть еще и амплитуда. Нужно там где лампочки стоят слишком густо заменить их одной (с большей яркостью) и воткнуть освободившиеся в места где пусто. "Энергии" станут уже неравными, но здесь равенство и не требуется. Для этого нужно как-то формализовать  "густо-пусто", пока это слова. Возможен и др подход - изменить исходный имедж (временно, перед расчетами) чтобы концентрация лампочек стала нужной. Вот пока обдумываю


Название: Re: IBL
Отправлено: Racheengel от Май 11, 2015, 10:54
Цитировать
Ну как-то это противоречит данной задаче - сначала берем картинку с большим диапазоном данных а потом режем, т.е. все данные выкидываем.

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

Цитировать
формализовать  "густо-пусто"
Ну так судя по картинке, можно объединить стоящие рядом маленькие кластеры, и вставлять туда "лампочку" большей интенсивности?


Название: Re: IBL
Отправлено: Igors от Май 11, 2015, 11:59
С помощью бинарных блобов находится только область, а интенсивность можно определить, "наложив" блоб на исходную картинку в виде маски, и посчитать числовые значения.
Не навязываю своего мнения, но весь этот подход с "выделением" мне кажется неподходящим. Предположим вся картинка одного цвета + еще яркое пятно. Мы легко выделили пятно, ну и что, где ставить остальные? Нужно что-то делать с областями где никаких доминант (пятен) нет. А если так, то почему бы не сделать это сразу, а заодно и "пятна" сами найдутся

Ну так судя по картинке, можно объединить стоящие рядом маленькие кластеры, и вставлять туда "лампочку" большей интенсивности?
Да, хотелось бы. Но это не так уж просто сделать


Название: Re: IBL
Отправлено: Racheengel от Май 12, 2015, 18:19
а глобальное освещение есть ("по умолчанию")? Или если лампочки не растыкать, все будет чорно-черное?


Название: Re: IBL
Отправлено: Igors от Май 13, 2015, 05:35
а глобальное освещение есть ("по умолчанию")? Или если лампочки не растыкать, все будет чорно-черное?
:) Это как раз упрощенная альтернатива глобального освещения. 

[off]А все-таки есть счастливые люди! Анти-алиас = отам флажок включить, глобальное освещение = так, мелочь, "по умрлчанию" :) [/off]


Название: Re: IBL
Отправлено: Racheengel от Май 13, 2015, 10:42
Я имел в виду "глобальное освещение" на уровне конечного 3д-рендера. Обычно можно активировать т.н. Environmental или Ambient Lighting. Т.е. равномерно со всех сторон :)