Dokumentation
Aufzählungen | Aufzählungswerte | Funktionen
Funktionen für Stereo Berechnungen

Stereo-Funktionen zur Berechnung von korrespondierenden Punktepaaren. Mehr ...

Aufzählungen

Funktionen


Ausführliche Beschreibung

Stereo-Funktionen zur Berechnung von korrespondierenden Punktepaaren.

In dieser Gruppe befinden sich alle Funktionen, die für die Berechnung von korrespondierenden Punktepaaren benötigt werden. Von besonderer Bedeutung ist die Funktion zur Berechnung von Punkten auf einer Epipolarlinie calcEpiLine() und die Funktionen zur Korrelationsberechnung. Dabei kann die Berechnung des korrespondierenden Punktes sowohl in einem Schritt mit der Funktion calculateMatching(), als auch in 3 Schritten mit den Funktionen correlate(), calculateMaximum() und calculatePosition() erfolgen.

dot_inline_dotgraph_4.png

Zur Suche von Punkten mit hohem Informationsgehalt(Kantenpunkte) als Ausgangspunkt für die Korrelationsberechnung kann die Funktion searchStereoFeaturesEdges() verwendet werden. Für eine optimale Positionierung der Epipolarlienen kann mit der Funktion calculateOffset() der mittlere Offset zwischen den Merkmalen beider Bilder berechnet werden. Mit der Funktion filterPoints() werden Ausreißer aus den korrespondierenden Punktepaaren entfernt.


Dokumentation der Aufzählungstypen

Aufzählungstyp für den Korrelationsalgorithmus.

Aufzählungswerte:
mptCorrCross 

Kreuzkorrelation.

mptCorrCrossZeroMean 

Mitelwertfreie Kreuzkorrelation.

mptCorrMoravec 

Korrelation nach Moravec.

mptCorrPearson 

Korrelation nach Pearson.


Dokumentation der Funktionen

int calcEpiLine ( MPTPoint2i  point,
int  imageWidth,
int  offset,
int  length,
int  step,
int  windowSize,
MPTPoint2i epiPoints,
int *  pointCount 
)

Berechnet eine horizontale Epipolarlinie.

Diese Funktion berechnet die Punkte auf einer horizontalen Epipolarlinie im Korrespondenzbild für einen vorgegebenen Punkt im Basisbild. Die Position und die Länge der Epipolarlinie sind frei wählbar. Die Epipolarlinie enthält maximal 2 * length/step + 1 Punkte, die symmetrisch um den Startpunkt verteilt sind. Der Startpunkt im Korrespondenzbild kann entlang der Horizontalen gegenüber dem Punkt im Basisbild verschoben werden. Zur Beschleunigung der Korrelationsberechnung sollte die Epipolarlinie nur so viele Punkte enthalten wie für eine sichere Bestimmung der korrespondierenden Punkte benötigt werden. Daher ist es auch möglich die Schrittweite bei der Berechnung der Epipolarpunkte entlang der Epipolarlinie zu variieren. Durch die Angabe der Bildbreite und der Größe des Korrelationsfensters wird sichergestellt, dass die Epipolarlinie keine Punkte enthält, die außerhalb des Bildes oder zu nah am Rand liegen.

Im ersten Aufruf sollte der Paramerer epiPoints auf NULL gesetzt werden, dann berechnet diese Funktion nur die Anzahl der Punkte. Beim zweiten Aufruf kann der Zielspeicher übergeben werden, dann werden die Punkte tatsächlich berechnet.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_MEMORY_TO_SMALLwenn der Speicherbereich zu klein für den Ergebnisvektor ist
Parameter:
pointPunkt im Basisbild zu dem die Epipolarlinie berechnet werden soll
imageWidthBildbreite in Pixeln
offsetVerschiebung des Startpunktes im Korrespondenzbild in Pixeln
lengthLänge der Epipolarlinie an jeder Seite des Startpunktes in Pixeln
stepSchrittweite der Epipolarpunkte entlang der Epipolarlinie in Pixeln
windowSizeGröße des Korrelationsfensters in Pixeln
epiPointsPunkte der Epipolarlinie, wenn NULL wird nur die Anzahl der Punkte berechnet.
pointCountAnzahl der berechneten Epipolarpunkte (maximal 2 * length/step + 1).
int calculateMatching ( const MPTImage img,
const MPTImage imgRef,
MPTPoint2i  point,
const MPTPoint2i epiPoints,
int  pointCount,
int  windowSize,
int  smooth,
double  thresh,
enum MPTenCoorType  corrType,
MPTPoint2d match 
)

Berechnet einen Korrespondenzpunkt.

