Если изображения смешиваются линейно, и если мы рассмотрим идеальный случай, когда мы не теряем точность из-за ограниченного диапазона значений, которые может представлять пиксель (скажем, 8-бит в одномканальном изображении), то ядумаю, что мы можем сформулировать проблему следующим образом (я думаю, что это должно сработать, по крайней мере, в теории, но, пожалуйста, укажите, есть ли недостатки):
Если
A : image1 that is available to us.
B : image2 which we have to estimate.
Y = (1-c)A + c.B : blended image, where c is the blending coefficient, 0 <= c <= 1.
Y
Тогда
Y = A + c.(B-A)
Y-A = c.(B-A)
Теперь мы знаем Y-A
, поскольку нам известны и 1013 *, и A
. Пусть Y-A=C
. Тогда
C = c.(B-A)
Теперь рассмотрим пиксели изображения в местоположении (x, y)
C(x,y) = c.(B(x,y)-A(x,y))
Рассмотрим два пикселя изображения в местах (x1,y1)
и (x2,y2)
C(x1,y1) = c.(B(x1,y1)-A(x1,y1)) - (1)
C(x2,y2) = c.(B(x2,y2)-A(x2,y2)) - (2)
если C(x2,y2)
не равен нулю, мы можем разделить (1) на (2) и отменить c
.
C(x1,y1)/C(x2,y2) = (B(x1,y1)-A(x1,y1))/(B(x2,y2)-A(x2,y2)) - (3)
ПустьC(x1,y1)/C(x2,y2) = d
. Мы знаем d
, его значение варьируется в зависимости от выбранной пары пикселей. Переставляя (3), мы получаем
d.B(x2,y2) = B(x1,y1)+[d.A(x2,y2) - A(x1,y1)] - (4)
здесь мы знаем d
, A(x1,y1)
и A(x2,y2)
. Поэтому мы вывели линейную зависимость между двумя значениями пикселей в изображении B
.
. Перепишем (4), взяв e=1/d
, предполагая, что d не равно нулю.
B(x2,y2) = e.B(x1,y1) + [A(x2,y2)-e.A(x1,y1)]
B(x2,y2) = e.B(x1,y1) + f - (5)
где f=[A(x2,y2)-e.A(x1,y1)]
.
Здесь мы знаем как e
и f
, и их значения зависят от выбранной пары пикселей. Используя (5), мы можем установить повторяемость между значениями пикселей B
, например:
B(x1, y1) = e1.B(x0, y0) + f1
B(x2, y2) = e2.B(x1, y1) + f2 = e2.(e1.B(x0, y0) + f1) + f2 = e3.B(x0, y0) + f3
:
, где e2.e1 = e3
и e2.f1+f2=f3
.
Например,
B(1, 0) = e1.B(0, 0) + f1
B(2, 0) = e2.B(0, 0) + f2
B(3, 0) = e3.B(0, 0) + f3
:
B(i, j) = ei.B(0, 0) + fi
Предположим, мы находим все отношения, то есть эти e
s и f
s для всех остальных пикселей изображения B
в терминах B(0, 0)
, и устанавливаем B(0, 0) = 1
.
Тогда
B(0, 0) = 1
B(1, 0) = e1 + f1
B(2, 0) = e2 + f2
B(3, 0) = e3 + f3
:
B(i, j) = ei + fi
Поэтому мы получили необходимое изображение B
пикселей до аффинного преобразования.
Это очень интересная проблема. Я попытаюсь написать код, чтобы попробовать это, когда у меня будет немного свободного времени.