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
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);
A = zeros(2,2);
b = zeros(2,1);
stepX = 2 / wn; #2 / (Bildbreite-1)
stepY = 2 / hn; #2 / (Bildhöhe-1)
for xn=-1:stepX:1 #Über die normierten Pixelkoordinaten laufen
for yn=-1:stepY:1[xnt, ynt] = transCoords(xn, yn, T); #Transformationsmatrix auf normierte Koordinaten anwenden[xp, yp] = deNormCoords(xn,yn); #Nicht transformierte Koordinaten denormalisieren [xpt, ypt] = deNormCoords(xnt, ynt); #transformierte Koordinaten denormalisieren
JC = jacobi(xn, yn); #Jacobi Matrix erzeugen
GD = [biInt(Gdx, xpt, ypt), biInt(Gdy, xpt, ypt)]; #Gradienten Vektor vom ZielBild erzeugen
A = A + JC' * (GD' * GD) * JC;
b = b + JC' * (biInt(imgDn, xpt, ypt) - biInt(imgQn, xp, yp)) * GD';
endfor
endfor
A
b = -b
deltaP = A \ (b');
P = P + deltaP';
T = [1, 0, P(1,1); 0, 1, P(1,2)]
endfunction
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 d ...
↧