Verfasst am: 26.07.2013, 19:32
Titel: Transformationsmatrix zwischen zwei Bildern bestimmen
Hallo zusammen,
ich habe zwei Bilder von dem eines im Vergleich zu dem anderen, verschoben und anders skaliert ist. Nun möchte ich die (Ähnlichkeits-) Transformations-Matrix zu diesen Bildern finden. Dazu wollte ich das Verfahren anwenden, welches in Richard Szeliski großartigen Tutorial zum Image Stitching auf Seite 29 beschrieben ist.
Im Grunde geht es darum ein lineares Gleichungssystem Ax = b zu lösen, wobei:
Kein Problem also Das ganze ist ein iteratives Verfahreren, mit jedem Schritt sollte die Lösung also etwas besser werden.
stellt die Bildkoordinaten dar, welche auf Werte zwischen -1 und 1 normiert wurden (vgl. S. 3)
sind die Bildkoordinaten transformiert mit der aktuellen Transformationsmatrix
(vgl. S. 16)
bzw. entsprechen den Intensitätswerten der Bilder.
Eigentlich ist für mein Problem anders definiert, aber im ersten Schritt versuche ich erstmal nur die Translation zu bestimmen. Die anderen Modelle sind auf Seite 29 beschrieben.
Ich probiere nun schon seit einer Woche dies zum Laufen zu bekommen, aber es will einfach nicht und ich finde den Fehler nicht. Ein Iterationsschritt sieht bei mir so aus:
Code:
function deltaP = doIteration() global wn hn Gdx Gdy imgQn imgDn P T
#imgQn ist das Quellbild normiert auf Werte zwischen 0 und 1
#imgDn ist das Zielbild normiert auf Werte zwischen 0 und 1
#P ist der Parameter Vektor, welcher bei der Translation (tx,ty) ist
#T ist die Transformationsmatrix = [1,0,tx;0,1,ty]
#Gdx Gdy entpricht gradient(imgDn);
Das komplette Programm habe ich angehängt. So wie ich es implementiert habe, würde es nur bei quadratischen Ich bin kein Matlab Experte und bitte es zu entschuldigen wenn da komische Befehlsfolgen stehen.
Ansonsten bedanke ich mich schon mal bei denen die bis hierhin gelesen haben. Ich wäre unendlichdankbar, wenn jemand den Fehler finden könnte. Aber auch ein Link auf eine funktionierende Implementierung dieses Verfahrens würde helfen.
Ich hab das in Octave geschrieben, weil mir zuhause kein Matlab zur Verfügung steht. Ist das wichtig? Ich muss zugeben, dass ich es noch nicht in Matlab getestet habe, weil ich dachte dass die Programme weitgehend kompatibel sind. Das kann ich aber noch nachholen.
Nun ja, weil dein Code ist jetzt in Octave Style( wie Kommentare oder endfunktion) und nicht in Matlab Style geschrieben. Und deswegen nicht in Matlab lauffähig. Matlab und Octave sind nicht zu 100 % kompatibel, sondern es gibt so einige Unterschiede zw. den beiden. Man kann aber auch den Code in Matlab Style gestalten, das versteht Octave. Die grundlegenden Funktionen sind identisch, sonst muss man immer schauen, ob die Programme kompatibel sind.
Außerdem ist dein Programm, kann entweder ein Funktionsscript sein, also nur aus Funktionen und Unterfunktionen bestehen oder nur ein Script sein, aber doch nicht beides. Bitte erklären wie du dein Code nutzt!!!
Die meisten sind in Matlab unterwegs und wenn der Fehler in Octave auftaucht, können dir die meisten da schon nicht mehr weiter helfen.
Gibt dein Programm irgendwelche Fehlermeldungen?
Zuletzt bearbeitet von denny am 29.07.2013, 16:39, insgesamt einmal bearbeitet
Oh, das war mir nicht bewusst. Ich hatte es nur gelesen und dies für bare Münze genommen. Ich habe jetzt eine Matlab Version angehängt.
Die Funktionsweise ist folgende. Es wird ein 10x10 großes "Bild" erstellt mit einem 3x3 großem weißen Rechteck, auf grauem Grund. Dieses wird mit einer Transformationsmatrix T=[1,0,-3;0,1,-3]; verschoben. Ziel ist es nun durch mehrere Iterationen diese Transformationsmatrix zu finden.
Beide Versionen verhalten sich identisch, einen Fehler produziert keine. Ich werde wahrscheinlich die oben genannten Formeln falsch umgesetzt haben. Ich weiß das es viel verlangt ist, sich in ein Programm einzuarbeiten und einen semantischen Fehler zu finden, aber vielleicht interessiert das Thema ja den ein oder anderen.
Verschoben: 31.07.2013, 10:44 Uhr von Jan S Von Bildverarbeitung nach Octave-Forum
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.