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

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Октябрь 01, 2015, 12:29 »

Дык я вроде бы и предлагаю -ориентировать бруски по их локальным градиентам. Все равно других вариантов пока я не вижу.
А как его посчитать, этот локальный градиент? Вот формулировка этой подзадачи:

Есть тр-к в вершинах которого заданы значения интенсивности (показано зеленым) v0, v1, v2. Есть точка внутри тр-ка, известны ее барицентрические координаты a, b, c. Интенсивность в точке интерполируется

v = v0 * a + v1 * b + v2 * c;

Как аналитически найти вектор интенсивности в точке? Численное решение хлопотно и неточно, учитывая что тр-к в 3D
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #16 : Октябрь 03, 2015, 00:17 »

А почему нельзя отрендерить это все в битмап и использовать значения яркости в нужных точках? Зачем решать именно аналитически?

Градиент тогда считается просто, как разность интенсивности в начальной и конечной точках.
Записан

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


Просмотр профиля
« Ответ #17 : Октябрь 03, 2015, 07:48 »

А почему нельзя отрендерить это все в битмап и использовать значения яркости в нужных точках? Зачем решать именно аналитически?
Потому что даже скромная модель состоит из тысяч таких полигонов которые еще и повернуты в пр-ве как угодно

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

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

Сообщений: 2679


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


Просмотр профиля
« Ответ #18 : Октябрь 03, 2015, 12:00 »

Стоп. Для определения градиентов нам достаточно интенсивности в картинке, нарисованной пользователем. Так?
Далее, вам просто надо определить bounding circle для бруска на плоскости картинки. Этот круг мы сегментируем, скажем, на 360 диаметров с поворотом в 1 градус. Далее для каждого отрезка-диаметра вычисляем разность интенсивности в его начале и конце. Это и есть градиент. Потом выбираем отрезок с максимальной разностью и это и будет вектор ориентации бруска.
Записан

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


Просмотр профиля
« Ответ #19 : Октябрь 03, 2015, 13:17 »

Стоп. Для определения градиентов нам достаточно интенсивности в картинке, нарисованной пользователем. Так?
Так

Далее, вам просто надо определить bounding circle для бруска на плоскости картинки. Этот круг мы сегментируем, скажем, на 360 диаметров с поворотом в 1 градус. Далее для каждого отрезка-диаметра вычисляем разность интенсивности в его начале и конце. Это и есть градиент. Потом выбираем отрезок с максимальной разностью и это и будет вектор ориентации бруска.
Опять Вы вернулись к неудачной (на мой взгляд) идее задействовать "весь брусок". А вместо него может быть напр стандартный teapot (чайник) или еще чего похлеще. И париться с "сегментацией" придется ой долго, да к тому же еще и неоднозначно.

[OFF]Тут обычно у слабонервных начинаются истерики. "Что это за задача??? Говорил "брусок", а теперь уже какой-то "чайник" приплел! Через жопу.. и.т.п.  Улыбающийся[/OFF]

[OFF2]Уж 2 дня как сделал  Улыбающийся[/OFF]
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #20 : Октябрь 03, 2015, 15:59 »

Цитировать
А вместо него может быть напр стандартный teapot (чайник) или еще чего похлеще. И париться с "сегментацией" придется ой долго, да к тому же еще и неоднозначно

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

ЗЫ. И как сделал то?
Записан

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


Просмотр профиля
« Ответ #21 : Октябрь 04, 2015, 10:21 »

ЗЫ. И как сделал то?
Уперся в вычисление градиента (пост #15), но тоже не смог. Пара дней гугления ничего не дала. Тогда придумал так: считаем градиент в вертексах, а для точки интерполируем его так же как и цвет.

Расчет в вертексах оказался очень простым. См первый аттач, напр точку слева (или справа) от яркой. Для них вектор градиента будет направлен по ребру, соединяющему этот вертекс с ярким. Величина градиента прямо пропорциональна разнице яркостей и обратно пропорциональна длине ребра. Ну и общий градиент = сумме по ребрам. Напр в яркой точке он вероятно ноль (ребра компенсируют друг друга).

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


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