Was ist der verwendete Algorithmus zur Interpolation in Matlab ist imresize Funktion?
Ich bin mit der Matlab/Octave imresize()
Funktion, die passt in diesem Fall einem gegebenen 2D-array. Ich möchte verstehen, wie eine bestimmte Interpolations-Algorithmus verwendet, in imresize
funktioniert.
(Ich bin mit octave unter windows)
z.B.
A = 1 2
3 4
ist ein 2D-array. Dann nutze ich den Befehl
b=imresize(a,2,'linear');
grundsätzlich upsampling Zeilen und Spalten von 2.
Die Ausgabe ist
1.0000 1.3333 1.6667 2.0000
1.6667 2.0000 2.3333 2.6667
2.3333 2.6667 3.0000 3.3333
3.0000 3.3333 3.6667 4.0000
Ich verstehe nicht, wie diese lineare interpolation arbeitet. Es wird gesagt, die bilineare interpolation, aber wie sieht es pad die Daten an Grenzen und wie sieht es mit der Ausgabe, dass es immer auf???
Zweiten Beispiel:
Für
A =
1 2 3 4
5 6 7 8
0 1 2 3
1 2 3 4
wie funktioniert imresize(a,1.5,'linear')
geben Sie die folgende Ausgabe?
1.00000 1.60000 2.20000 2.80000 3.40000 4.00000
3.40000 4.00000 4.60000 5.20000 5.80000 6.40000
4.00000 4.60000 5.20000 5.80000 6.40000 7.00000
1.00000 1.60000 2.20000 2.80000 3.40000 4.00000
0.40000 1.00000 1.60000 2.20000 2.80000 3.40000
1.00000 1.60000 2.20000 2.80000 3.40000 4.00000
InformationsquelleAutor goldenmean | 2011-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie sehen können, in deinem Beispiel jeder Eckpunkt ist eine von Ihrer ursprünglichen Eingabe-Werte.
Die intermediate-Werte abgeleitet werden, die über lineare interpolation in jede Richtung. So zum Beispiel, zu berechnen
b(3,2)
:b(1,2)
ist 1/3 des Weges zwischenb(1,1)
undb(1,4)
. Also:b(4,2)
ist 1/3 des Weges zwischenb(4,1)
undb(4,4)
. Also:b(3,2)
ist 2/3 des Weges zwischenb(1,2)
undb(4,2)
. Also:Bearbeitet OP hinzufügen eines zweiten Beispiel, das passt in diesem Fall durch einen Bruch Skalierungsfaktor. In diesem Fall ist nicht klar, wie es comptued seine Ausgänge. Kann u pls. prüfen Sie oben.
Eingaben über das zweite Beispiel, das ich Hinzugefügt im OP?
auch in die Sie bearbeitet haben, beantworten Sie die Punkte b(4,2) und b(3,2) Berechnungen Aussehen falsch (GEWICHTE vertauscht) zu mir. Ist es nicht?
Ja, guter Punkt, ich hatte das Letzte Berechnung von hinten nach vorne!
InformationsquelleAutor Oliver Charlesworth
Der folgende code zeigt, wie Sie führen die Bilineare interpolation mit INTERP2:
das Ergebnis stimmt mit deiner Octave-code-Ausgang:
Sollte ich erwähnen, dass ich immer unterschiedliche Ergebnisse zwischen MATLAB und Oktave IMRESIZE Ausgabe. Dies ist ein Beispiel für das, was ich bekomme, wenn ich führen Sie die folgenden in MATLAB auf die matrix
A=[1 2; 3 4]
:was darauf hindeutet, dass MATLAB die Implementierung ist etwas zu tun... Leider ist es nicht leicht zu Lesen, die IMRESIZE source-code, vor allem, da es irgendwann ruft ein MEX-kompilierten Funktion (ohne source-code-form zur Verfügung).
Als seitliche Anmerkung, es scheint eine ältere version dieser Funktion: IMRESIZE_OLD (rein implementiert in m-code). Von dem, was ich verstehen konnte, führt es eine Art von affine transformation auf das Bild. Vielleicht hat jemand mehr vertraut mit der Technik könnte etwas Licht auf das Thema...
das würde die Differenz erklären. In jedem Fall, und um die Antwort auf Ihre ursprüngliche Frage, die Wikipedia-Artikel, den ich verlinkt erläutert, sowie das Bilineare-interpolation-Verfahren mit einem Beispiel..
Ich nahm einen zweiten Blick auf die IMRESIZE-Funktion, Lesen Sie bitte meine Antwort zu einer anderen Frage: stackoverflow.com/questions/7758078/...
InformationsquelleAutor Amro