Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
1

Имитация светового окружения

08.04.2015, 08:23. Просмотров 990. Ответов 26
Метки нет (Все метки)

Здравствуйте

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

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

Не по теме:

Ну вот, сейчас опять максимум "удивленное пожимание плечами", "неясна задача" - и вернутся месить олимпиадщину на N листах :)

0
Миниатюры
Имитация светового окружения   Имитация светового окружения  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2015, 08:23
Ответы с готовыми решениями:

Сила светового давления
Найти с помощью корпускулярных представлений силу светового давления, которую оказывает плоский...

Трекинг светового пучка
Подскажите пожалуйста как реализовать: Имеем: 1.Компьютер с подключенной к нему вебкамерой...

Ход светового луча
Всем привет! Задали в универе написать программу в матлабе, но так как я ним на "Вы", то...

Найти величину светового давления
На поверхность 100 см^3 ежеминутно падает 80 Дж световой энергии. Найти величину светового...

Датчик положения светового пятна
Собственно сабж. Какие линейные датчики для определения положения "зайчика" существуют....

26
HighPredator
5801 / 2061 / 732
Регистрация: 10.12.2010
Сообщений: 5,871
Записей в блоге: 3
08.04.2015, 09:16 2
Цитата Сообщение от Igor3D Посмотреть сообщение
Ну вот, сейчас опять максимум "удивленное пожимание плечами", "неясна задача"
Ну а как вы хотели с таким описанием?
Цитата Сообщение от Igor3D Посмотреть сообщение
чтобы они как можно точнее описывали "окружение"
Что значит "описывали"? Как источник света может что-то "описывать"?
Цитата Сообщение от Igor3D Посмотреть сообщение
как если бы свет излучался из картинки вокруг нас
Где я должен находиться, чтобы высказывание работало? В центре сферы (раз это развертка сферы)? Чему соответствуют ваши картинки?
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
08.04.2015, 10:52  [ТС] 3
Цитата Сообщение от HighPredator Посмотреть сообщение
Ну а как вы хотели с таким описанием?
Правду сказать ничего не хотел, просто пинг, может кто новый появился с которым есть о чем поговорить

Цитата Сообщение от HighPredator Посмотреть сообщение
Где я должен находиться, чтобы высказывание работало? В центре сферы (раз это развертка сферы)? Чему соответствуют ваши картинки?
Развертка сферы соответствует сфере Т.е. если мы мапнем эту картинку на сферу и будем смотреть из ее центра, то стены (что кривые на картинке) станут ровными.

Цитата Сообщение от HighPredator Посмотреть сообщение
Что значит "описывали"? Как источник света может что-то "описывать"?
Такая критика ничем не кончается - но всех утомляет. Смотрите глазами юзера. Что он хочет - вполне ясно.
Игорь, тут такое дело. Мне заказали сцену вот в этой комнате, картинка есть, нужные 3D объекты сделал (часто небольшая часть 3D, остальное фоновая картинка). Но вот беда - мои объекты освещаются совсем не так как в комнате. Надо расставить десятка 3-4 лампочек, но руками это застрелиться. Можешь сбацать это на автомате, о цене договоримся и.т.д.
И вот представьте что я начинаю заказчику парить типа
Вы сначала формализуйте задачу! Нет ограничений - нет задачи! И.т.п.
Это было бы довольно глупо с моей стороны
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
08.04.2015, 13:50 4
Опишем лампочку как пятно выбранного цвета с прозрачностью, яркость пятна зависит от яркости цвета , а прозрачность зависит от удалением от центра лампочки (тут выбрать закон по душе = линейно/квадрат расстояния/т.п.) Требуется взять такие цвета и так расставить лампочки, чтобы сферическая картинка минимально отличалась от заданной.

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

