Básicamente se llama interpolación multivariada 2D. Tengo un conjunto de ubicaciones (x,y) y los datos correspondientes, por ejemplo: z=valor de color. Para algunos de los (x,y), a la columna z le faltan datos. Quiero usar los dos conocidos más cercanos (x1,y1,z1) y (x2,y2,z2) para interpolar el valor de (x3,y3, z3=?).
Teóricamente esto wiki/interpolación_bilineal es lo que me gusta conseguir.
¿Tiene JMP alguna manera de hacer esto?
También necesito primero agrupar los datos X,Y por otras dos columnas A,B.Ejemplo. COl A,B representa el nombre del archivo y el número de fotograma. X,Y es la ubicación de un píxel en el marco y Z es el color del píxel.
Quiero interpolar el valor Z de los píxeles que faltan en cada cuadro de cada archivo.
Conjunto de datos de muestra
| Archivo | Marco | X | Y | Color |
| Hombre Hormiga | 1 | 0 | 0 | 255 |
| Hombre Hormiga | 1 | 5 | 5 | 195 |
| Hombre Hormiga | 1 | 3 | 2 | ?? |
| Hombre Hormiga | 2 | 0 | 0 | 255 |
| hombre murciélago | 3 | 0 | 0 | 255 |
| hombre murciélago | 3 | 3 | 2 | ?? |
| hombre murciélago | 3 | 5 | 5 | 100 |
Si entiendo correctamente, necesitarás cuatro puntos (no dos) para la interpolación bilineal. Las columnas de agrupación se abordarían fácilmente, por lo que para un grupo podría hacer algo como:
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;
Es poco probable que esta sea la "mejor" manera, pero para hacerlo mejor se necesitarían algunos datos de muestra (en una tabla JMP). También necesitaría decidir cómo manejar los casos extremos.