Russian Qt Forum
Апрель 29, 2024, 10:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: IBL  (Прочитано 9637 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
IBL
« : Апрель 08, 2015, 08:13 »

Добрый день

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

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

Спасибо

Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Май 05, 2015, 01:38 »

фильтр по интенсивности, бинаризация, затем поиск блобов?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 05, 2015, 08:20 »

фильтр по интенсивности, бинаризация, затем поиск блобов?
В общем, "все что нам известно - то и применим" Улыбающийся В результате лампочки стоят в самых ярких местах картинки - а это совсем не то что нужно.

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

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Май 06, 2015, 00:56 »

Так а исходная сцена 2д или 3д? лампочки надо в 3д вставить и потом уже 2д картинку сгенерировать?
Или исходная картинка 2д без освещения и ее надо так подсветить, чтоб совмещалось с 3д объектом?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Май 06, 2015, 08:48 »

Так а исходная сцена 2д или 3д? лампочки надо в 3д вставить и потом уже 2д картинку сгенерировать?
Картинка - cферическая карта, ну или "карта окружения". Вы видели как текстура натягивается на сферу. Здесь то же самое, только камера всегда находится в центре сферы. Вращая камеру мы увидим ту или иную часть комнаты. Исходная картинка намеренно искажена чтобы компенсировать искажения сферы.

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Май 06, 2015, 22:36 »

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

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Май 07, 2015, 06:45 »

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

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

Сам я не знаю решения, но полагаю что задачка простая, не нужно даже чего-то читать/гуглить
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Май 08, 2015, 11:57 »

При чем тут любопытство? Чтоб найти решение, надо понять задачу вначале.

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

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

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Май 08, 2015, 13:32 »

Я так понял, что "лампочки" по карте равномерно распределены. Просто надо брать не только видимую область для расчета, а ПОЛНУЮ карту.
Полная (вся) карта и предъявлена в первом посте. Просто когда она ляжет на сферу окружения - камера будет видеть ее небольшую часть, повернем камеру - увидим др часть и.т.д. Но к освещению это отношения не имеет

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

А если лампочки расположены только с одной стороны объекта - ежу понятно, что другая будет в тени.
Ежу все понятно, поэтому у него вместо мозгов иголки  Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Май 08, 2015, 14:51 »

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Май 08, 2015, 15:15 »

Термин "blob" (Binary Large OBject) может означать что угодно, не знаю что Вы имеете ввиду в данном случае. Также я не имею понятия про "бинаризацию"  Улыбающийся И кстати
Допустим не так брутально, как на второй картинке
А картинки отличаются только множителем/амплитудой, здравый смысл говорит что расклад лампочек должен получаться одинаковый для первой и второй
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #11 : Май 08, 2015, 21:20 »

ну если в двух словах:

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

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

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Май 09, 2015, 05:05 »

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

Ладно, расскажу свои мысли. Мой оптимизм (задача легкая) основывается на том что похожую задачу я уже когда-то делал. Разница в том что надо было разделить HDRI имедж на области "примерно равной энергии" (аттач). Здесь почти все то же самое, но есть еще и амплитуда. Нужно там где лампочки стоят слишком густо заменить их одной (с большей яркостью) и воткнуть освободившиеся в места где пусто. "Энергии" станут уже неравными, но здесь равенство и не требуется. Для этого нужно как-то формализовать  "густо-пусто", пока это слова. Возможен и др подход - изменить исходный имедж (временно, перед расчетами) чтобы концентрация лампочек стала нужной. Вот пока обдумываю
« Последнее редактирование: Май 09, 2015, 05:07 от Igors » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #13 : Май 11, 2015, 10:54 »

Цитировать
Ну как-то это противоречит данной задаче - сначала берем картинку с большим диапазоном данных а потом режем, т.е. все данные выкидываем.

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

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Май 11, 2015, 11:59 »

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

Ну так судя по картинке, можно объединить стоящие рядом маленькие кластеры, и вставлять туда "лампочку" большей интенсивности?
Да, хотелось бы. Но это не так уж просто сделать
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.