Вторым делом на ум приходит следующее:
Для выбранного закона для пятна лампочки строим обратное преобразование. Т.е. если на рисунке у нас пятно от лампочки, то после преобразования этот рисунок должен быть максимально похож на рисунок с яркой точкой в центре бывшего пятна. Таким преобразованием проходим по исходной картинке (естественно, не забыв что рисунок не простой, а натянут на сферу). В преобразованной картинке ищем максимум яркости, запоминаем что туда будем ставить лампочку с такой же яркостью, вычитаем пятно лампочки из первичного изображения, проводим повторное преобразование над изображением с вычетом (либо же вычитаем "обратное пятно" помноженное на яркость найденной точки из преобразованной картинки, тогда повторное преобразование делать не надо). Повторяем поиск пока не закончатся лампочки.
Может в чистом виде это не будет достаточно хорошим решением, но можно использовать как основу для дальнейших рассуждений.
0
08.04.2015, 13:50
HighPredator
5801 / 2061 / 732
Регистрация: 10.12.2010
Сообщений: 5,871
Записей в блоге: 3
08.04.2015, 13:58 5
Цитата Сообщение от Igor3D Посмотреть сообщение
Чему соответствуют ваши картинки?
Цитата Сообщение от Igor3D Посмотреть сообщение
Развертка сферы соответствует сфере
Я не о том. Картинка 1 относительно картинки 2 это что? 2 -- то что имеем, а 1 -- то, что надо получить? Или как?
Цитата Сообщение от Igor3D Посмотреть сообщение
Такая критика ничем не кончается - но всех утомляет. Смотрите глазами юзера. Что он хочет - вполне ясно.
Слушайте, что за детский сад? Это не тот кейс чтобы глазами юзера смотреть (мало ли он под лсд -- так тем более). Мне непонятно чего он хочет. Расставить лампочки так, чтобы получившаяся освещенность дала возможность предметы разглядеть?
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
08.04.2015, 14:53 6
Если же стоит задача сделать что-то типа LED подсветки для телевизора, то лучше сферу разбить сеткой из лампочек и подстраивать каждую лампочку под среднее арифметическое от освещения в соответствующей ячейке.
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
09.04.2015, 07:46  [ТС] 7
HDR картинка содержит большие значения, но монитор-то их не отображает (максимум "белый"). Др словами это всего лишь "видимая часть айсберга". Визуально первая картинка говорит немного - ну везде много света, значит и лампочки ставим примерно равномерно. Простой способ пощупать HDR - поделить все значения напр на 10 и опять посмотреть. Вот теперь (вторая картинка) мы видим что основная масса света идет от светильника на потолке и из окон, как оно и есть в реальности. Поэтому "среднее арифметическое" отдыхает.

Цитата Сообщение от wingblack Посмотреть сообщение
Для выбранного закона для пятна лампочки строим обратное преобразование. Т.е. если на рисунке у нас пятно от лампочки, то после преобразования этот рисунок должен быть максимально похож на рисунок с яркой точкой в центре бывшего пятна. Таким преобразованием проходим по исходной картинке (естественно, не забыв что рисунок не простой, а натянут на сферу). В преобразованной картинке ищем максимум яркости, запоминаем что туда будем ставить лампочку с такой же яркостью, вычитаем пятно лампочки из первичного изображения, проводим повторное преобразование над изображением с вычетом (либо же вычитаем "обратное пятно" помноженное на яркость найденной точки из преобразованной картинки, тогда повторное преобразование делать не надо). Повторяем поиск пока не закончатся лампочки.
Может в чистом виде это не будет достаточно хорошим решением, но можно использовать как основу для дальнейших рассуждений.
Ой, ну как-то совсем дыряво Связываться с "пятнами" - это ворох проблем. Ну вот нашли пыксель напр со значением 10 (считаем что монитор отображает 0..1). И что, это уже "пятно" на которое надо тратить драгоценную лампочку? Или пятно идет в виде какой-то узкой длинной полосы. Или пятно-то отличное (напр окно), но большое, сколько лампочек там ставить? На мой взгляд, сам подход неверен, так мы обречены на "ловлю блох"
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
09.04.2015, 08:09 8
Про LED подсветку я не правильно сказал - я про подсветку стены за телевизором, а не подсветку матрицы.

