Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смешивание на границе 
:(
    Опции темы
mrgloom
Дата 22.2.2013, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



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

при использовании простой формулы 
Код

for( int y = 0; y < h; ++y )
{
        for( int x = 0; x < w; ++x )
        {
                int da= min(x,y);
                int db= min(w-x,h-y);
                double alpha= (double)da/(da+db);
                
                pd[x].blue= (alpha*pIma[x].blue+(1-alpha)*pImb[x].blue);
                pd[x].green= (alpha*pIma[x].green+(1-alpha)*pImb[x].green);
                pd[x].red= (alpha*pIma[x].red+(1-alpha)*pImb[x].red);
        }
        pIma+= w_a;
        pImb+= w_b;
        pd+= w;
}

получается 
user posted image

но мне кажется обведенные участки не должны быть такими.
PM MAIL   Вверх
Silent
Дата 22.2.2013, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



у меня в одном проекте (на C#) было сделано так:
Код

Bitmap r = new Bitmap(img.Width, img.Height);
double D = Math.Sqrt(r.Width*r.Width + r.Height*r.Height);
for (int i = 0; i < r.Width; i++)
     for (int j = 0; j < r.Height; j++)
     {
          double a1 = Math.Sqrt(i * i + j * j) / D,
                    a2 = 1 - a1;
          r.SetPixel(i, j, Color.FromArgb(255, Convert.ToInt32(255*a1), Convert.ToInt32(255*a2), 0));
     }

PM MAIL   Вверх
mrgloom
Дата 22.2.2013, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



ну это как бы градиент по кругу, только как правильно его "вписать" в прямоугольник?

Добавлено @ 15:11
ну вроде лучше, но всё равно неправильно, т.к. самая верхняя линия должна быть зеленой.

user posted image
user posted image

Это сообщение отредактировал(а) mrgloom - 22.2.2013, 15:25
PM MAIL   Вверх
_Y_
Дата 22.2.2013, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Что-то я не понял зачем прямоугольник. Я бы пробовал строить градиент вдоль перпендикуляра к границе.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
mrgloom
Дата 25.2.2013, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Цитата

Что-то я не понял зачем прямоугольник. Я бы пробовал строить градиент вдоль перпендикуляра к границе. 


ну и как задаётся граница?
PM MAIL   Вверх
_Y_
Дата 25.2.2013, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



mrgloom, подозреваю, что граница задается кривой и (подозреваю, опять же), что ттребуется просто сделать зрительно плавный переход.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
mrgloom
Дата 26.2.2013, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет





ну допустим задаём какой либо кривой - это кривая уровня 0.5, что дальше?
ну можно предположить, что надо по нормали к кривой во всех направлениях "испускать градиент разной силы" и что на границе прямоугольной области мы должны приходить к чистому цвету. 
но я не знаю как так поставить задачу.

есть еще вариант взять точку и из точки пускать лучи на стенку области и в зависимости от длины луча по разному меняется градиент, альфа цвет меняется с 0.5 до 0.
но не очень понятно как это потом всё интерполировать.
PM MAIL   Вверх
baldina
Дата 26.2.2013, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



попробуй 
Код

alpha=(u+1-v)/2
u = x/(w-1)
v = y/(h-1)

PM MAIL   Вверх
baldina
Дата 5.3.2013, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



mrgloom, на чем сердце успокоилось?
PM MAIL   Вверх
mrgloom
Дата 6.3.2013, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



да так и не понятно как правильно.

ну вроде неплохо получается, но кажется, что красного как то меньше, но может это что то связанное именно с цветами и их восприятием.
user posted image

Это сообщение отредактировал(а) mrgloom - 6.3.2013, 12:15
PM MAIL   Вверх
baldina
Дата 6.3.2013, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(mrgloom @  6.3.2013,  12:12 Найти цитируемый пост)
связанное именно с цветами и их восприятием

 smile 
PM MAIL   Вверх
mrgloom
Дата 6.3.2013, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



остаётся вопрос как быть с вариантом, когда накладываются несколько изображений.

серая область там где пересекаются по 2, а зеленая там где 3 изображения.

user posted image

Это сообщение отредактировал(а) mrgloom - 6.3.2013, 16:07
PM MAIL   Вверх
baldina
Дата 6.3.2013, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



о! смотри как делается интерполяция по двум точкам, трем и более (квадратичные кривые и т.д.)

вывод формулы любого порядка делается просто:
если линейная интерполяция lerp(p0,p1,t):=p0*(1-t)+p1*t
то 2го порядка lerp2(p0,p1,p2,t):=lerp(lerp(p0,p1,t),lerp(p1,p2,t),t)
и т.д.

Добавлено через 1 минуту и 51 секунду
хотя может тебе не это требуется, а просто усреднение значений в пересекающихся областях (смешивание)?
PM MAIL   Вверх
mrgloom
Дата 7.3.2013, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



я не понял как тут использовать сплайны.

мне требуется смешивание(плавный переход по границе) только тут получается случай более сложный, т.к. есть области где смешивается по 2 изображения и есть где 3.По идее еще не должно быть перепада между зеленой и серыми областями, как и между серыми и белыми.
PM MAIL   Вверх
baldina
Дата 7.3.2013, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



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

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

Добавлено через 6 минут и 28 секунд
еще раз прочитал первый пост, и понял что задача не в том, о чем думал сначала.
появился дополнительный вопрос: откуда возьмется плавный переход на пересечение двух областей?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.