从您发布的那个页面,有一个指向源的链接
代码。我将在
中解释双线性变换
http://www.antigrain.com/__code/include/agg_trans_bilinear.h.html
这里的想法是找到形式的转换:
output_x = a * input_x + b * input_x * input_y + c * input_y + d
output_y = e * input_x + f * input_x * input_y + g * input_y + h
术语“双线性”来自于这些方程中的每一个都是线性的
任何一个输入坐标本身。我们想解决
a、b、c 和 d 的正确值。说你有参考
矩形 r1, r2, r3, r4 要映射到 (0,0), (1,0), (0,1),
(1,1)(或某些图像坐标系)。
对于 a、b、c、d:
0 = a * r1_x + b * r1_x * r1_y + c * r1_y + d
1 = a * r2_x + b * r2_x * r2_y + c * r2_y + d
0 = a * r3_x + b * r3_x * r3_y + c * r3_y + d
1 = a * r4_x + b * r4_x * r4_y + c * r4_y + d
对于 e,f,g,h:
0 = e * r1_x + f * r1_x * r1_y + g * r1_y + h
0 = e * r2_x + f * r2_x * r2_y + g * r2_y + h
1 = e * r3_x + f * r3_x * r3_y + g * r3_y + h
1 = e * r4_x + f * r4_x * r4_y + g * r4_y + h
您可以随心所欲地解决这个问题。 (如果你熟悉
矩阵表示法,这是两个矩阵方程,其矩阵
是一样的,然后你只需要找到LU分解
一次,并求解两个未知向量)。那么系数是
应用于将矩形的内部映射到
矩形。
如果您正在寻找逆变换,也就是说,
如果您想知道给定像素将落在哪里,您只需切换
输入和输出:
对于 a、b、c、d:
r1_x = a * 0 + b * 0 * 0 + c * 0 + d
r2_x = a * 1 + b * 1 * 0 + c * 0 + d
r3_x = a * 0 + b * 0 * 1 + c * 1 + d
r4_x = a * 1 + b * 1 * 1 + c * 1 + d
对于 e,f,g,h:
r1_y = e * 0 + f * 0 * 0 + g * 0 + h
r2_y = e * 1 + f * 1 * 0 + g * 0 + h
r3_y = e * 0 + f * 0 * 1 + g * 1 + h
r4_y = e * 0 + f * 0 * 1 + g * 1 + h