Цитата Сообщение от Igor3D Посмотреть сообщение
Ну вот нашли пыксель напр со значением 10 (считаем что монитор отображает 0..1). И что, это уже "пятно" на которое надо тратить драгоценную лампочку?
Если этот пиксель - максимум по всей картинки, то да. Так как все остальные пиксели менее яркие, то он очень даже важный.

Цитата Сообщение от Igor3D Посмотреть сообщение
Связываться с "пятнами" - это ворох проблем
А задача и так - ворох проблем. По сути задача - это поиск похожего изображения, обладающего некоторыми свойствами. Лампочка на картинке не будет точкой, а будет кругом (в самом простом варианте). "Установка" лампочки будет соответствовать тому, что на сфере в этом месте нарисован круг, а как с сферической карты круг перенести на обычную - это тоже еще нужно найти такое преобразование (но проблема не уникальна, в интернете материлы должны быть).
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
09.04.2015, 09:04  [ТС] 9
Цитата Сообщение от wingblack Посмотреть сообщение
Если этот пиксель - максимум по всей картинки, то да. Так как все остальные пиксели менее яркие, то он очень даже важный.
Тупое решение: каждый пиксель = лампочка. Формально это совершенно корректно, ну правда на миллионы лампочек не хватит ресурсов Теперь допустим один пиксель ну очень яркий, напр в 100 раз ярче всех остальных. Но очевидно он никакой особой роли не играет (типа "один в поле не воин"), ну была общая интенсивность напр миллион, теперь еще +100, практической разницы нет

Цитата Сообщение от wingblack Посмотреть сообщение
А задача и так - ворох проблем. По сути задача - это поиск похожего изображения, обладающего некоторыми свойствами.
Это практическая задача (а не олимпиадная головоломка). Здесь может быть все что угодно, напр решение может оказаться простейшим. Или хорошо известным. Или его может не существовать вообще. Поэтому возможно "похожее изображение" здесь вообще ни при чем. Да и вороха может не оказаться
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
09.04.2015, 10:41 10
Цитата Сообщение от Igor3D Посмотреть сообщение
...каждый пиксель = лампочка...
...Теперь допустим один пиксель ну очень яркий...
Вот поэтому я и определяю лампочку как пятно - поскольку это наиболее соответствует (в моем понимании) требованию пользователя.
Проводя предложенное мною преобразование мы получаем оценку предполагаемой яркости лампочки для каждой точки (координаты) рисунка. Яркость точек в преобразованном рисунке должна соответствовать среднему арифметическому от яркости точек исходного изображения взятых в области пятна от лампочки (с учетом прозрачности пятна, если такой параметр введен), поставленной по координатам точки преобразования.

Добавлено через 16 минут
Т.е. можно зайти с другой стороны. Выбираем какое будет пятно у лампочки, и используем такое пятно как маску размытия для исходного изображения. Ищем максимумы яркости и по найденным таким координатам ставим лампочку - вычитаем размытое пятно.
Или тут все же нужна "маска четкости" ? Интересно, как будут отличаться результаты по обеим маскам.
0
heymdall
7 / 7 / 2
Регистрация: 12.02.2012
Сообщений: 47
11.04.2015, 21:26 11
Картинка непростая - пиксели могут иметь любые значения (а не только 0..255). Напр на втором аттаче яркость в 10 раз меньше, но не все стало темно.
мне кажется это ошибка:
пикселы имеют не любые значения а именно (0..255) это просто формат например текстуры. на второй картинке это не яркость всей картины в 10 раз меньше, а как будто фоточувствительность изменена, как настроена на светлый день на улице а снимается в помещении, окно как яркое было так и осталось, так и центр лампы на потолке.

Про лампочки ничего не понял.
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
12.04.2015, 17:22 12
Цитата Сообщение от heymdall Посмотреть сообщение
мне кажется это ошибка:
пикселы имеют не любые значения а именно (0..255) это просто формат например текстуры
Есть тип "целое", он может быть 1 байт, а может и 2 и 4 и больше.
То же самое и с пикселями. Мы можем сказать что цвета пикселя - RGB, можем что CMYK, можем ограничить глубину цветов 8 битами, можем взять по 32 бита на цвет.
Есть такие термины как "High Dynamic Range Rendering" в компьютерной графике и "High Dynamic Range Imaging" в фотографии, где точка в одном канале (цвете) занимает гораздо более чем 8 бит.
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
13.04.2015, 07:04  [ТС] 13
Цитата Сообщение от heymdall Посмотреть сообщение
Про лампочки ничего не понял.
Попробуйте задать вопрос(ы), постараюсь ответить

Цитата Сообщение от wingblack Посмотреть сообщение
Есть такие термины как "High Dynamic Range Rendering" в компьютерной графике и "High Dynamic Range Imaging" в фотографии, где точка в одном канале (цвете) занимает гораздо более чем 8 бит.
Не всегда, может даже редко. Чаще всего (и на приведенной картинке) пиксель хранится в 4 байтах. Остряки называют этот формат "ельфа"

Однако это не более чем "эрудиция", с алгоритмами ... ну что-то совсем неважно
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
13.04.2015, 09:20 14
Цитата Сообщение от Igor3D Посмотреть сообщение
пиксель хранится в 4 байтах
Судя по размеру - очень похоже на 8 бит с альфа каналом, если, конечно, это не какой-нить YUV с повышенной глубиной одного из каналов.

А ты все же попробуй такую эрудицию воплотить, даже в самом простом виде, и посмотри - похоже ли на то что нужно или нет.
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
13.04.2015, 10:36 15
В вложенной картинке демонстрация простого алгоритма, написанного за 10 минут, с квадратными лампочками.
0
Миниатюры
Имитация светового окружения  
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
13.04.2015, 12:58  [ТС] 16
Помещать лампочки в самые яркие места нужно, но неверно ставить ставить их только туда. С Вашей расстановкой легко найдется место не освещаемое ни одной лампой. Там будет совсем темно, а посмотрите на первую картинку - такого быть не должно, "везде много света" (что впрочем совсем не значит "амбиент").

Лучше исходить из "энергетических" соображений. Напр опять есть пиксель с яркостью 100. И есть квадратик 10х10 в котором яркость всех пикселей 1.0. По "энергии" эти пиксель и квадратик одинаковы.

Не по теме:

Дедушка считает официальный тон одним из признаков профессионализма, поэтому игнорирует тыкалок. Только потому что Вы потратили свое время на пример, дедушка ответил. Но в след раз он замолчит

0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
13.04.2015, 18:29 17
Цитата Сообщение от Igor3D Посмотреть сообщение
Помещать лампочки в самые яркие места нужно, но неверно ставить ставить их только туда. С Вашей расстановкой легко найдется место не освещаемое ни одной лампой.
Если лампочки маленькие и их мало, то приходится выбирать значимые места на картинке. Поскольку прочих явных условий кроме количества лампочек нет - играем в телепата.
Цитата Сообщение от Igor3D Посмотреть сообщение
Лучше исходить из "энергетических" соображений.
Я как раз, по сути, это и использовал - оценивал яркость внутри окна по маске с размером лампочки (сдвигал на 1 пиксель каждый раз). В какой-то мере это похоже на размытие по маске, о чем я и говорил ранее.
В том числе это (мне) напоминает преобразование Хафа.
Возможно, картинка была не достаточно удачной, да и следовал я такому алгоритму весьма приблизительно - например, вычитал яркость квадрата, а не его отображения.
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
14.04.2015, 13:20  [ТС] 18
Цитата Сообщение от wingblack Посмотреть сообщение
Если лампочки маленькие и их мало, то приходится выбирать значимые места на картинке. Поскольку прочих явных условий кроме количества лампочек нет - играем в телепата.
Есть их интенсивность, сказано что они точечные. Может внимательнее прочитать условие, тогда и телепатия не понадобится Как-то Вы совсем не поняли идею "светового окружения" и делаете с точностью до наоборот. Пример: мы находимся в комнате, на потолке например 4 источника света. Нужно описать это 10 лампочками. Как бы человек это делал руками: по одной на источник и по одной на каждую стену, плюс 2 на пол и потолок. При этом интенсивность ламп что стоят на источниках заметно выше, оттуда идет намного больше света. Заметьте что стена(ы) могут и не иметь никаких пятен, зато они имеют значительную площадь которая излучает. Что бы делал человек имея в запасе еще 10 ламп? Вероятно разместил бы их еще на стенах, т.к там больше площадь, а источники на потолке маленькие, они и так хорошо описываются единичками. Чего он хочет добиться ясно - чтобы везде был свет.

