\chapter{Mosaik aus Luftbildern erstellen}
\label{mosaicking_aerial_images_de}



\subsubsection{Aufgabenstellung}

Da Luftbildflüge streifenweise mit großer Überlappung der einzelnen
Aufnahmen durchgeführt werden ist die Erstellung eines Mosaiks aus
den einzelnen Aufnahmen eine interessante Aufgabe.
In diesem Fall haben wir 10 Luftbilder, die durch vorhandene 
Passpunkte direkt geokodiert werden können. Obwohl durch
den Einsatz moderner Kamera- und
Navigationstechnik die mittleren Standardabweichungen der Fluglage
und Richtung unter 0,01 Gon liegen, lassen sich die unbearbeiteten
Aufnahmen nicht ohne Ungenauigkeiten zusammenfügen.
Dies liegt daran, da"s die Luftaufnahmen noch nicht
in eine Ebene projeziert sind. Durch diese
sogenannte Orthophotoherstellung lassen sich Luftbilder so
überarbeiten, da"s sie wie eine Karte behandelt werden k"onnen.
Es kann in ihnen gemessen werden und durch die hohe
Informationsdichte des Orthophotos ergeben sich vielfältige
M"oglichkeiten der Datengewinnung. Die hier beschriebene Erstellung
eines Luftbildmosaiks soll ein Gefühl für die Arbeit mit Luftbildern
vermitteln, besonders dem Identifizieren von identischen Punkten aus
verschiedenen Blickwinkeln sollte besondere Aufmerksamkeit gewidmet
werden.
\nomenclature{Gon}{leer}
\subsubsection{Beispieldaten}
Die verwendeten Luftbilder liegen als Tiff Dateien 174.tif - 183.tif vor.
Jede Datei hat eine Größe von 360 MB. 
Diese Daten wurden von der RWE Rheinbraun AG Abteilung
BT3 - Photogrammetrie zur Verfügung gestellt.
Diese Daten wurden den Vorgaben dieses Tutorials entsprechend unter die 
GPL (General Public License) gestellt.

%\subsubsection{Weitere Verwendung der Beispieldaten}