Diese Funktion berechnet die Position des Korrespondenzpunktes entlang der Epipolarpunkte. Dazu wird ein Bildausschnitt innerhalb des Korrelationsfensters im Basisbild mit den Bildausschnitten entlang der Epipolarpunkte im Korrespondenzbild verglichen. Die berechneten Korrelationskoeffizienten liegen zwischen -1 und 1. Dabei bedeutet -1: negativer lineaer Zusammenhang, 0: kein lineaer Zusammenhang, 1: positiver lineaer Zusammenhang. Für die Berechnung der Korrelation stehen folgende Verfahren zur Verfügung: Kreuzkorrelation, Mitelwertfreie Kreuzkorrelation, Korrelation nach Moravec und Korrelation nach Pearson. Danach wird die subpixelgenaue Position des größten Korrelationskoeffizienten bestimmt. Dazu werden die Korrelationskoeffizienten mit einem Boxfilter geglättet und die Position des größten Korrelationskoeffizienten ausgewählt. Ist dieser größer als der vorgegebene Schwellwert, wird die exakte Position unter Berücksichtigung der benachbarten Werte berechnet.

Es wird nicht geprüft, ob die übergebenen Pixel-Koordinaten gültig sind und ob das Korrelationsfenster evtl. den Bildrand überragt. Dafür ist der Aufrufer verantwortlich.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_CORRELATIONwenn kein gültiges Maximum gefunden wurde
MPT_ERR_IMAGE_GRAY_EXPECTEDwenn das Quellbild nicht im Graustufenformat vorliegt
MPT_ERR_IMAGE_TYPE_MISMATCHwenn das Zielbild nicht im Graustufenformat vorliegt
MPT_ERR_IMAGE_DIM_MISMATCHwenn die Auflösungen von Quell- und Zielbild nicht identisch sind
Parameter:
imgBilddaten Basisbild
imgRefBilddaten Korrespondenzbild
pointPunkt zu dem die Korrelation berechnet werden soll.
epiPointsPunkte der Epipolarlinie
pointCountAnzahl der Epipolarpunkte
windowSizeGröße des Korrelationsfensters in Pixeln
smoothAnzahl der Werte über die gemittelt werden soll
threshMindestwert des Korrelationskoeffizienten [-1, 1] (-1: negativer lineaer Zusammenhang, 0: kein lineaer Zusammenhang, 1: positiver lineaer Zusammenhang). Liegt der höchste Wert der Korrelationsberechnung unterhalb dieses Schwellwerts, ist match ungültig und diese Funktion gibt MPT_ERR_CORRELATION zurück.
corrTypeZu benutzender Korrelationsalgorithmus.
matchBerechneter optimaler Korrespondenzpunkt
int calculateMaximum ( const double *  corrValues,
int  pointCount,
int  smooth,
double  thresh,
double *  maxIndex 
)

Berechnen der subpixelgenauen Position des größten Korrelationskoeffizienten.

Diese Funktion sucht die subpixelgenaue Position des größten Korrelationskoeffizienten. Dazu werden die Korrelationskoeffizienten mit einem Boxfilter geglättet und die Position des größten Korrelationskoeffizienten ausgewählt. Ist dieser größer als der vorgegebene Schwellwert, wird die exakte Position unter Berücksichtigung der benachbarten Werte berechnet.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_CORRELATIONwenn kein gültiges Maximum gefunden wurde
Parameter:
corrValuesKorrelationswerte
pointCountAnzahl Korrelationswerte
smoothAnzahl der Werte über die gemittelt werden soll
threshMindestwert des Korrelationskoeffizienten [-1, 1] (-1: negativer lineaer Zusammenhang, 0: kein lineaer Zusammenhang, 1: positiver lineaer Zusammenhang)
maxIndexPosition des größten Korrelationskoeffizienten
MPT_API int calculateOffset ( const MPTImage img,
const MPTImage imgRef,
int *  offset 
)

Berechnet den horizontalen Offset zwischen den Merkmalen der Bilder.

Diese Funktion berechnet den mittleren horizontalen Offset zwischen den Kanten der Objekte in den beiden Bildern. Dieser Offset kann für eine Optimierung der Berechnung der Epipolarlinien genutzt werden.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_ALG_INTERNAL_CALCwenn ein Fehler bei der Berechnung aufgetreten ist
MPT_ERR_IMAGE_GRAY_EXPECTEDwenn das Quellbild nicht im Graustufenformat vorliegt
MPT_ERR_IMAGE_TYPE_MISMATCHwenn das Zielbild nicht im Graustufenformat vorliegt
MPT_ERR_IMAGE_DIM_MISMATCHwenn die Auflösungen von Quell- und Zielbild nicht identisch sind
Parameter:
imgBilddaten
imgRefBilddaten Korrespondenzbild
offsetOffset zwischen den Merkmalen der Bilder
int calculatePosition ( const MPTPoint2i epiPoints,
int  pointCount,
double  maxIndex,
MPTPoint2d point 
)

Berechnet die Position des Korrespondenzpunktes.