А Вы где-то прочитали/применили "пятна" и лепите их к любой задаче
0
wingblack
281 / 255 / 45
Регистрация: 09.04.2013
Сообщений: 958
14.04.2015, 15:13 19
Цитата Сообщение от Igor3D Посмотреть сообщение
Есть их интенсивность, сказано что они точечные
Ну не точки на картинке же они, для меня это скорее как "omni" - всенаправленный источник, который, в общем случае, оставляет пятно с яркостью, уменьшающуюся с расстоянием (до источника).
Цитата Сообщение от Igor3D Посмотреть сообщение
А Вы где-то прочитали/применили "пятна" и лепите их к любой задаче
Нет, придумал специально для вашей задачи, сей подход нигде ранее не использовал (только некоторые отдаленно схожие). В частности, в сильно упрощенном случае, можно считать что источник света на плоскости оставляет пятно. Вот и леплю, поскольку это очень похоже на решение, пусть и в минус первом(или даже третьем) приближении.
Цитата Сообщение от Igor3D Посмотреть сообщение
Пример: мы находимся в комнате......
Ну, комната со стенами и обстановкой - это, конечно,хорошо, но это нам все не известно по условию. Нам дана поверхность сферы с картинкой, и источники света нужно расставлять на картинке, а значить на поверхности сферы. Без учета стен и всего. Нет, я понял вашу мысль о изначальном освещение, мне непонятны конкретные моменты по учету светимости ламп, которые мы расставляем для повторения картинки.

Что ж, мои "пятна" для очень особого любителя, это понятно.
Но, в таком случае, можете ли вы описать как изменится полностью черная картинка если на сферу положить один единственный источник света? Как изменятся точки на картинке? Пусть даже мы будем считать что картинка не на сфере, а на плоскости, для простоты вычислений.
0
Igor3D
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
14.04.2015, 17:15  [ТС] 20

Не по теме:

Пока не забыл: хранение "больших" значений в 4 байтах - см RGBE


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

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

Цитата Сообщение от wingblack Посмотреть сообщение
мне непонятны конкретные моменты по учету светимости ламп, которые мы расставляем для повторения картинки.
Это и не должно быть понятно. Основная проблема - точечный источник света (напр omni) очень далек от распределенного источника (area light). И чем больше площадь которую описали точечным источником - тем это заметнее, в первую очередь по теням. С др стороны Area Light - это практически неизбежный raytrace с очень, очень многими вытекающими (особенно в анимации). Поэтому желание юзера иметь пусть примитивную, но надежную и простую фишку 100% законно. А вот как это сделать - дело программиста, никто ему разжевывать ничего не будет. Это практика, жизнь

Цитата Сообщение от wingblack Посмотреть сообщение
Но, в таком случае, можете ли вы описать как изменится полностью черная картинка если на сферу положить один единственный источник света? Как изменятся точки на картинке? Пусть даже мы будем считать что картинка не на сфере, а на плоскости, для простоты вычислений.
Если "остальная полностью черная" - то это легкий, приятный случай, все лампочки сосредоточены в ярком пятне, остальное ноль энергии - ну значит и ни одной лампочки. Но вот если остальное "не совсем черное" - это мерзкий частный случай. Придется описывать слишком большие площади слишком малым числом лампочек - попрут дефекты
0
14.04.2015, 17:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2015, 17:15

Найти угол падения светового луча
Чему равен угол падения светового луча на поверхность кварцевого стекла, если угол между падающим и...

Амплитуда светового вектора. Дифракция Френеля
Доброго времени суток. Не получается разобраться вот с такой задачей: C первым пунктом все ясно,...

Определить диаметр светового пятна на экране
Всем добрый день. Задали написать прогу, вроде задачка то не сложная, но я просто не знаю по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.