本質上它被稱為二維多元插值。 我有一組位置 (x,y) 和相應的數據,例如:z=顏色值。 對於某些 (x,y),z 列缺少數據。 我想使用最近的兩個已知(x1,y1,z1)和(x2,y2,z2)來插值(x3,y3,z3=?)。
理論上這個維基/雙線性插值是我喜歡得到的。
JMP有辦法做到這一點嗎?
另外,我需要首先按另外兩列 A、B 對 X、Y 數據進行分組。例子。 COl A、B 代表文件名和幀號。 X,Y 是像素在幀中的位置,Z 是像素顏色。
我想對每個文件中每個幀中缺失像素的 Z 值進行插值。
樣本數據集
| 文件 | 框架 | X | 是 | 顏色 |
| 螞蟻人 | 1 | 0 | 0 | 255 |
| 螞蟻人 | 1 | 5 | 5 | 195 |
| 螞蟻人 | 1 | 3 | 2 | ?? |
| 螞蟻人 | 2 | 0 | 0 | 255 |
| 蝙蝠俠 | 3 | 0 | 0 | 255 |
| 蝙蝠俠 | 3 | 3 | 2 | ?? |
| 蝙蝠俠 | 3 | 5 | 5 | 100 |
如果我理解正確,雙線性插值將需要四個點(而不是兩個)。 分組列的處理會很混亂,因此對於一組,您可以執行以下操作:
Names Default To Here( 1 );
// Example table: Four complete observations, and one missing 'Colour' to be
// obtained by bilinear interpolation
dt = New Table( "Antman_1",
Add Rows( 5 ),
New Column( "X",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0, 5, 3, 5, 0] )
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0, 5, 2, 0, 5] ),
Set Display Width( 92 )
),
New Column( "Colour",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [255, 195, ., 100, 150] )
)
);
// Using the notation at: https://en.wikipedia.org/wiki/Bilinear_interpolation
x1 = dt[1, "X"];
x2 = dt[2, "X"];
y1 = dt[1, "Y"];
y2 = dt[2, "Y"];
q11 = dt[1, "Colour"];
q21 = dt[4, "Colour"];
q12 = dt[5, "Colour"];
q22 = dt[2, "Colour"];
x = dt[3, "X"];
y = dt[3, "Y"];
// Interpolate in the X direction
r1 = Interpolate(x, x1, q11, x2, q21);
r2 = Interpolate(x, x1, q12, x2, q22);
// Interpolate in the Y direction
p = Interpolate(y, y1, r1, y2, r2);
Wait(3);
dt[3, "Colour"] = p;
這不太可能是“最佳”方法,但為了做得更好,需要一些示例數據(在 JMP 表中)。 您還需要決定如何處理邊緣情況。