Diese Funktion berechnet die Position des Korrespondenzpunktes aus den Epipolarpunkten und der Position des maximalen Korrelationskoeffizienten entlang der Epipolarpunkte.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_POSITIONwenn der größte Korrelationswert außerhalb der Epipolarpunkte liegt
Parameter:
epiPointsPunkte der Epipolarlinie
pointCountAnzahl der Epipolarpunkte
maxIndexPosition des größten Korrelationskoeffizienten
pointKorrespondenzpunkt
int correlate ( const MPTImage img,
const MPTImage imgRef,
MPTPoint2i  point,
const MPTPoint2i epiPoints,
int  pointCount,
int  windowSize,
enum MPTenCoorType  corrType,
double *  corrValues 
)

Berechnen der Korrelation entlang der Epipolarlinie.

Diese Funktion berechnet die Korrelationskoeffizienten entlang der Epipolarlinie. Dazu wird ein Bildausschnitt innerhalb des Korrelationsfensters im Basisbild mit den Bildausschnitten entlang der Epipolarpunkte im Korrespondenzbild verglichen. Die Korrelationskoeffizienten liegen zwischen -1 und 1. Dabei bedeutet -1: negativer lineaer Zusammenhang, 0: kein lineaer Zusammenhang, 1: positiver lineaer Zusammenhang. Für die Berechnung der Korrelation stehen folgende Verfahren zur Verfügung: Kreuzkorrelation, Mitelwertfreie Kreuzkorrelation, Korrelation nach Moravec und Korrelation nach Pearson.

Es wird nicht geprüft, ob die übergebenen Pixel-Koordinaten gültig sind und ob das Korrelationsfenster evtl. den Bildrand überragt. Dafür ist der Aufrufer verantwortlich.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_MEMORY_TO_SMALLwenn der Speicherbereich zu klein für den Ergebnisvektor ist
MPT_ERR_IMAGE_GRAY_EXPECTEDwenn das Quellbild nicht im Graustufenformat vorliegt
MPT_ERR_IMAGE_TYPE_MISMATCHwenn das Zielbild nicht im Graustufenformat vorliegt
MPT_ERR_IMAGE_DIM_MISMATCHwenn die Auflösungen von Quell- und Zielbild nicht identisch sind
Parameter:
imgBilddaten Basisbild
imgRefBilddaten Korrespondenzbild
pointPunkt zu dem die Korrelation berechnet werden soll
epiPointsPunkte der Epipolarlinie
pointCountAnzahl der Epipolarpunkte
windowSizeGröße des Korrelationsfensters in Pixeln. Muss ungerade sein.
corrTypeZu benutzender Korrelationsalgorithmus
corrValuesErgebnis der Korrelationswerte. Es muss ausreichend Speicher für pointCount Werte vorhanden sein.
int filterPoints ( const MPTPoint2i points,
const MPTPoint2d pointsRef,
int *  pointCount,
MPTPoint2i filteredPoints,
MPTPoint2d filteredRefPoints 
)

Ausdünnen der gefundenen Korrespondenzpunkte.

Diese Funktion entfernt Ausreißer aus den gefundenen Korrespondenzpunkten. Dazu ist es erforderlich, dass die Punkte durch die Funktion searchStereoFeaturesEdges bereits nach Objekten sortiert sind.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_MEMORY_TO_SMALLwenn der Speicherbereich zu klein für den Ergebnisvektor ist
Parameter:
pointsPunkte
pointsRefKorrespondenzpunkte
pointCountAnzahl der Punkte, danach Anzahl der ausgedünnten Punkte
filteredPointsAusgedünnte Punkte
filteredRefPointsAusgedünnte Korrespondenzpunkte
int searchStereoFeaturesEdges ( const MPTImage img,
MPTPoint2i featurePoints,
int *  pointCount 
)

Sucht Kanten im Bild als Ausgangspunkte für Stereo Berechnungen.

Diese Funktion sucht im Bild nach Kanten und sortiert die gefundenen Kantenpunkte entsprechend ihrer Nachbarschaft und ihrer Zugehörigkeit zu einzelnen Objekten.

Im ersten Aufruf kann der Paramerer featurePoints auf NULL gesetzt werden, dann übergibt diese Funktion nur die Anzahl der berechneten Punkte. Beim zweiten Aufruf kann der Zielspeicher übergeben werden, dann werden auch die Punkte übergeben.

Rückgabewerte:
MPT_NO_ERRORwenn kein Fehler auftrat
MPT_ERR_MEMORY_TO_SMALLwenn der Speicherbereich zu klein für den Ergebnisvektor ist
MPT_ERR_ALG_INTERNAL_CALCwenn ein Fehler bei der Berechnung aufgetreten ist
MPT_ERR_IMAGE_GRAY_EXPECTEDwenn das Quellbild nicht im Graustufenformat vorliegt
Parameter:
imgBilddaten
featurePointsgefundene Kantenpunkte
pointCountAnzahl der gefundenen Kantenpunkte


Copyright © 2012 Fraunhofer IFF
Version 1.0