Im Wesentlichen wird es als 2D-multivariate Interpolation bezeichnet. Ich habe eine Reihe von Orten (x,y) und entsprechende Daten, zB: z=Farbwert. Für einige der (x,y) der z-Spalte fehlen Daten. Ich möchte die nächsten zwei bekannten (x1,y1,z1) und (x2,y2,z2) verwenden, um den Wert für (x3,y3, z3=?) zu interpolieren.
Theoretisch das wiki/Bilinear_interpolation ist das, was ich gerne bekomme.
Hat JMP eine Möglichkeit, dies zu tun?
Außerdem muss ich zuerst die X- und Y-Daten nach zwei anderen Spalten A und B gruppieren.Beispiel. COl A,B steht für Dateinamen und Bildnummer. X,Y ist die Position eines Pixels im Frame und Z ist die Pixelfarbe.
Ich möchte den Z-Wert für fehlende Pixel in jedem Frame in jeder Datei interpolieren.
Beispieldatensatz
| Datei | Rahmen | X | Y | Farbe |
| Ameisenmann | 1 | 0 | 0 | 255 |
| Ameisenmann | 1 | 5 | 5 | 195 |
| Ameisenmann | 1 | 3 | 2 | ?? |
| Ameisenmann | 2 | 0 | 0 | 255 |
| Batman | 3 | 0 | 0 | 255 |
| Batman | 3 | 3 | 2 | ?? |
| Batman | 3 | 5 | 5 | 100 |
Wenn ich das richtig verstehe, benötigen Sie für die bilineare Interpolation vier Punkte (nicht zwei). Die Gruppierungsspalten würden sorgfältig behandelt, sodass Sie für eine Gruppe beispielsweise Folgendes tun könnten:
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 ist unwahrscheinlich, dass dies der „beste“ Weg ist, aber um eine bessere Leistung zu erzielen, wären einige Beispieldaten (in einer JMP-Tabelle) erforderlich. Sie müssten auch entscheiden, wie mit Grenzfällen umgegangen werden soll.