- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 10

Thema: 2D Korrelation - Hilfe bei der Implementierung mit FFT (FFTW und OpenCV)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Also zur Theorie :
    Die KKF kann man im spektralen Bereich durch eine Multiplikation zweier Signale, wobei das eine konjungiert komplex ist, realisiert werden. Das stimmt schon einmal. Problem dabei ist meiner Meinung nach nur, dass die Verschiebung nicht größer pi/2 sein darf (siehe konjungiert komplexe zahl grafisch dargestellt).

    Das gilt für den 1D- und 2D-Bereich gleichermaßen.

    Hilfreich wären beide Bilder, also der Ausschnitt und das zu untersuchende Bild. Stellt die Grafik von dir den Betrag, die Phase oder einfach nur das komplexe Ergebnisfeld dar?

    Hab bis jetzt immer nur im Zeitbereich die KF angewendet, daher würde ich aus dem Bauch heraus sagen, dass die beiden weißen Flecken die Punkte sind, wo der Korrelationskoeffizient sein Maximum erreich.
    Grüße,
    Daniel

  2. #2
    Hi ,
    das oben zu sehende Bild zeigt die Inverse FFT der Korrelation dar (Lösungsraum R = IF ( F(image) x F*(templ) )) im Zeit-bzw Bildbereich dar. Die Darstellung ist ja eh nicht aussagekräftig.
    Zum Vergleich habe ich die 2D Korrelation mit OpenCV-hauseigenen Methoden durchgeführt. (Anhang result_opencv.jpg). Das Bild ist im Prinzip mit meinem identisch, nur habe ich das Bild nicht abgeschnitten und bei mir sind die komischen Streifen drin.

    Wie soll ich mir denn die Verschiebung um Pi/2 im 2D - Fall vorstellebn? Aber selbst eine Verschiebung um wenige Pixel ändert nichts am Streifenmuster.

    Anbei auch mal das Testbild und den Ausschnitt.

    Gruß
    Christoph
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken image.jpg   result_opencv.jpg   templ.jpg  
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Zitat Zitat von BoondockDuck Beitrag anzeigen
    Wie soll ich mir denn die Verschiebung um Pi/2 im 2D - Fall vorstellebn?
    die DFT ist ja nur eine Differenzengleichung (Summe) und wird im 2D-Fall nicht wirklich zweidimensional angewendet. Viel eher wird sie auf die Spalten und anschließend auf die Zeilen deines Bildes angewendet.

    Zeitbereich/Diskreter Bereich:
    Stellt man sich den Farbverlauf einer Zeile als Funktion in Abhängigkeit der Zeit oder des Indexes vor, so ist auch dort eine Phasenverschiebung möglich.

    Dein Ergebnisbild lässt darauf schließen, dass du die zyklische Fortsetzung der FFT nicht unterdrückst. Meinst du das mit Abschneiden ?
    Grüße,
    Daniel

  4. #4
    Zitat Zitat von ePyx Beitrag anzeigen
    Dein Ergebnisbild lässt darauf schließen, dass du die zyklische Fortsetzung der FFT nicht unterdrückst. Meinst du das mit Abschneiden ?
    Genau das meine ich. Aber das sollte doch eigentlich kein Problem ergeben wie bei mir zu sehen?
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Naja es sieht zu mindestens periodisch aus.

    Code:
    for( i = 0, k = 0 ; i < image.size().height ; i++ ) {
            for( j = 0 ; j < image.size().width ; j++, k++ ) {
                image_data[k][0] = image.at<double>(i, j);
                image_data[k][1] = 0.0;
            }
        }
    Macht doch eigentlich so mehr Sinn oder ?

    Code:
    for( i = 0 ; i < image.size().height ; i++ ) {
            for( j = 0, k = 0; j < image.size().width ; j++, k++ ) {
                image_data[k][0] = image.at<double>(i, j);
                image_data[k][1] = 0.0;
            }
        }
    Schließlich durch läufst du zeilenweise und pro Zeile schaufelst du Daten. wenn k nicht zurückgesetzt wird, könnte das die Ursache sein.
    Grüße,
    Daniel

  6. #6
    Ich wäre ja froh wenn es das wäre.

    Die Daten liegen sequentiell im Speicher. K ist der Zähler für das kontinuierliche Array, i und j die für Zeilen und Spalten.
    Dabei gilt : k = i * image.size().width + j


    Das hier:

    Code:
    for( i = 0, k = 0 ; i < image.size().height ; i++ ) {
            for( j = 0 ; j < image.size().width ; j++, k++ ) {
                image_data[k][0] = image.at<double>(i, j);
                image_data[k][1] = 0.0;
            }
        }
    entspricht dem hier:

    Code:
        
    /* load images' data to FFTW input*/
        for( k = 0 ; k < size ; k++ ) {
            image_data[k][0] = ((double *) image.data)[k];
            image_data[k][1] = 0.0;
        }
    Der fancy image.at operator erspart einem nur den Pointer-Typecast und man kann direkt Pixel adressieren ohne sich über die Repräsentation im Speicher im klaren zu sein. (Deswegen muss hier auch explizit dach (double*) gecasted werden weil ich den Datentyp kenne.) Zweiteres ist halt schneller aber hässlicher.
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Naja, um ehrlich zu sein, ist die zweite weniger hässlich. Da sieht man wenigstens gleich was Sache ist.

    Jedenfalls stimmt irgend etwas in deinen Zeilen nicht. Entweder beim Zusammensetzen oder schon beim Ergebnis der FFT benutzt du deine Hilfsvariablen a bis d garnicht ? Wunderte mich gerade darüber, dass du dort im Kommentar schreibst, dass du die konjungiert-komplexe Form berechnen willst, es aber nicht tust. Oder bin ich blind?
    Grüße,
    Daniel

Ähnliche Themen

  1. OpenCV + VisualC++ Warum will es nicht funktionieren?
    Von Sebas im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 16.12.2011, 12:31
  2. OpenCV
    Von K.Hartmann im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 14
    Letzter Beitrag: 16.03.2010, 18:56
  3. OpenCV Vision Library IP Camera
    Von The KOR im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 2
    Letzter Beitrag: 07.08.2008, 11:39
  4. OpenCV Farbfläche finden Beispiel?
    Von robo.fr im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 28.12.2007, 09:47
  5. FEC-Implementierung auf uC?
    Von ThSteier im Forum Software, Algorithmen und KI
    Antworten: 4
    Letzter Beitrag: 03.10.2006, 17:07

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests