Die Ergänzung zu OpenCV-Python-Tutorials "Kamerakalibrierung" wurde als separater Artikel umgeschrieben.
[fx, 0, cx; 0, fy, cy; 0, 0, 1] Es ist leicht zu übersehen, dass die Einheit der Brennweiten fx und fy Pixel ist. Das kamerazentrierte (cx, cy) [Pixel] entspricht nicht immer der halben Bildgröße. Es stimmt nur überein, wenn die Kamera richtig nach vorne zeigt. Die Achse vor der Kamera ist nicht immer orthogonal zur Achse, die die beiden Kameras der Stereokamera verbindet. Daher unterscheidet sich die Position des Fluchtpunkts, wenn sich das Motiv von der Kamera entfernt, von der Bildmitte. (Cx, cy) in der Mitte der Kamera ist die Koordinate des Fluchtpunkts.
Bei Kalibrierung mit einer Stereokamera Der Unterschied in der Position der Mitte der Kamera der linken und der rechten Kamera zeigt an, dass die Ausrichtungen der beiden Kameras nicht leicht parallel sind.
(cx-halbe Bildbreite) / fx Es scheint, dass es tan (θx) des Abweichungswinkels θx der Richtung der Kamera ist.
(Ich bin kein Experte, es tut mir leid, wenn ich einen Fehler mache.)
Bei der Stereoanpassung nach dem Erstellen eines Stereokameramoduls Dies muss durch Ausführen einer Kalibrierung + Verzerrungskorrektur für das Stereopaar bestätigt werden. Auf diese Weise können Sie visuell überprüfen, inwieweit die Verzerrungskorrektur erfolgreich ist. In Bereichen, in denen die Verzerrungskorrektur nicht erfolgreich ist, verschieben sich die Parallaxenwerte systematisch und geben nicht die richtigen Werte zurück.
calibrate.py Es ist ein Skript zur Kalibrierung + Verzerrungskorrektur. cv2.calibrateCamera() cv2.getOptimalNewCameraMatrix() cv2.undistort()
Befindet sich in (opencv_2-Verzeichnis) \ sources \ samples \ python2 calibrate.py Dies ist ein Skript, das nur Verzerrungen kalibriert und nicht korrigiert.
cv2.calibrateCamera()
Beispiel für eine Stereo-Gleichrichtung tom5760/stereo_vision
stereo_match.py Berechnet die Stereoanpassung aus dem Bild nach der Stereoparallelisierung. Es erzeugt einen Entfernungsunterschied und wandelt den Abstand um. Darin wird die Parallaxe wie folgt in 3D-Koordinaten konvertiert.
python
Q = np.float32([[1, 0, 0, -0.5*w],
[0,-1, 0, 0.5*h], # turn points 180 deg around x-axis,
[0, 0, 0, -f], # so that y-axis looks up
[0, 0, 1, 0]])
points = cv2.reprojectImageTo3D(disp, Q)
Die räumlichen Koordinaten lassen sich leicht in Dateien mit der Erweiterung .ply konvertieren. Resulting .ply file cam be easily viewed using MeshLab ( http://meshlab.sourceforge.net/ ) Da es geschrieben ist, kann es mit MeshLab wie folgt in 3D angezeigt werden.
Die Abbildung zeigt die in stereo_match.py generierten 3D-Koordinaten, die in MeshLab angezeigt werden.
Es war schwer zu bemerken, dass das Tuch hinter dem eine Tiefenänderung wie bei dieser 3D-Anzeige aufwies.
Es gibt eine Entdeckung, dass die 3D-Anzeige mit MeshLab usw. wie diesem erfolgt.
Die Konvertierung in das Ply-Dateiformat ist im obigen Python-Skript enthalten. Der folgende Code ist der Code des Teils, der die 3D-Daten (sowohl die 3D-Koordinaten jedes Punkts als auch die Farbe) für diesen Zweck ausgibt. Es ist sehr einfach zu schreiben, da es numpys savetxt () verwendet.
python
import numpy as np
import cv2
ply_header = '''ply
format ascii 1.0
element vertex %(vert_num)d
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
'''
def write_ply(fn, verts, colors):
verts = verts.reshape(-1, 3)
colors = colors.reshape(-1, 3)
verts = np.hstack([verts, colors])
with open(fn, 'w') as f:
f.write(ply_header % dict(vert_num=len(verts)))
np.savetxt(f, verts, '%f %f %f %d %d %d')
Geben Sie bei der Berechnung der Disparität den minimalen Disparitätswert und die Anzahl der Suchvorgänge an, damit die Disparität nur innerhalb eines bestimmten Bereichs der Anordnung und des Objekts gesucht wird. Damit ・ Es ist weniger wahrscheinlich, dass eine falsche Parallaxe auftritt. ・ Die Rechenzeit wird reduziert. Es führt zu.
Liste der Beispielquellen für OpenCV 2.4.0 (Beispiele / cpp) https://github.com/YusukeSuzuki/opencv_sample_list_jp/blob/master/samples_cpp.rst Es ist auch nützlich, Beispielprogramme zu lesen, die sich auf Stereo in C ++ beziehen. 3calibration.cpp calibration.cpp calibration_artificial.cpp stereo_calib.cpp stereo_match.cpp
Der auf diese Weise erfasste Disparitätswert wird tendenziell durch Rauschen beeinflusst. In OpenCV3.1 kann der Einfluss des Rauschens mithilfe der folgenden Funktion reduziert werden. cv::ximgproc::DisparityWLSFilter Class Reference Es sollte beachtet werden, dass OpenCV3.1 eine andere Funktionsschnittstelle als das OpenCV2.4-System hat, aber es lohnt sich, es zu versuchen.
Kalibrierung der Fischaugen-Kamera mit OpenCV
Verwenden Sie die Kalibrierungsfunktion cv :: fisheye :: kalibrieren () für Fischaugen-Kameras, um die Kameraparameter abzurufen. Die Funktionsbeschreibung finden Sie auf der folgenden Seite. http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#fisheye-calibrate
Ich habe im [Python-Dokumentationsserver] festgestellt, dass die Kalibrierung der Fischaugen-Kamera nicht in cv2 enthalten ist. Geben Sie in diesem Fall die Verarbeitung in Python und den Code in C ++ auf.
Nur die Stereo-Parallelisierung erfordert die Funktionalität des cv :: fisheye-Namespace. Nachdem die Stereo-Parallelisierung abgeschlossen ist, müssen Sie lediglich das Parallaxenbild wie zuvor ableiten.
Der folgende Artikel enthält den Code für den Fisheye-Fall. Beispielcode für die OpenCV-Kamerakalibrierung
Omnidirectional Camera Calibration Mit einer omnidirektionalen Kamera, die einen größeren Winkel als eine Fischaugen-Kamera hat, wird die Stereo-Parallelisierung schwieriger.
YouTube OpenCV GSoC 2015 Omnidirectional Camera Calibration
“Omnidirectional Cameras Calibration and Stereo 3D Reconstruction” – opencv_contrib/ccalib module (Baisheng Lai, Bo Li)
Davide Scaramuzza Omnidirectional Camera pdf
Es gibt verschiedene Methoden für Fischaugen-Kameras, da der relationale Ausdruck zwischen R und θ unterschiedlich ist. Bitte beziehen Sie sich auf die folgende URL. Sie müssen überprüfen, welche der folgenden Methoden vom Quellcode in opencv_contrib unterstützt wird.
Äquidistanzprojektion Equisolid Angle Projection Orthographische Projektion
Unterschied in der Projektionsmethode
[Konventionelle Fischaugenlinse (H180) Neu untersuchte Fischaugenlinse (TY180)] (http://www.mvision.co.jp/mcm320fish.html)
[Design Wave MAGAZIN] Ausgabe September 2008 [Magazin]](http://books.rakuten.co.jp/rb/7848928/) [Schwerpunktprojekt] Forschung zu Fischaugenobjektiven, die in Autos eingebaut wurden - Der Vergleich verschiedener Projektionsmethoden und gegenseitiger Konvertierungsmethoden ist ein 15-seitiger Artikel. Die Beschreibung des Verfahrens ist detailliert, und das Verfahren zum Konvertieren des Erscheinungsbilds des Bildes zwischen den Verfahren wird ebenfalls beschrieben.
Abschließend ist es besser, das Kreisgitter zu verwenden. Der Grund ist einfach: Das Kreisgitter hat eine höhere Genauigkeit bei der Berechnung der Koordinaten der Merkmalspunkte in Schritt 2. Da eine Ellipse (einschließlich eines Kreises) die Eigenschaft hat, eine Ellipse zu sein, selbst wenn sie aus einem Winkel betrachtet wird, können die Koordinaten des Merkmalspunkts genau erhalten werden, indem der Schwerpunkt als Merkmalspunkt verwendet wird. Andererseits ist im Fall eines quadratischen Gitters der Merkmalspunkt der Schnittpunkt von geraden Linien. Aus einem Winkel betrachtet ist die Form des Quadrats verzerrt und es ist nicht möglich, stabile Koordinaten zu erhalten.
[cv2.findCirclesGridDefault(image, patternSize[, centers[, flags]]) ] (http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#findcirclesgrid)
garbage in garbage out Stereo Matching ist eine Messung. Gute Ergebnisse werden nur erzielt, wenn das Bild in einem für die Messung geeigneten Zustand aufgenommen wurde. Richten Sie die Helligkeit der linken und rechten Kamera aus (stellen Sie die automatische Verstärkung aus). Stellen Sie das Bild in den richtigen Helligkeitsbereich (extrem hell, verdunkelt). Stellen Sie sicher, dass das Bild Texturänderungen aufweist (vermeiden Sie zu flache Bilder). Diese Dinge programmieren nicht, aber Sie können sie nicht ignorieren und gute Ergebnisse erzielen. Ich werde es wiederholen. Stereo Matching ist eine Messung. Die Qualität der Eingangsdaten für die Stereoanpassung ändert sich abhängig von den Motivbedingungen bei der Aufnahme und den Aufnahmebedingungen der Kamera. Egal wie gut das Programm selbst ist, wenn die Qualität der Eingabedaten schlecht ist, werden nur schlechte Ergebnisse erzielt. Es ist "Müll in Müll raus".
Das Verständnis von Stereokameras wird stark durch das Experiment der 3D-Messung beeinflusst, das sich ein wenig von anderen Bildverarbeitungs- und Bilderkennungsteilen unterscheidet. Selbst diejenigen, die sich mit normaler Bildverarbeitung auskennen, können es schwierig finden, die große Anzahl von Argumenten von Stereo-Matching-Funktionen zu beherrschen.
[Computer Vision] Epipolare Geometrie mit Katzen gelernt Ist leicht zu verstehen und zu empfehlen.
So kalibrieren Sie die Kamera mit Python + OpenCV → Stereo-Matching → Messen der Tiefe http://russeng.hatenablog.jp/entry/2015/07/02/080515
—— Wiederherstellung von 3D-Bildern in mehreren Ansichten und Zusammenfassung der Stereovision http://qiita.com/sobeit@github/items/d419ea39b06e43e6200f
Ist auch leicht verständlich geschrieben.
slideshare Stefano Mattoccia「 Stereo Vision: Algorithms and Applications」 Stefano Mattoccia DEIS University of Bologna 214 pages Ist eine ziemlich detaillierte Folie. Es ist schwer, eine so detaillierte Erklärung in einem Bilderkennungsbuch zu finden.
So erstellen Sie eine Stereokamera
Semi-Global Matching mit Jetson TK1
Hochpräzise Kalibrierung der Fischaugen-Linsenkamera mit Streifenmuster http://www.iim.cs.tut.ac.jp/~kanatani/papers/fisheyecalib.pdf
Es ist bekannt, dass Unterschiede in den Helligkeitswerten die Ergebnisse der Stereoanpassung verschlechtern. Als Gegenmaßnahme dagegen wird eine Änderung des Histogramms in Betracht gezogen. [Suppression for Luminance Difference of Stereo Image-Pair Based on Improved Histogram Equalization ] http://onlinepresent.org/proceedings/vol6_2012/17.pdf
Vorteile der CENSUS-Konvertierung • Die Helligkeitswerte werden nicht direkt verglichen, daher ist sie gut für Beleuchtungsschwankungen geeignet. - Im Vergleich zur relativen Beziehung zum Zentrum. • Stark gegen Rauschen. - Binärwerte werden verglichen, sodass das winzige Rauschen nur wenig reflektiert wird • Stabile Zuordnung in Bereichen mit wenigen Mustern - Effekt der Hervorhebung von Kanten (Mustern) aufgrund von Effekten wie Unterschied vom Zentrum → Differenzierung http://www.slideshare.net/FukushimaNorishige/popcnt
Nachtrag
Recommended Posts