Russian Qt Forum
Ноябрь 22, 2024, 20:09
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
IBL
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: IBL (Прочитано 10015 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
IBL
«
:
Апрель 08, 2015, 08:13 »
Добрый день
Есть картинка, сферическая карта (поэтому так странно и выглядит). Картинка непростая - пиксели могут иметь любые значения (а не только 0..255). Напр на втором аттаче яркость в 10 раз меньше, но не все стало темно.
Пользователь задает число лампочек, обычно неск десятков. Требуется расставить их на картинке так чтобы они как можно точнее описывали "окружение", как если бы свет излучался из картинки вокруг нас. Формально надо найти позицию каждой точечной лампочки и ее RGB интенсивность
Спасибо
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: IBL
«
Ответ #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
Сообщений: 11445
Re: IBL
«
Ответ #2 :
Май 05, 2015, 08:20 »
Цитата: Racheengel от Май 05, 2015, 01:38
фильтр по интенсивности, бинаризация, затем поиск блобов?
В общем, "все что нам известно - то и применим"
В результате лампочки стоят в самых ярких местах картинки - а это совсем не то что нужно.
Наверное Вы видели рекламу всяких машинок по телеку. Часто 3D объект - лишь сама машинка, а все остальное - background, т.е. просто картинка (пусть большая и красивая). И тут вылазит проблема - машинка по освещенности должна сбиваться с картинкой - иначе машинка будет выглядеть как "инородное тело". Один из способов решения - расставить в сцене источники света, но их нужно слишком много чтобы сделать это руками.
Применительно к картинкам выше. Допустим есть стул (или шкаф) 3D объект, помещенный в эту картинку. Просто растыкав лампочки "где ярче" (а это светильник на потолке и окна) мы получим объект ярко освещенный с одной стороны, но никак не освещенный с других. Конечно это его сразу выдаст
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: IBL
«
Ответ #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
Сообщений: 11445
Re: IBL
«
Ответ #4 :
Май 06, 2015, 08:48 »
Цитата: Racheengel от Май 06, 2015, 00:56
Так а исходная сцена 2д или 3д? лампочки надо в 3д вставить и потом уже 2д картинку сгенерировать?
Картинка - cферическая карта, ну или "карта окружения". Вы видели как текстура натягивается на сферу. Здесь то же самое, только камера всегда находится в центре сферы. Вращая камеру мы увидим ту или иную часть комнаты. Исходная картинка намеренно искажена чтобы компенсировать искажения сферы.
Цитата: Racheengel от Май 06, 2015, 00:56
Или исходная картинка 2д без освещения и ее надо так подсветить, чтоб совмещалось с 3д объектом?
Наоборот, объекты надо подсветить так чтобы они совмещались с (неизменной) картинкой
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: IBL
«
Ответ #5 :
Май 06, 2015, 22:36 »
Цитата: Igors от Май 05, 2015, 08:20
Допустим есть стул (или шкаф) 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
Сообщений: 11445
Re: IBL
«
Ответ #6 :
Май 07, 2015, 06:45 »
Цитата: Racheengel от Май 06, 2015, 22:36
Ну момент... Поскольку карта - сферическая, а объект помещается в центр сферы, то почему он будет только с одной стороны освещаться?
Потому что Вы собрались фильтровать и искать яркие точки - а они "сосредоточены" в нескольких (немногих) местах - вот все лампочки там и будут, а с др сторон - пусто
В общем, попал на "любопытного". Никаких решений он не предложит, а будет задавать вопрос за вопросом, пока его любопытство не иссякнет - и тогда наступит тишина. Или я неправ?
Сам я не знаю решения, но полагаю что задачка простая, не нужно даже чего-то читать/гуглить
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: IBL
«
Ответ #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
Сообщений: 11445
Re: IBL
«
Ответ #8 :
Май 08, 2015, 13:32 »
Цитата: Racheengel от Май 08, 2015, 11:57
Я так понял, что "лампочки" по карте равномерно распределены. Просто надо брать не только видимую область для расчета, а ПОЛНУЮ карту.
Полная (вся) карта и предъявлена в первом посте. Просто когда она ляжет на сферу окружения - камера будет видеть ее небольшую часть, повернем камеру - увидим др часть и.т.д. Но к освещению это отношения не имеет
Цитата: Racheengel от Май 08, 2015, 11:57
Найти яркие точки.
Посмотрите на вторую (темную) картинку. Справа большой кусок не имеет никаких ярких точек, ну значит и лампочек там не поставим. В том-то и хитрость что нужно "везде много света" - но "где-то еще больше".
Цитата: Racheengel от Май 08, 2015, 11:57
А если лампочки расположены только с одной стороны объекта - ежу понятно, что другая будет в тени.
Ежу все понятно, поэтому у него вместо мозгов иголки
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: IBL
«
Ответ #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
Сообщений: 11445
Re: IBL
«
Ответ #10 :
Май 08, 2015, 15:15 »
Термин "blob" (Binary Large OBject) может означать что угодно, не знаю что Вы имеете ввиду в данном случае. Также я не имею понятия про "бинаризацию"
И кстати
Цитата: Racheengel от Май 08, 2015, 14:51
Допустим не так брутально, как на второй картинке
А картинки отличаются только множителем/амплитудой, здравый смысл говорит что расклад лампочек должен получаться одинаковый для первой и второй
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: IBL
«
Ответ #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
Сообщений: 11445
Re: IBL
«
Ответ #12 :
Май 09, 2015, 05:05 »
Цитата: Racheengel от Май 08, 2015, 21:20
Бинаризация - это превращение цветной картинки в монохромную (собственно, карту битов, где каждый пиксель превращается либо в 0, либо в 1).
Понял, спасибо. Ну как-то это противоречит данной задаче - сначала берем картинку с большим диапазоном данных а потом режем, т.е. все данные выкидываем.
Ладно, расскажу свои мысли. Мой оптимизм (задача легкая) основывается на том что похожую задачу я уже когда-то делал. Разница в том что надо было разделить HDRI имедж на области "примерно равной энергии" (аттач). Здесь почти все то же самое, но есть еще и амплитуда. Нужно там где лампочки стоят слишком густо заменить их одной (с большей яркостью) и воткнуть освободившиеся в места где пусто. "Энергии" станут уже неравными, но здесь равенство и не требуется. Для этого нужно как-то формализовать "густо-пусто", пока это слова. Возможен и др подход - изменить исходный имедж (временно, перед расчетами) чтобы концентрация лампочек стала нужной. Вот пока обдумываю
«
Последнее редактирование: Май 09, 2015, 05:07 от Igors
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: IBL
«
Ответ #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
Сообщений: 11445
Re: IBL
«
Ответ #14 :
Май 11, 2015, 11:59 »
Цитата: Racheengel от Май 11, 2015, 10:54
С помощью бинарных блобов находится только область, а интенсивность можно определить, "наложив" блоб на исходную картинку в виде маски, и посчитать числовые значения.
Не навязываю своего мнения, но весь этот подход с "выделением" мне кажется неподходящим. Предположим вся картинка одного цвета + еще яркое пятно. Мы легко выделили пятно, ну и что, где ставить остальные? Нужно что-то делать с областями где никаких доминант (пятен) нет. А если так, то почему бы не сделать это сразу, а заодно и "пятна" сами найдутся
Цитата: Racheengel от Май 11, 2015, 10:54
Ну так судя по картинке, можно объединить стоящие рядом маленькие кластеры, и вставлять туда "лампочку" большей интенсивности?
Да, хотелось бы. Но это не так уж просто сделать
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...