Essentiellement, cela s’appelle interpolation multivariée 2D. J'ai un ensemble d'emplacements (x, y) et des données correspondantes, par exemple : z=valeur de couleur. Pour certains des (x, y), la colonne z contient des données manquantes. Je souhaite utiliser les deux connus les plus proches (x1,y1,z1) et (x2,y2,z2) pour interpoler la valeur de (x3,y3, z3=?).
Théoriquement, ceci wiki/Interpolation_bilinéaire c'est ce que j'aime obtenir.
JMP a-t-il un moyen de procéder ?
Je dois également d'abord regrouper les données X, Y par deux autres colonnes A, B.Exemple. COl A,B représente le nom de fichier et le numéro de trame. X,Y est l'emplacement d'un pixel dans le cadre et Z est la couleur du pixel.
Je souhaite interpoler la valeur Z pour les pixels manquants dans chaque image de chaque fichier.
Exemple d'ensemble de données
| Déposer | Cadre | X | Oui | Couleur |
| L'homme fourmi | 1 | 0 | 0 | 255 |
| L'homme fourmi | 1 | 5 | 5 | 195 |
| L'homme fourmi | 1 | 3 | 2 | ?? |
| L'homme fourmi | 2 | 0 | 0 | 255 |
| Homme chauve-souris | 3 | 0 | 0 | 255 |
| Homme chauve-souris | 3 | 3 | 2 | ?? |
| Homme chauve-souris | 3 | 5 | 5 | 100 |
Si je comprends bien, vous aurez besoin de quatre points (et non de deux) pour l'interpolation bilinéaire. Les colonnes de regroupement seraient traitées de manière simple, donc pour un groupe, vous pourriez faire quelque chose comme :
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;
Il est peu probable que ce soit la « meilleure » méthode, mais pour faire mieux, certains exemples de données (dans un tableau JMP) seraient nécessaires. Vous devrez également décider comment gérer les cas extrêmes.