Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смешивание на границе 
:(
    Опции темы
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   Вверх
mrgloom
Дата 7.3.2013, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну так картинки выше это и есть область пересечения красного и зеленого прямоугольников.

Цитата

появился дополнительный вопрос: откуда возьмется плавный переход на пересечение двух областей? 

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


Эксперт
****


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

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



картинки выше это интерполяция от красного угла к зеленому углу, а не пересечение прямоугольников.
можно сделать как угодно, я прост хочу понять твои ожидания.
например, если просто смешивать цвета (типа прозрачность), то граница будет резкой.
если граница должна быть плавной, нужен некий критерий, некая точка, которая является "центром притяжения цвета"
можно например вычислять центры масс каждого прямоугольника и интерполировать относительно них
PM MAIL   Вверх
mrgloom
Дата 7.3.2013, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

картинки выше это интерполяция от красного угла к зеленому углу, а не пересечение прямоугольников.

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

Цитата

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

вот это уже ближе к теме,ну допустим для прямоугольника центр масс w/2 h/2 , как считать дальше?

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


Опытный
**


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

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



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

надо получить области пересечения прямоугольников и их кол-во в этой области.
user posted image

получаются полигоны, впринципе есть http://sourceforge.net/projects/polyclipping/
но там общий случай и будут найдены пересечения-полигоны.

у меня же мои полигоны можно разложить на сумму прямоугольников и отрисовывать их так легче  (не знаю можно ли вообще в mfc рисовать полигоны с картинкой)

Добавлено через 6 минут и 33 секунды
точнее вопрос сводится к тому, что надо из прямоугольника вычесть прямоугольник и потом получившеюся фигуру побить на прямоугольники.
PM MAIL   Вверх
mrgloom
Дата 1.4.2013, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



может быть это что то типа heat equation?

user posted image

т.е. у нас есть полигон, стороны-отрезки, которые имеют свой цвет и "испускают" внутрь области этот цвет, где он внутри полигона смешивается в какой то пропорции.
и у нас есть краевое условие, что на границе-отрезке у нас чистый цвет. 
PM MAIL   Вверх
baldina
Дата 1.4.2013, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mrgloom @  1.4.2013,  14:06 Найти цитируемый пост)
т.е. у нас есть полигон, стороны-отрезки, которые имеют свой цвет и "испускают" внутрь области этот цвет, где он внутри полигона смешивается в какой то пропорции.
и у нас есть краевое условие, что на границе-отрезке у нас чистый цвет.  

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


Опытный
**


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

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



ну на границе цвет чистый и переход идет от одного чистого до другого чистого,а по середине смешивание, всё плавно и без шва.

вообщем это походу называется Discrete Poisson equation

типа такого
http://www.ctralie.com/Teaching/PoissonImageEditing/


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


Эксперт
****


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

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



здесь не просто переход цвета от одного к другому, а смешивание с изменением прозрачности от центра к границе.
вычисляется пересечение прямоугольников, затем производится интерполяция прозрачности для каждого прямоугольника от 0 до 1 по удалению от центра, затем смешивается.

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

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


Опытный
**


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

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



Цитата

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

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


вот например задача одна граница красная, другая зеленая и условие, что цвет на границе должен быть "чистый", а внутри области мы должны как то произвести смешивание.
user posted image
PM MAIL   Вверх
mrgloom
Дата 3.4.2013, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

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



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

п.с. всё таки это как то сильно похоже на какую нибудь физическую задачку о распространении тепла или магнитных полях.
PM MAIL   Вверх
baldina
Дата 3.4.2013, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mrgloom @  2.4.2013,  10:54 Найти цитируемый пост)
если бы развернули что значит "дальше просто делается интерполяция цвета"

билинейная интерполяция

Цитата(mrgloom @  2.4.2013,  10:54 Найти цитируемый пост)
как быть, если у нас пересечение полигон будет, а не прямоугольник

полигон можно разбить на прямоугольники.
если последовательно вычислять результат - сначала два прямоугольника, потом к результату добавляем третий (пересекаем с предыдущим пересечением, потом с первым прямоугольником, потом со вторым) и т.д., то на каждом шаге придется иметь дело лишь с одним прямоугольником
PM MAIL   Вверх
mrgloom
Дата 8.4.2013, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



что то я всё равно ваш алгоритм не понял.




тут предлагают сначала проводить триангуляцию
http://mathematica.stackexchange.com/quest...playing-polygon
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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