WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Kreuzkorrelation mittels FFT, Verschiebung berechnen

 

Suseneu123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2012, 23:04     Titel: Kreuzkorrelation mittels FFT, Verschiebung berechnen
  Antworten mit Zitat      
Hallo liebe Helferlinge,

ich habe ein Problem und es eilt ein wenig.
Es steht unter dem Motto "Drift-Korrektur mittels Kreuzkorrelation" und die dazu zu erledigenden Aufgaben sind:
1. Kreuzkorrelationsfunktion (CCF) mittels Fourier-Transformation berechnen
2. Maximum dieser Funktion bestimmen
3. verschiedene Glättungsmethoden (Mittelung in Bildern, Mittelung der CCF, Tiefpassfilter)

Die ersten beiden Teile habe ich meiner Meinung nach schon einigermaßen richtig. Aber bei der Ermittlung der Verschiebung bzw. bei der Verschiebung der Bilder, sodass die Korrelation korrigiert wird, komme ich nicht weiter.
Mein bisheriger Code ist:

Code:
%einlesen und darstellen der Ausgangsbilder
I1=imread('...');
I2=imread('...');
subplot(1,2,1), imshow(I1), subplot(1,2,2), imshow(I2)

%Kreuzkorrelationsfunktion mit fft (Faltungstheorem) berechnen
F1=fft2(I1);
F2=conj(fft2(I2));
F3=F1.*F2;
S=ifft2(F3);
figure, mesh(real(S)) % liefert auch ein schönes Bild mit eindeutigem Peak

% Maximum der CCF berechnen
[val,pos]=max(S(:));
[x,y]=ind2sub(size(S),pos);


Und hier hört es dann auf.
Ich habe mir zur Bestimmung der Verschiebung bzw. zum Verschieben der Bilder folgendes überlegt:

Code:
%Verschiebung
[Sx,Sy]=size(S);
Vx=(Sx/2)-1+x;
Vy=(Sy/2)-1+y;

%Erstellen von Null-Matrizen, in die verschobenes Bild und Originalbilder gespeichert werden
Neu1=zeros(Sx+Vx, Sy+Vy);
Neu1(1:Sx,1:Sy)=I1;

Neu2=zeros(Sx+Vx, Sy+Vy);
Neu2(1:Sx,1:Sy)=I2;

Neu3=zeros(Sx+Vx, Sy+Vy);
Neu3((Vx+1):(Sx+Vx),(Vy+1):(Sy+Vy))=I1;


Aber das mag nicht so recht klappen.
Hat jemand Ideen oder Hilfestellungen?
Wäre tolle,
liebe Grüße

Suseneu123


Suseneu123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2012, 18:27     Titel: keine Antwort?
  Antworten mit Zitat      
Hallo? Hat hier niemand eine Idee?
Wäre wirklich fein!

Liebe Grüße,
Suseneu123
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 06.02.2012, 12:38     Titel:
  Antworten mit Zitat      
Hi,

dieses Problem hatte ich vor langer Zeit (1993 - 1996) ebenfalls zu lösen.
Ich hatte mich damals mit der "Geschwindigkeitserfassung von Kraftfahrzeugen durch Bildfolgenanalyse" beschäftigt.

Auch hier musste man die Verschiebung eines bewegten Objekts zwischen zwei Bildern ermitteln.

Bei deinem Ansatz wirst Du nur die Verschiebung innerhalb eines Quadranten ermitteln (dx >= 0 & dy >= 0).

Ich hab ein SciLab-File angehängt.
Darin kannst Du sehen, daß ich für alle 4 Quadranten eine KKF über den Frequenzbereich durchführe.

Hierfür werden die Bilder mal entlang der Zeilen und mal entlang der Spalten gespiegelt (Die Indizierung $:-1:1 realisiert diese, wobei $ hier der Platzhalter für Zeilen- bzw. Spaltenanzahl ist).

Danach wird von allen vier Quadranten das Maximum der KKF bestimmt und abhängig davon, in welchem Quadranten das Maximum liegt, die entsprechende Verschiebung ermittelt.

Bei Rückfragen kannst Du mir auch eine Mail an dringajg@googlemail.com schicken.

Mit besten Grüßen
Andreas

Schau Dir doch

getmove.txt
 Beschreibung:
SciLab-Routine zur Ermittlung der "Verschiebung zwischen zwei Bildern".

Download
 Dateiname:  getmove.txt
 Dateigröße:  2.19 KB
 Heruntergeladen:  967 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.