stationary_camera_self_calibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibration führt eine
Selbstkalibrierung einer stationären projektiven Kamera durch.
Stationär bedeutet hierbei, dass sich die Kamera nur um das
optische Zentrum drehen und dabei zoomen darf. Das optische Zentrum
darf also nicht verschoben werden. Projektive Kamera bedeutet
hierbei, dass als Kameramodell eine Lochkamera verwendet wird, deren
Abbildung durch eine projektive 3D-2D-Abbildung beschrieben werden
kann. Insbesondere können radiale Verzeichnungen nur modelliert
werden, wenn die Brennweite konstant bleibt. Falls die Kamera
signifikante radiale Verzeichnungen aufweist, sollten diese mit
change_radial_distortion_imagechange_radial_distortion_imageChangeRadialDistortionImagechange_radial_distortion_imageChangeRadialDistortionImageChangeRadialDistortionImage zumindest näherungsweise
beseitigt werden.
Das zugrundeliegende Kameramodell kann wie folgt beschrieben werden:
Hierbei ist x ein homogener 2D-Vektor,
X ein homogener 3D-Vektor und P
eine homogene 3x4 Projektionsmatrix. Die
Projektionsmatrix P lässt sich wie folgt
zerlegen:
Hierbei ist R eine 3x3
Rotationsmatrix und t ein inhomogener 3D-Vektor.
Diese beiden Daten beschreiben die Lage der Kamera im Raum. Diese
Konvention ist analog zu der bei
camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration verwendeten Konvention, d.h. für
R=I und t=0 zeigt
die x-Achse nach rechts, die y-Achse nach unten und die z-Achse nach
vorne von der Bildebene weg. K ist die
Kalibriermatrix der Kamera (die Kameramatrix), die sich wie folgt
beschreiben lässt:
Hierbei ist f die Brennweite der Kamera in Pixeln, a das
Seitenverhältnis der Pixel, s ein Faktor, der die Schrägstellung
der Bildachsen modelliert und (u,v) der Hauptpunkt der Kamera in
Pixeln. In dieser Konvention entspricht die x-Achse der
Spaltenachse und die y-Achse der Zeilenachse.
Da die Kamera stationär ist, kann man t=0
annehmen. Mit dieser Konvention sieht man leicht, dass die vierte
Koordinate des homogenen 3D-Vektors X keinen
Einfluss auf die Lage des projizierten 3D-Punktes hat. Somit kann
man die vierte Koordinate auch auf 0 setzen und sieht, dass
X als Punkt der unendlich fernen Ebene betrachtet
werden kann, und somit eine Richtung im Raum repräsentiert. Mit
dieser Konvention kann man die vierte Koordinate von
X auch weglassen und X als
inhomogenen 3D-Vektor betrachten, der als Richtungsvektor nur bis
auf Skalierung bestimmt werden kann. Somit kann die obige
Projektionsgleichung auch wie folgt geschrieben werden:
Wenn man zwei Bilder desselben Punktes mit einer stationären Kamera
aufnimmt, gilt folglich
Aus der obigen Gleichung können Bedingungsgleichungen für die
Kameraparameter auf zwei Arten hergeleitet werden. Zum einen kann
durch Elimination der Rotation eine Gleichung hergeleitet werden,
die die Kameramatrizen mit der projektive 2D-Abbildung zwischen zwei
Bildern verknüpft. Sei die projektive
Abbildung von Bild i nach Bild j. Dann gilt
Hierbei ist {(s,d)} wie beim linearen Verfahren die
durch MappingSourceMappingSourceMappingSourceMappingSourceMappingSourcemappingSource und MappingDestMappingDestMappingDestMappingDestMappingDestmappingDest gegebene Menge
von überlappenden Bildern. Dieses Verfahren wird von
stationary_camera_self_calibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibration für
EstimationMethodEstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod = 'nonlinear'"nonlinear""nonlinear""nonlinear""nonlinear""nonlinear" verwendet. Dabei
werden die Kameraparameter mit den Ergebnissen des linearen
Verfahrens initialisiert. Diese beiden Verfahren sind sehr schnell
und lieferen akzeptable Ergebnisse, wenn die projektiven
2D-Abbildungen hinreichend genau sind.
Dazu ist es unerlässlich, dass die Bilder keine radialen
Verzeichnungen aufweisen. Man sieht aber auch, dass die Bestimmung
der Kameraparameter unabhängig von der Bestimmung der Rotationen
erfolgt, und somit die möglichen Bedingungsgleichungen nicht
vollständig ausgeschöpft werden. Insbesondere kann man sehen, dass
nicht erzwungen wird, dass die Projektionen desselben Punktes nahe
beieinander liegen. Deswegen bietet
stationary_camera_self_calibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibration als drittes Verfahren
eine Bündelausgleichung an (EstimationMethodEstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod =
'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard"). Dabei werden sowohl die Kameraparameter
und Rotationen, als auch Richtungen im 3D (die oben angeführten
Vektoren X), die zur Minimierung des folgenden
Fehlers führen, in einer gemeinsamen Optimierung bestimmt:
Hierbei werden nur Terme berücksichtigt, für die die
rekonstruierte Richtung im Bild i
sichtbar ist. Als Startwerte für die Bündelausgleichung werden
Parameter verwendet, die aus den Ergebnissen des nichtlinearen
Verfahrens berechnet werden. Aufgrund der hohen Komplexität der
Minimierung dauert die Bündelausgleichung erheblich länger als die
beiden einfacheren Verfahren. Sie liefert aber auch signifikant
bessere Ergebnisse, und sollte deshalb bevorzugt werden.
In jedem der drei Verfahren kann festgelegt werden, welche
Kameraparameter bestimmt werden sollen. Die jeweils anderen
Kameraparameter werden auf einem festen Wert gehalten. Die
Festlegung erfolgt mit dem Parameter CameraModelCameraModelCameraModelCameraModelCameraModelcameraModel, der ein
Tupel von Werten enthält. CameraModelCameraModelCameraModelCameraModelCameraModelcameraModel muss immer den Wert
'focus'"focus""focus""focus""focus""focus" enthalten, der festlegt, dass die Brennweite f
bestimmt wird. Wenn CameraModelCameraModelCameraModelCameraModelCameraModelcameraModel den Wert
'principal_point'"principal_point""principal_point""principal_point""principal_point""principal_point" enthält, wird der Hauptpunkt (u,v) der
Kamera bestimmt, ansonsten wird er auf den Wert
(ImageWidthImageWidthImageWidthImageWidthImageWidthimageWidth/2,ImageHeightImageHeightImageHeightImageHeightImageHeightimageHeight/2) gesetzt. Wenn
CameraModelCameraModelCameraModelCameraModelCameraModelcameraModel den Wert 'aspect'"aspect""aspect""aspect""aspect""aspect" enthält, wird das
Seitenverhältnis a der Pixel bestimmt, ansonsten wird es auf 1
gesetzt. Wenn CameraModelCameraModelCameraModelCameraModelCameraModelcameraModel den Wert 'skew'"skew""skew""skew""skew""skew"
enthält, wird die Schrägstellung s der Bildachsen bestimmt,
ansonsten wird sie auf 0 gesetzt. Es sind nur bestimmte
Kombinationen dieser Parameter erlaubt: 'focus'"focus""focus""focus""focus""focus",
['focus', 'principal_point']["focus", "principal_point"]["focus", "principal_point"]["focus", "principal_point"]["focus", "principal_point"]["focus", "principal_point"], ['focus', 'aspect']["focus", "aspect"]["focus", "aspect"]["focus", "aspect"]["focus", "aspect"]["focus", "aspect"],
['focus', 'principal_point', 'aspect']["focus", "principal_point", "aspect"]["focus", "principal_point", "aspect"]["focus", "principal_point", "aspect"]["focus", "principal_point", "aspect"]["focus", "principal_point", "aspect"] und
['focus', 'principal_point', 'aspect', 'skew']["focus", "principal_point", "aspect", "skew"]["focus", "principal_point", "aspect", "skew"]["focus", "principal_point", "aspect", "skew"]["focus", "principal_point", "aspect", "skew"]["focus", "principal_point", "aspect", "skew"].
Bei der Verwendung von EstimationMethodEstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod =
'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" zur Bestimmung des Hauptpunkts ist es
möglich, weit vom Bildmittelpunkt entfernt liegende Schätzungen zu
bestrafen. Hierzu kann ein Sigma an den Parameter
'principal_point:0.5'"principal_point:0.5""principal_point:0.5""principal_point:0.5""principal_point:0.5""principal_point:0.5" angehängt werden. Wird kein Sigma
angegeben, so entfällt der Strafterm in der obigen Fehlerformel.
Die Anzahl der Bilder, die zur Kalibrierung verwendet werden, wird
in NumImagesNumImagesNumImagesNumImagesNumImagesnumImages übergeben. Aus der Anzahl der Bilder ergeben
sich Einschränkungen für das Kameramodell. So können bei der
Verwendung von nur zwei Bildern selbst bei der Annahme von
konstanten Kameraparametern nicht alle Parameter bestimmt werden.
Hier sollte sinnvollerweise die Schrägstellung der Bildachsen auf 0
gesetzt werden, indem 'skew'"skew""skew""skew""skew""skew"nicht in
CameraModelCameraModelCameraModelCameraModelCameraModelcameraModel aufgenommen wird. Falls
FixedCameraParamsFixedCameraParamsFixedCameraParamsFixedCameraParamsFixedCameraParamsfixedCameraParams = 'false'"false""false""false""false""false" verwendet wird,
können in keinem Fall alle Kameraparameter bestimmt werden. Hier
sollte ebenfalls mindestens die Schrägstellung der Bildachsen auf 0
gesetzt werden. Weiterhin ist zu beachten, dass das
Seitenverhältnis der Pixel nur korrekt bestimmt werden kann, wenn
mindestens ein Bild um die optische Achse (die z-Achse des
Kamerakoordinatensystems) gegenüber den anderen Bildern verdreht
aufgenommen worden ist. Falls dies nicht der Fall ist, sollte die
Bestimmung des Seitenverhältnisses unterdrückt werden, indem der
Wert 'aspect'"aspect""aspect""aspect""aspect""aspect"nicht in CameraModelCameraModelCameraModelCameraModelCameraModelcameraModel
aufgenommen wird.
Sind die Parameterwerte korrekt, dann liefert
stationary_camera_self_calibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibration den Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Lourdes Agapito, E. Hayman, I. Reid: „Self-Calibration of Rotating
and Zooming Cameras“; International Journal of Computer Vision;
vol. 45, no. 2; pp. 107--127; 2001.