
Aktuelle Entwicklungen, Trends und Fachanalysen aus Bau, Technik und digitaler Medienwelt – inklusive Updates zu Drohneneinsätzen, Solarwartung und Weblösungen.
Neueste Entwicklungen und Fachbeiträge für Bauunternehmen, Ingenieurbüros und Dienstleister im Medienbereich.

Vodafone und Flynex haben DroNet Hub präsentiert – eine Plattform zur Planung, Genehmigung und KI-gestützten Analyse von Drohnenflügen, die den kommerziellen Drohneneinsatz in Deutschland effizienter macht.

Eine aktuelle Studie zeigt, dass beispielsweise Fotogrammetrie-Drohnen bei rund 423 Vermessungsprofis verbreitet sind – allerdings bestehen Herausforderungen bei Recht, Kosten und Technik, speziell in Deutschland und der EU.

Der Bundesverband Luft- und Raumfahrt kritisiert Deutschlands Verzögerung in moderner Drohnentechnologie und fordert eine aktive Beschaffungspolitik zur Stärkung der Sicherheits- und Verteidigungsfähigkeit.

Laut einem Beitrag auf Lokaler Mittelstand eröffnen Drohnen im Zusammenspiel mit Sensorik und GPS-Traktoren mittelständischen Betrieben neue Effizienz- und Sichtbarkeitschancen – insbesondere in Landwirtschaft und Produktion, wo hochauflösende Luftbilder detaillierte Analysen ermöglichen.
30 November 2025
Maurice Lübeck
Sehr grob besteht eine typische Pipeline aus:
Im Folgenden bauen wir das Schritt für Schritt mathematisch auf.
Weltkoordinaten (globales Bezugssystem):
$$ X_w = \begin{pmatrix} X_w \\ Y_w \\ Z_w \end{pmatrix} $$
Kamerakoordinaten (Ursprung im Kamerazentrum):
$$ X_c = \begin{pmatrix} X_c \\ Y_c \\ Z_c \end{pmatrix} $$
Konvention (OpenCV-typisch):
Extrinsics transformieren Welt → Kamera:
$$ X_c = R X_w + t $$
mit
In homogenen Koordinaten:
$$ \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} = \begin{pmatrix} R & t \end{pmatrix} \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix} $$
Pinhole-Modell: Die Bildebene liegt bei $Z = 1$ vor der Kamera.
Ein 3D-Punkt im Kameraraum $X_c = (X, Y, Z)^T$ wird projiziert zu:
$$ x_n = \frac{X}{Z}, \qquad y_n = \frac{Y}{Z} $$
$(x_n, y_n)$ nennt man normierte Bildkoordinaten (Normalraum).
Bildlich: Vom Kamerazentrum aus geht ein Strahl durch den Punkt $(X,Y,Z)$ und schneidet die Ebene $Z=1$. Dieser Schnittpunkt hat die Koordinaten $(x_n, y_n, 1)$.
Der Sensor hat Pixel, also skalieren wir in Pixelkoordinaten. Die intrinsische Matrix ist:
$$ K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} $$
mit
Übergang zu Pixeln:
$$ \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = K \begin{pmatrix} x_n \\ y_n \\ 1 \end{pmatrix} = \begin{pmatrix} f_x x_n + c_x \\ f_y y_n + c_y \\ 1 \end{pmatrix} $$
Also ganz konkret:
$$ u = f_x x_n + c_x, \qquad v = f_y y_n + c_y $$
Die komplette Kette Welt → Kamera → Normalraum → Pixel kann als eine 3×4-Matrix geschrieben werden:
$$ \lambda \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = K [R \mid t] \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix} = P \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix} $$
mit
$$ P = K [R \mid t] \in \mathbb{R}^{3 \times 4} $$
$\lambda$ ist ein homogener Skalierungsfaktor. Nach der Multiplikation normieren wir:
$$ (u, v, 1)^T = \frac{1}{w'} (u', v', w')^T = \frac{1}{w'} \, P \, \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix} $$
Gegeben:
3D-Punkt:
$$ X = \begin{pmatrix} 1 \\ 1 \\ 5 \end{pmatrix} $$
Normierte Koordinaten:
$$ x_n = \frac{1}{5} = 0.2, \qquad y_n = \frac{1}{5} = 0.2 $$
Pixelprojektion:
$$ u = 1000 \cdot 0.2 + 960 = 1160 $$ $$ v = 1000 \cdot 0.2 + 540 = 740 $$
Ergebnis: Der Punkt erscheint bei Pixel $(1160, 740)$.
Reale Linsen sind nicht ideal. OpenCV modelliert typischerweise:
Ausgangspunkt sind die normierten Koordinaten $(x_n, y_n)$.
Radius zum Bildzentrum:
$$ r^2 = x_n^2 + y_n^2 $$
Radial verzerrte Koordinaten:
$$ x_r = x_n \left(1 + k_1 r^2 + k_2 r^4 + k_3 r^6 + \dots \right) $$ $$ y_r = y_n \left(1 + k_1 r^2 + k_2 r^4 + k_3 r^6 + \dots \right) $$
Interpretation:
Wenn Linse/Sensor schief sitzt oder dezentriert ist:
$$ x_t = 2 p_1 x_n y_n + p_2 (r^2 + 2 x_n^2) $$ $$ y_t = p_1 (r^2 + 2 y_n^2) + 2 p_2 x_n y_n $$
Gesamtverzerrte Normalkoordinaten:
$$ \tilde{x} = x_r + x_t, \qquad \tilde{y} = y_r + y_t $$
Anschließend kommen wieder die Intrinsics:
$$ u = f_x \tilde{x} + c_x, \qquad v = f_y \tilde{y} + c_y $$
Viele 3D-Pipelines (SfM, NeRF, Gaussian Splatting) arbeiten lieber mit einem einfachen Pinhole-Modell ohne Verzerrung. Deshalb:
Ergebnis:
PINHOLE oder SIMPLE_PINHOLE in COLMAPUm 3D aufzubauen, brauchen wir Bildpunkte, die sich in vielen Bildern wiederfinden. Typischer Ansatz: SIFT.
$$ L(x,y,\sigma) = G(x,y,\sigma) * I(x,y) $$
$$ G(x,y,\sigma) = \frac{1}{2\pi\sigma^2} \exp\left( -\frac{x^2 + y^2}{2\sigma^2} \right) $$
$$ D(x,y,\sigma) = L(x,y,k\sigma) - L(x,y,\sigma) $$
Lokale Maxima/Minima in $(x,y,\sigma)$ sind SIFT-Keypoints.
Für jeden Keypoint:
In Bild A gibt es Deskriptoren $d_i^A \in \mathbb{R}^{128}$ und in Bild B $d_j^B \in \mathbb{R}^{128}$.
Distanz:
$$ \mathrm{Dist}(d_i^A, d_j^B) = \lVert d_i^A - d_j^B \rVert_2 $$
Für jeden Deskriptor in A:
So entstehen viele Punktkorrespondenzen
$$ x_i^A \leftrightarrow x_j^B, \quad x = (u, v, 1)^T. $$
Seien $x$ und $x'$ korrespondierende Pixelpunkte in zwei Bildern:
$$ x = \begin{pmatrix} u \\ v \\ 1 \end{pmatrix}, \quad x' = \begin{pmatrix} u' \\ v' \\ 1 \end{pmatrix} $$
Im idealen Fall gilt die Epipolargeometrie:
$$ x'^T F x = 0 $$
$F \in \mathbb{R}^{3 \times 3}$ hat Rang 2 und beschreibt die Beziehung zwischen den beiden Bildern ohne Intrinsics.
Zu einem Punkt $x$ in Bild 1 gehört in Bild 2 eine Epipolarlinie
$$ l' = F x $$
und der korrespondierende Punkt $x'$ muss auf $l'$ liegen:
$$ x'^T l' = 0. $$
Wenn Intrinsics $K, K'$ bekannt sind, normalisiert man die Bildpunkte:
$$ \hat{x} = K^{-1} x, \qquad \hat{x}' = K'^{-1} x' $$
Dann gilt:
$$ \hat{x}'^T E \hat{x} = 0 $$
mit
$$ E = K'^T F K $$
Struktur von $E$:
$$ E = [t]_\times R $$
$$ E = U \Sigma V^T $$
Man erzwingt
$$ \Sigma = \mathrm{diag}(1, 1, 0) $$
Mit einer Hilfsmatrix
$$ W = \begin{pmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix} $$
erhält man zwei Rotationen:
$$ R_1 = U W V^T, \qquad R_2 = U W^T V^T $$
Die Translation (bis auf Skala) ist
$$ t = U \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix} $$
Damit ergeben sich 4 mögliche Kombinationen:
Die richtige Kombination ist die, bei der die triangulierten 3D-Punkte vor beiden Kameras liegen ($Z > 0$ in beiden Kamerasystemen).
Gegeben:
Gesucht: 3D-Punkt $X = (X, Y, Z, 1)^T$.
Man schreibt $P_i$ zeilenweise als
$$ P_i = \begin{pmatrix} p_{1,i}^T \\ p_{2,i}^T \\ p_{3,i}^T \end{pmatrix} $$
Aus $x_i \sim P_i X$ folgen zwei Gleichungen:
$$ (u_i p_{3,i}^T - p_{1,i}^T) X = 0 $$ $$ (v_i p_{3,i}^T - p_{2,i}^T) X = 0 $$
Für zwei Kameras erhält man 4 Zeilen → Matrix $A \in \mathbb{R}^{4 \times 4}$ mit
$$ A X = 0 $$
$$ A = U \Sigma V^T $$
Gesucht ist der Vektor $X$, der zum kleinsten Singulärwert gehört → letzte Spalte von $V$.
Homogene Normierung:
$$ X = \begin{pmatrix} X \\ Y \\ Z \\ W \end{pmatrix} \;\Rightarrow\; \tilde{X} = \begin{pmatrix} X/W \\ Y/W \\ Z/W \end{pmatrix} $$
$\tilde{X}$ ist der kartesische 3D-Punkt.
Intrinsics:
$$ K = \begin{pmatrix} 1000 & 0 & 960 \\ 0 & 1000 & 540 \\ 0 & 0 & 1 \end{pmatrix} $$
Kamera 1: $R_1 = I,\; t_1 = 0$
$$ P_1 = K [I \mid 0] $$
Kamera 2: um 1 m nach rechts verschoben
$$ C_2 = (1,0,0)^T,\quad t_2 = -C_2 = (-1,0,0)^T,\quad P_2 = K [I \mid t_2] $$
Wahrer 3D-Punkt:
$$ X_\text{true} = \begin{pmatrix} 2 \\ 1 \\ 5 \\ 1 \end{pmatrix} $$
Projektion in Kamera 1 führt zu $x_1 = (1160, 740, 1)^T$, in Kamera 2 zu $x_2 = (960, 740, 1)^T$.
Aufbau von $A$ mit diesen Werten und $P_1, P_2$ → SVD liefert
$$ X_\text{est} \approx (2, 1, 5, 1)^T $$
Der Fehler ist numerisch praktisch 0.
Gemessene Pixel sind nicht perfekt:
$$ u_\text{mess} = u_\text{true} + \Delta u, \qquad v_\text{mess} = v_\text{true} + \Delta v $$
$$ \Delta u, \Delta v \sim \mathcal{N}(0, \sigma^2) $$
Der Tiefenfehler hängt stark ab von:
Für jeden 3D-Punkt $X_j$ gibt es viele Beobachtungen:
$$ x_{ij} = \begin{pmatrix} u_{ij} \\ v_{ij} \end{pmatrix} $$
in Kamera $i$.
Pose der Kamera $i$:
$$ \theta_i = (R_i, t_i, K_i) $$
Projektionsfunktion:
$$ \pi(\theta_i, X_j) = \begin{pmatrix} u_{ij}^{\text{pred}} \\ v_{ij}^{\text{pred}} \end{pmatrix} $$
Gemessener Pixel:
$$ x_{ij}^{\text{obs}} = \begin{pmatrix} u_{ij} \\ v_{ij} \end{pmatrix} $$
Fehler:
$$ e_{ij} = x_{ij}^{\text{obs}} - \pi(\theta_i, X_j) $$
Alle Kamera-Parameter $\{\theta_i\}$ und 3D-Punkte $\{X_j\}$ müssen optimiert werden:
$$ \min_{\{\theta_i\}, \{X_j\}} \sum_{i,j} \rho\left( \lVert e_{ij} \rVert^2 \right) $$
$\rho$ ist eine robuste Verlustfunktion (z. B. Huber), damit Ausreißer das Ergebnis nicht zerstören.
Das Problem wird typischerweise mit Levenberg-Marquardt und Schur-Komplement-Tricks gelöst (z. B. im Ceres Solver).
Ergebnis:
Das ist die sparse Point Cloud, die man am Ende sieht.
Folge:
Deshalb machen viele Pipelines bei Video:
Geometrisch schneiden sich die Projektionsstrahlen aller Kameras nicht perfekt (wegen Rauschen). Bundle Adjustment sucht den 3D-Punkt, der zu allen Beobachtungen am besten passt → der „Fehlerkegel“ wird kleiner.
Am Ende bekommst du: