У меня есть многоугольник, который состоит из сегментов разных цветов (красный и зеленый на образце).Цвет смеси в полигоне
И для каждого пикселя в многоугольник (серая зона), мне нужно, чтобы рассчитать коэффициенты, чтобы получить цвет пикселя: pix_color = красный * Ca + зеленый * Cb
Граничное условие является то, что на границе цвета коэффициенты должны быть = 1 (например, Ca = 1 Cb = 0 для красной границы).
Так что я хочу добиться «плавного» перехода от красного к зеленому во внутренней области многоугольника.
Как я могу это сделать?
Update 2: Я попробовал алгоритм 3 цветовых границ и без выпуклого многоугольника.
вот мой OpenCV код
//a=red border,b=green,c= blue, da,db,dc min dist to borders.
Vec3b pix_ab;
pix_ab[2]= r_a*db/(da+db)+r_b*da/(da+db);
pix_ab[1]= g_a*db/(da+db)+g_b*da/(da+db);
pix_ab[0]= b_a*db/(da+db)+b_b*da/(da+db);
Vec3b pix_ac;
pix_ac[2]= r_a*dc/(da+dc)+r_c*da/(da+dc);
pix_ac[1]= g_a*dc/(da+dc)+g_c*da/(da+dc);
pix_ac[0]= b_a*dc/(da+dc)+b_c*da/(da+dc);
Vec3b pix_bc;
pix_bc[2]= r_b*dc/(db+dc)+r_c*db/(db+dc);
pix_bc[1]= g_b*dc/(db+dc)+g_c*db/(db+dc);
pix_bc[0]= b_b*dc/(db+dc)+b_c*db/(db+dc);
img(y,x)[0]= (pix_ab[0]+pix_ac[0]+pix_bc[0])/3;
img(y,x)[1]= (pix_ab[1]+pix_ac[1]+pix_bc[1])/3;
img(y,x)[2]= (pix_ab[2]+pix_ac[2]+pix_bc[2])/3;
, но проблема в том, что, например, по условию синей границы влияет не на всей площади полигона, но на каком-то подзоне и если я использую мою формулу я получаю заметную разницу в граница, поэтому я думаю, что мне нужно как-то заставить синий цвет быть = 0 на границе подрайона.
[Билинейная интерполяция] (http://en.wikipedia.org/wiki/Bilinear_interpolation) не подходит для вас? Вы просто получаете цвет с четырех краев, как предложил Павел. Количество цветов в краях не имеет значения, вы просто добавляете значения RGB. –
@George Aprilis Я не понимаю, какие точки мне нужно выбрать в случае полигона. – mrgloom
Деление многоугольника на треугольники с использованием краев было бы лучшим вариантом, но я думаю, что метод, о котором говорил Павел, должен работать. Если вы интерполируете каждое из значений R, G, B таким же образом, то цвет края может быть любым. –