Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Август 16, 2013, 10:13



Название: Интерполяция по решетке
Отправлено: Igors от Август 16, 2013, 10:13
Добрый день

Вроде задачка несложная, но что-то "не придумывается". Есть 3-мерный массив ячеек a[ x ][ y ][ z ] в котором записаны значения плотности в центре ячейки. Известно положение решетки в пр-ве и размеры ячейки по осям (одинаковы для всех)

Надо: для произвольной точки p(x. y, z) интерполировать значение плотности. Первое что приходит в голову - создать др массив плотностнй в "узлах", а дальше смотреть в какую ячейку попала точка и крутить "trilinear". Но так оно неприятно развесисто получается - и новый массив создавать, и с trilinear париться. Нет ли чего-то половчее?

Спасибо


Название: Re: Интерполяция по решетке
Отправлено: Igors от Август 17, 2013, 16:29
 Тут поговорил с товарищами, и они меня убедили - ничего страшного в trilinear нет, ну длинная формула, но простая. Ok, реализовал. Сейчас др проблема также связанная с интерполяцией.

Узлы решетки бросают тень друг на друга. Для примера свет напрвлен по диагонали, последовательно проходя узлы с индексами (0, 0, 0), (1, 1, 1), (2, 2, 2) и.т.д. Предположим в узле (0, 0, 0) большая плотность, а в остальных почти нулевая. Тогда возникает неприятный эффект резкой/жесткой тени по диагонали. В жизни такого нет - солнце имеет угловой размер, поэтому тень размывается - чем дальше от препятствия, тем больше. Как получить такую размытую освещенность в узлах?
   


Название: Re: Интерполяция по решетке
Отправлено: Disa от Август 21, 2013, 10:05
Первое что приходит в голову - размытие с соседними узлами когда большое значение плотности.
Например, Гауссом:
(http://unick-soft.ru/art/img/MatrixFilters/gaussMatrix.png)


Название: Re: Интерполяция по решетке
Отправлено: Igors от Август 21, 2013, 10:30
Первое что приходит в голову - размытие с соседними узлами когда большое значение плотности.
Например, Гауссом:
Ну хорошо хоть кто-то ответил :) Гауссом или нет - детали. Главное - как размывать переменно. Напр точка "в глубине решетки" получает мало света - ее нужно сильно мыть/осреднять. Наоборот, точка фронта может вообше не требовать никакого размытия.


Название: Re: Интерполяция по решетке
Отправлено: Disa от Август 23, 2013, 13:17
Цитировать
Напр точка "в глубине решетки" получает мало света - ее нужно сильно мыть/осреднять

Я не уверен насчет скорости работы в реал тайме, но никто не мешает делать ядро свертки размытия функцией с зависимостью от параметра (та же яркость). Пример - тот же гаусс, с разными значениями мат.ожидания, ср.кв. отклонения и размерность матрицы (то есть радиуса размытия). Какие это значения должны быть - эвристический подбор.

Картинка с вики для наглядности
(http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Normal_distribution_pdf.png/800px-Normal_distribution_pdf.png)


Название: Re: Интерполяция по решетке
Отправлено: Igors от Август 23, 2013, 15:37
Я не уверен насчет скорости работы в реал тайме, но никто не мешает делать ядро свертки размытия функцией с зависимостью от параметра (та же яркость). Пример - тот же гаусс, с разными значениями мат.ожидания, ср.кв. отклонения и размерность матрицы (то есть радиуса размытия). Какие это значения должны быть - эвристический подбор.
"та же яркость" я понял так

- если точка хорошо освещена - размываем/осредняем мало
- если плохо - много. Коэффициенты как-нибудь подберем

Ну это очевидно не проходит, пример: 2 соседние точки, освещены именно так - одна хорошо, др плохо. Однако это за счет жесткости исходных теней. Осреднение должно размыть их примерно одинаково, в резульаье значения освещенности должны выровняться. А в предложенной схеме этого нет.