\section{L"osung mit Grass}
\label{mosaicking_aerial_images_de:grass}
Es wurde GRASS 5.0pre2 unter einer Debian GNU/Linux
Installation (woody) verwendet.\\


Um mit GRASS das gew"unschte Luftbildmosaik zu erstellen, k"onnen
mehrer Wege gew"ahlt werden. Es k"onnte jedes Bild für sich erst
georeferenziert werden um zum Schluß alle zusammenzufügen.
Da sich bei dem vorliegenden Datenmaterial nicht in
jedem Luftbild ausreichend markierte Passpunkte in der Örtlichkeit
befinden, erstellt man alternativ eine {\em x-y Location}
 mit einem Mapset für jedes Luftbild.
Anschließend werden die untereinander liegenden Bilder je in ein 
gemeinsames {\em Mapset} transformiert, so das sich die 5 Einzelteile
für die erste Transformationsreihe ergeben. Von diesen 5
Einzelteilen wird das mittlere, Nummer 3 sozusagen,
als Zielsystem für die zweite Transformationsreihe bestimmt.
Die 4 "ubrigen Mosaike werden von innen also 2,4 nach 3 und
1,5 nach 3 in das Zielsystem transformiert. Auch bei genauestem
Markieren der identischen Passpunkte in den Luftbildern
werden sich wegen der fehlenden Entzerrung Spannungen, die sogenannte
"`Klaffen"\ bei der Ermittlung der Transformationsparameter nicht
vermeiden lassen. Als Grad der Transformation wird 1 gew"ahlt, also 
eine Translation, Rotation und Skalierung gleichen Faktors
in x und y-Richtung.

\section{Vorbereitungen}
Um alle 10 Luftbilder zu einem Mosaik zusammenzufügen, wird nach dem
Start von GRASS eine {\em Location} mit einem {\em x-y}
Koordinatensytem erstellt z.B. {\em import}. Die Ausdehnung sollte
so gro"sz"ugig gew"ahlt werden, da"s das gesamte endg"ultige
Mosaik Platz findet. Ein nachträgliches "Andern der
Regionsparameter ist jedoch jederzeit
m"oglich. Die Bildgr"o"se eines Luftbildes betr"agt ca. 12000 * 12000
Pixel, ausgehend hiervon sollte eine Nord-S"ud Ausdehnung von +13000
bis -15000 mehr als ausreichend sein , da die Photos sich ja zu
einem guten Teil überdecken. In Ost-West Richtung ist man mit -25000
bis +25000 auf der sicheren Seite. Innerhalb dieser {\em Location} 
werden nun 10 {\em Mapsets} erzeugt. Der Einfachheit halber k"onnen
diese z.B. nach der Numerierung der Luftbilder (175-182) benannt werden.
Nach erfolgter Transformation sollten diese Grenzen
nat"urlich angepasst werden, um die
Dateigr"o"se zu begrenzen. Bei der
Benutzung der Photos in voller Aufl"osung ergeben sich je nach
Rechner pro Transformation schon mal Rechenzeiten im Bereich von Stunden.
Es ist also eine "Uberlegung wert, die Transformationsparameter im
Voraus für mehrere Bilder zu bestimmen und die eigentlichen
Transformationen {\em i.rectify} "uber Nacht ablaufen zu lassen. 
In jede der neu erstellten {\em Mapsets} wird nun die zugeh"orige 
Luftbilddatei importiert. Dazu wird Beispielsweise das {\em Mapset
176} ge"offnet und bei dem ersten Aufruf angelegt. 

\begin{kommando}
\begin{verbatim}

                            GRASS 5.0.0pre2
 
LOCATION: This is the name of an available geographic location.
          -spearfish- is the sample data base for which all
	  tutorials are written.
 
MAPSET:   Every GRASS session runs under the name of a MAPSET.
          Associated with each MAPSET is a rectangular
	  COORDINATE REGION and a list of any new maps created.
 
DATABASE: This is the unix directory containing the geographic
          databases
 
         The REGION defaults to the entire area of the chosen 
	 LOCATION. You may change it later with the command:
	 g.region
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
LOCATION:   import________   (enter list for a list of locations)
MAPSET:     176___________   (or mapsets within a location)
 
DATABASE:   /spare/gisdata/rheinbraun/________________________
 
 
 
   AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                    (OR <Ctrl-C> TO CANCEL)

Mapset <<176>> is not available
 
Mapsets in location <import>
----------------------
(+)PERMANENT
 
note: you only have access to mapsets marked with (+)
----------------------
 
Would you like to create < 176 > as a new mapset? (y/n) y

\end{verbatim}
\end{kommando}\

Ist so das {\em Mapset} angelegt, kann durch den Befehl 
{\em r.in.tiff -v input=/spare/gisdata/rheinbraun/176.tif output=176}
das Luftbild importiert werden.\\

\begin{kommando}
\begin{verbatim}

Welcome to GRASS 5.0.0pre2 (September 2001)
 
Geographic Resources Analysis Support System (GRASS) is Copyright,
1999-2001 by the GRASS Development Team, and licensed under
terms of the GNU General Public License (GPL).
 
This GRASS 5.0.0pre2 release is coordinated and produced by the
GRASS Development Team headquartered at ITC-irst (Trento, Italy)
with worldwide support and further development sites located at
Baylor University and the University of Illinois (U.S.A.).
 
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.
 
This version running thru the Bash Shell (/bin/bash)
Help is available with the command:      g.help
See the licence terms with:              g.version -c
Start the graphical user interface with: tcltkgrass&
When ready to quit enter:                exit
GRASS:> r.in.tiff -v input=176.tif output=176
TIFF Directory at offset 0x16678646
  Image Width: 11194 Image Length: 11193 Image Depth: 1
  Bits/Sample: 8
  Compression Scheme: None
  Photometric Interpretation: RGB color
  Software: "TLD2TIFF, Z/I Imaging GmbH, Oberkochen, Germany"
  Orientation: row 0 top, col 0 lhs
  Samples/Pixel: 3
  Rows/Strip: 5
  Planar Configuration: single image plane
  Looking for TIFF World file ...   Not Found!
11194x11193x24 image
 8 bits/sample, 3 samples/pixel   
Total colors = 948082
WARNING: Color levels quantization...
Total used colors = 8000
Creating SUPPORT Files for 176
done.

\end{verbatim}
\end{kommando}\

Dieses Importieren wird in allen {\em Mapsets} f"ur die jeweiligen
Luftbilder ausgef"uhrt.
   
\section{Transformationsparameter bestimmen}
Beispielhaft wird jetzt die Bestimmung der Transformationsparameter
f"ur den ersten "`Block"\ bestimmt. Um die Spannungen zwischen den
einzelnen Bl"ocken so klein wie m"oglich zu halten, wird als Ursprung
und endgültiges Zielsystem aller folgenden Transformationen ein
Luftbild gew"ahlt, das in der Mitte einer der beiden
Befliegungsstreifen (175, 176, 177, 178) und (179, 180, 181, 182)
liegt.
Ist das Zielsystem also das Photo 181.tif so wird GRASS für die
{\em Location: import} mit dem {\em Mapset: 176} aufgerufen.
F"ur das zu transformierende Photo wird nun eine Gruppe mit
{\em i.group} gebildet. Bei der Benennung der Gruppe hat man freie
Wahl, doch bei umfangreichen Transformationen ist es hilfreich,
eindeutige Bezeichnungen zu w"ahlen, in unserem Fall wird die Gruppe
nach dem Bild 176 genannt. Die dieser {\em Group} beigef"ugte Datei
ist nat"urlich 176. Nach der abschließenden Best"atigung ist die
{\em Group 176} erstellt.\\

\begin{kommando}
\begin{verbatim}

GRASS: > i.group
   
LOCATION: import            i.group            MAPSET: 176
 
This program edits imagery groups. You may add data layers to,
or remove data layers from an imagery group.
You may also create new groups
 
Please enter the group to be created/modified
 
 
GROUP:    176_________________   (list will show available groups)
 
 
      AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                        (OR <Ctrl-C> TO EXIT)


176-does not exist, do you wish to create a new group?(y/n) [n] y


LOCATION: import           GROUP: 176           MAPSET: 176
 
Please mark an 'x' by the files to be added in group [176]
 
MAPSET: 176
 
x_ 176
 
 
      AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                       (OR <Ctrl-C> TO CANCEL)	     

Group [176] references the following raster file
-----------------------
        176 in 176
-----------------------
Look ok? (y/n) y

Group 176 created!

\end{verbatim}
\end{kommando}\
  
    Dieser Gruppe mu"s jetzt ein Zielsystem für die Transformation
    zugewiesen werden. Dazu dient der Befehl {\em i.target}. Als
    Ziel {\em Mapset} wird 181 ausgew"ahlt da dieses Luftbild in der
    Reihe "uber 176 liegt. Das Bild 181 wird damit das Zielsystem
    dieser Transformation.\\



\begin{kommando}
\begin{verbatim}

GRASS:> i.target
This program targets an imagery group to a GRASS database
 
Enter group that needs a target
Enter 'list' for a list of existing imagery groups
Enter 'list -f' for a verbose listing
Hit RETURN to cancel request
>176


Please select the target LOCATION and MAPSET for group <176>
 
CURRENT LOCATION: import
CURRENT MAPSET:   176
 
 
TARGET LOCATION:  import______________
TARGET MAPSET:    181_________________
 
(enter list for a list of locations or mapsets within a location)

 
 
 
     AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                     (OR <Ctrl-C> TO CANCEL)

group [176] targeted for location [import], mapset [181]   

\end{verbatim}
\end{kommando}\

Zur Bestimmung der Transformationsparameter wird das schon in
Kapitel \ref{sec:passpunkte} Seite \pageref{sec:passpunkte}
besprochene Modul {\em i.points} aufgerufen, nachdem vorher mit {\em
d.mon} ein GRASS-Monitor gestartet wurde.\\

\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > i.points
 
Enter imagery group to be registered
Enter 'list' for a list of existing imagery groups
Enter 'list -f' for a verbose listing
Hit RETURN to cancel request
>176

\end{verbatim}
\end{kommando}\
    
Im Grass-Monitor kann jetzt die im {\em Mapset} vorhandene Datei 176
mit einem Doppelklick aufgerufen werden. Anschließend wird mit einem
Mausklick auf {\em PLOT RASTER} die im Ziel-{\em Mapset} liegende
Datei 181 in dem vorher angew"ahlten Viertel des GRASS-Monitors
angezeigt. Durch Vergr"o"sern identischer Bildausschnitte
in beiden Luftbildern durch die ZOOM-Funktion k"onnen identische
Punkte bestimmt werden. Es ist darauf zu achten, da"s diese Punkte
direkt auf der Erdoberfläche liegen, es bieten sich also
Straßenmarkierungen Gullydeckel und "ahnliches an (Abb. \ref{mosaik_ipoints}).
Dachfirste, Strommasten, Kirchtürme u.s.w. k"onnen nicht benutzt werden.
Auch bei scheinbar parkenden Autos ist Vorsicht geboten, da man nur
in den seltensten F"allen einen identischen Punkt auf dem Boden, 
sprich Reifenunterkante in zwei Bildern genau identifizieren kann.
Bedingt durch die kurze Zeitspanne zwischen zwei Aufnahmen k"onnen
sich scheinbar stillstehende Objekte unbemerkt bewegt haben.
Nachdem identifizieren von mindestens 4 Punkten kann mit einem
Mausklick auf {\em ANALYZE} der momentane Fehler der
Transformationsparameter mit den aktuell identifizierten Punkte
berechnet werden. Bei einer fl"achenhaften Verteilung der
Passpunkte in der "Uberlappungsfl"ache der beiden Bilder und 
gewissenhafter Bestimmung der Passpunkte ist es m"oglich, den Fehler 
im Bereich unter 10 Einheiten, in diesem Falle Pixel 
zu halten. Bei einer ungef"ahren Kantenl"ange eines Pixels von 15 cm
h"atte man so eine Ungenauigkeit von 1,5 m. Dies erscheint bei 
einer Bildausdehnung von 1,8 * 1,8 km und der Tatsache, da"s die
Luftbilder nicht entzerrt sind, annehmbar. 

\begin{figure}[h]
\centering
\includegraphics[width=6cm]{mosaic-from-aerial-images/mosaik-ipoints.eps}
\caption[Screenshoot GRASS Passpunkte identifizieren]{\label{mosaik_ipoints}Nutzung von {\em i.points} zur Identifizierung von Passpunkten in Luftbildern}
\end{figure}


\section{Transformieren des Luftbildes}
Mit dem Befehl {\em i.rectify} wird die gew"unschte Transformation
mit den bestimmten Parametern ausgeführt. Abschlie"send wird noch
der neue Name in dem Ziel-{\em mapset} angegeben {\em Please select the file(s) you wish to rectify by naming an output file}. \\

\begin{kommando}
\begin{verbatim}

GRASS:> i.rectify
 
Enter the group containing files to be rectified
Enter 'list' for a list of existing imagery groups
Enter 'list -f' for a verbose listing
Hit RETURN to cancel request
> 176
<176> 

Please enter the order of the transformation you want: 1

Please select the file(s) you wish to rectify
by naming an output file
 
176@176  . . . . . . . . . . . . . . 176____________
 
 
(enter list by any name to get a list of existing raster files)
 
    AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                     (OR <Ctrl-C> TO CANCEL)


Please select one of the following options
 1. Use the current region in the target location
 2. Determine the smallest region which covers the image
 >2

\end{verbatim}
\end{kommando}\

Die angezeigte kleinste Ausdehnung der Startdatei in der Ziel-{\em Region}
kann nun im Regionsbildschirm mit {\em ESC ENTER} best"atigt
werden. Die Frage {\em Do you accept this region? (y/n) [n]  y}
wird bejaht und {\em Would you like this region saved as the region in the target location? (y/n)} verneint. \\ 

\begin{kommando}
\begin{verbatim}

Do you accept this region? (y/n) [n] y
Would you like this region saved as the region
in the target location?
(y/n) n

You will receive mail when i.rectify is complete
GRASS:/spare/gisdata/grass/bin >

\end{verbatim}
\end{kommando}\
     
 Wie schon geschrieben kann die aufgerufene Transformation einige
 Zeit dauern. Mit {\em exit} kann GRASS nun beendet werden. 
 Nach der Meldung per e-mail, da"s die Datei transformiert wurde,
 wechselt man in den Ziel - {\em Mapset 181} und f"uhrt hier 
 {\em r.support} aus, um die von GRASS ben"otigten Hilfsdateien
 auf den neuesten Stand zu bringen oder "uberhaupt erst erzeugt.
 In einem gestarteten GRASS-Monitor k"onnen nun nacheinander
 beide vorhandene Rasterdateien (176 und 181) aufgerufen und
 durch die Option {\em -o} f"ur Overlay überlagert werden (Abb.
 \ref{mosaik1}). Zur besseren Unterscheidung der einzelnen
 Luftbilder sind hier die Bildr"ander mit den Rahmenmarken nicht
 entfernt worden, bei der Arbeit mit Orthophotos w"urde
 nat"urlich vor der Transformation eine entsprechende Maske
 wie in \ref{sec:maskierung} auf Seite \pageref{sec:maskierung}
 beschrieben erstellt und angewendet werden. \\ 
  
\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > d.rast -o map=181  
GRASS:/spare/gisdata/grass/bin > d.rast -o map=176  

\end{verbatim}
\end{kommando}\

\begin{figure}[h]
\centering
\includegraphics[width=6cm]{mosaic-from-aerial-images/mosaik-1.eps}
\caption[Screenshoot GRASS Mosaik]{\label{mosaik1}Überlagerte Ausgabe von 2 Luftbildern}
\end{figure}

\begin{figure}[h]
\centering
\includegraphics[width=8cm,height=6cm]{mosaic-from-aerial-images/mosaik-2.eps}
\caption[Screenshoot GRASS Mosaik komplett]{\label{mosaik2}Überlagerte Ausgabe von 10 Luftbildern}
\end{figure}



Um die beiden Luftbilder zu einer Rasterdatei zusammenzufügen, gibt
es den interaktiven Befehl {\em r.patch}, der "ubergebene Rasterdateien so
"uberlagert das die zuerst angegebene Datei als oberste "`Folie"\ 
erscheint und die sp"ater aufgerufenen Dateien in den
"Uberlappungsgebieten verdeckt. Dem Programm  werden an der Kommandozeile
alle Rasterdateien "ubergeben, ist dies geschehen wird die folgende
Aufforderung ohne Eingabe mit {\em ENTER} best"atigt, daraufhin
fragt der Befehl den Namen der neuen Rasterdatei ab. Anschließend
wird wieder {\em r.support} für die neuerstellte Datei aufgerufen. 

\section{Abschlie"sendes Vorgehen}
Diese Art der Transformation wird für alle verbliebenen "`Luftbildpaare"\
ausgeführt. Anschließend können die 4 "au"seren neugebildeten
"`Patch-Dateien" wiederum in das System der "'mittleren"\ Transformiert
und "`gepatcht" werden. Trotz der in Kauf genommenen Ungenauigkeiten
kann sich das Ergebniss sehen lassen und ist für "Ubersichtszwecke
auf jeden Fall geeignet (Abb. \ref{mosaik2}).

\section{Alternative Vorgehensweisen}
Sollten auf diese Weise die Ungenauigkeiten zwischen den einzelnen
Bildbl"ocken zu gro"s werden, kann man versuchen, jedes Luftbild einzeln an
das Ursprungsbild anzuh"angen. So k"onnten die Spannungen zwischen den
einzelnen Bildern unter Umst"anden besser verteilt werden.


