Select Page

Welcome to the EAGLE students' webpage!


This is the offical EAGLE master students’ webpage. Here you can find useful information on the EAGLE master program offered by the University of Würzburg and the German Aerospace Center (DLR), directly provided by its students.

Explore our news, read the students’ personal portraits or find FAQs and contact information.

Field Measurements in Demmin 2018

In order to get some practical experience in terms of field work the EAGLE program offers an excursion to Demmin which is located in federal state of Mecklenburg-Western Pomerania in North-East Germany. The test site is an intensively used agricultural ecosystem that has been established in 1999 with a close cooperation between the local farmers and the German Aerospace Center (DLR). Furthermore, since 2011 it is part of the TERENO observatory ‘North-East German Lowlands’ that is managed by the GeoForschungsZentrum (GFZ) Potsdam. The young Pleistocene landscape which was formed approximately 10000 years ago by glaciers and melting waters is widely used for forestry and agriculture. Nowadays more than 65 soil moisture SPADE sensors and over 40 environmental measurement stations are managed by GFZ and DLR. Over the years a large number of data have been gathered and are now available (Truckenbrodt et al. 2018).

Students had the opportunity to collect different types of samples, e.g. measuring biophysical parameters like the Leaf Area Index using a LAI-2200 plant canopy analyzer (LI-COR). In addition to that the leaf chlorophyll content was measured through non-destructive absorbance measurements using a SPAD-502Plus chlorophyll meter. Other sampling tasks included measuring the soil moisture with a portable sensor, as well as taking actual soil and biomass samples which could be measured afterwards in the laboratory. Also, the surface roughness was estimated by using a pin profiler measurement. Students were provided with a field reader before the actual excursion so that they could prepare for the field work beforehand.

This field campaign offered EAGLE students an insight in the world of field work and the possibility to conduct measurements using various devices. Students learned to organize themselves and distribute the tasks in order to work efficiently. Furthermore, this excursion also strengthened the relationship of EAGLEs as a group which could be expressed through joint dinners and barbecue as well as other fun activities.

Reporting from the Student’s Board

Marius Philipp


Truckenbrodt, S. Hüttich, C., Borg, E., Ahmadian, N., Dahms, T., Heupel, K., Spengler, D., Conrad, C. (2018): “DEMMIN_2.0 – Combining in situ observations and remote sensing data – Field Reader”.

Land-Use Change Coded By Color


The remote sensing R package LCquickVieweR makes land-use change visible by creating false color images. The methodical approach is a combination of Image Differencing and Multi Temporal Stacking using NDVI. This way change is coded by color. All processing steps are automatized.

LCquickVieweR was built for the final project of MB2 – Introduction to Programming and Geostatistics and was initially just a processing script that grew into an R package gradually. At this stage [0.0.1] some functions are customized for my latest project, but can be adjusted easily.

Animation 1: LCquickVieweR final product.


Install LCquickVieweR directly from github by using devtools.



LCquickVieweR provides a small set of functions:

Adjusting study area:

  • mergeThis() – [0.0.1] merges two tiles into a single image for every dataset in a committed directory. Including more tiles is possible by adjusting the referenced raster::mosaic() function.
  • subsetThis() – crops every raster image in a committed directory to the extend of any shapefile.

Image Differencing and Multi Temporal Stacking using NDVI:

  • getNDVI() – computes the NDVI for every Landsat5 and Landsat8 scene in a committed directory.
    • NDVI() – basic ratio computation using Red & NIR bands, see NDVI.
    • Landsat5_NDVI() – looks for the right Landsat5 bands for NDVI computation.
    • Landsat8_NDVI() – looks for the right Landsat8 bands for NDVI computation.
  • getDeltaNDVI() – creates image subtractions of every successive pair within a directory. The order of subtractions is the order of the committed directory.
    • deltaNDVI() – raster calculation: deltaNDVI() subtracts NDVI datasets from each other. The prior dataset is subtracted from the later.
  • stackTime() – creates the final product by stacking the prior, later, and delta datasets into their respective RGB channels.

Bonus functions that make RStudio life easier:

  • packageChecker() – takes a list of packageNames and checks it against the internal library. If a package is missing, it will download, install and activate it. If a package is already installed but old, it will be updated and activated. If a package is already installed, it will be activated.
  • set.wd()– setting a working directory by pasting a windows path directly, without changing any single \backslash.
    • backslashConverter() – converts \ into /.

Get Started

A quick demonstration of what LCquickVieweR can do:

Put all your downloaded satellite images into one folder. Up to this point the automatization works only for Landsat 5 and 8 scenes. Bands from other satellites need to be addressed manually.


# Load packages
packages <- c("raster", "sp", "RStoolbox", "rgdal")

# set your working directory to your sat-image folder

# create subfolders for temporal datasets and results
directories <- c("result_NDVIs", "result_mosaic", "result_subset", 
                 "result_deltaNDVIs", "result_falseColor")
for(i in 1:length(directories)){
# create the main list of your working directory
dirList <- list.files()

Main program:

# creating NDVIs for all downloaded data

Figure 1: Converting all datasets into NDVI datasets.


# filtering for needed tiles
imageTile1 <- list.files("result_NDVIs/", pattern = "177044")
imageTile2 <- list.files("result_NDVIs/", pattern = "177045")

# combining tiles for full study area
mergeThis(imageTile1, imageTile2)

# loading extent of study area -> shp-file
studyArea <- readOGR(dsn = "_vector_data", layer = "studyArea")
# addressing all merged images
allMosaics <- list.files("result_mosaic/")

# creating subset from all mosaics
subsetThis(allMosaics, studyArea)

Figure 2: Merged and cropped study area.


# getting all subsets into a list
allSubsets <- list.files("result_subset/")

# image differencing deltaNDVI()

# collecting preprocessed datasets for final product
delta <- list.files("result_deltaNDVIs/")
ndvi <- list.files("result_subset/")

# creating main land-use change product
stackTime(ndvi, delta)

Figure 3: Assembling the final product.


Once the processing is done, your results will look pretty much like the scenes in the GIFs. Regardless of where that scene is from, the colorCode will still be the same:

  • reddish colors: lost areas
  • cyan colors: gained areas
  • yellowish and purple areas: areas without change

In general color depends on NDVI intensity in both dates.

Animation 2: LCquickVieweR final product.

To Estimate Biomass Using Light Use Efficiency Model in R

Recently, I published “lue” package in R that is based on the light use efficiency model, which returns the biomass of any crop based on the simple physiological paradigm modelled by Shi et al. (2007). It contains LUE_BIOMASS () which calculates the absorbed photosynthetically active radiation (APAR) in the first step and the actual light use efficiency (LUEact) in the second. Many climatic parameters like clear sky photosynthetically active radiation (PAR), minimum, maximum and dewpoint temperature, which affect the biomass, has been also considered as an input variable. The thresholds of these climatic parameters play a significant role in calculating accurate biomass (Russel and Wilson 1994). Therefore, this function also considers the threshold values for example, the minimum values of minimum temperature signify the LUEact = 0 and maximum values of minimum temperatures define that LUEact equals to the optimal light use efficiency(LUEopt). Every crop has its own LUEopt, for instance the LUEopt for wheat is 3.0 (Djumaniyazova et al., 2010), in that case LUE_BIOMASS () multiplies this optimal value with minimum temperature. The output generated by this function looks similar as below:

Biomass_wheat <- LUE_BIOMASS(fpar_raster, par,tmin,-2,12,3) ,


Similarly, vapour pressure deficit (VPD) also alters the values of biomass. The LUE_BIOMASS_VPD () of this package calculates the biomass by considering the effect of VPD. The complete code with all functions of lue package is available on GitHub. If you have any more ideas or suggestions, please update us via GitHub (


Shi. Z., Ruecker, G. R., Mueller, M., Conrad, C., Lamers, J. P., Ibragimov, N., Martius, C., Strunz, G., Dech, S., & Vlek, P. L. (2007) – Modeling of Cotton Yields in the Amu Darya River Floodplains of Uzbekistan Integrating Multitemporal Remote Sensing and Minimum Field Data. Agronomy Journal 99, 1317-1326.

Russell, G., & Wilson, G. W. (1994) -An Agri-Pedo-Climatological Knowledge-Base of Wheat in Europe. Joint Research Centre, European Commission, Luxembourg, 158.

Djumaniyazova, Y., Sommer, R., Ibragimov, N., Ruzimov, J., Lamers, J., & Vlek, P. (2010) – Simulating water use and N response of winter wheat in the irrigated floodplains of Northwest Uzbekistan. Field Crops Research, 116, 239-251.

Spectral unmixing in R

Recently, in January, I finished the development of the first version of a spectral unmixing function being part of RStoolbox, an R package offering numerous tools for remote sensing analysis written by Benjamin Leutner. The multiple endmember spectral mixture analysis (mesma) function makes it possible to unmix multi- and hyper-spectral imagery by sets of spectral endmember profiles.

For this, a non-negative least squares (NNLS) solver was implemented. NNLS is a statistical approach to fit model parameters to data, assuming that the model parameters are always expressed linearly to those not expressed by the model (unknown parameters) and that the model parameters can never be negative. There are different approaches to solve the NNLS problem. A popular one had been introduced by Lawson & Hanson (1974), which can be considered as fundamental work on practical Least Square Problems solving. It was originally published as FORTRAN code, which is still widely used, e.g. by the R NNLS package or by the Python scipy library. However, compared to newer developing frameworks and languages emerged, the FORTRAN implementation is relatively slow. Thus and to be independent from existing solutions, I wrote a C++ NNLS solver for mesma(), based on a sequential coordinate-wise algorithm (SCA) introduced by Franc et al. (2005). The latter method inherits strong control about the solver’s iteration stopping conditions.

Apart from NNLS, we are planning to add further solver methods (which is why I am currently looking for other practicable unmixing methods).

In this post, I want to demonstrate, how to use the unmixing function RStoolbox::mesma() by giving an example. It can be reproduced on any device running R and having installed the current RStoolbox beta. To do so, execute devtools::install_github(“bleutner/RStoolbox”).

First, we are going to load the Landsat example imagery delivered with RStoolbox:

#if not already done, install RStoolbox beta:
#required caret 6.0-79, which is not on CRAN yet

#load packages

#load an example dataset


To create some endmember spectra, we simply collect the spectral profiles of “water” and “land” from our imagery. We keep it simple here – instead, you could use spectra from a spectral library.

#make up some endmember spectra: water and land
em_names <- c("water", "land")
pts <- data.frame(class=em_names, cell = c(47916,5294))
em <- lsat[pts$cell]
rownames(em) <- em_names


That’s all for the pre-processing! Now you have an image and two endmembers. Note that you need to have at least two endmembers (as we have in this example) to unmix an image. Also, take a look at “em” and “lsat” before continuing: Both have the same spectral resolution (band number), which is a prerequisite. This means that if you want to use data from a spectral library for unmixing, you simply need to resample the data to the same spectral resolution of your imagery to use mesma().

Now, just call mesma(). It returns a probability raster, each layer representing one class of your endmembers, except for the last layer, which gives you the RMSE for each pixel.

#unmix the image for water and land
probs <- mesma(lsat, em, method = "NNLS")


Since we decided to develop the NNLS solver from scratch in C++ and not to use existing older FORTRAN implementations, mesma() is quiet fast. It supports parallel processing, if you want to unmix large amounts of data and have multiple CPU cores available. To do so, just create a cluster before calling mesma() using raster::beginCluster() and stop it afterwards using raster::endCluster().

Now, let us look at the output’s:

#take a look
raster::plot(probs$water, col = c("white","blue"))
raster::plot(probs$land, col = c("white","brown"))


Here are the probabilities for water…

and here they are for land:

You clearly see, how mesma() could easily differentiate between these two endmembers with only one spectrum per class. If you have ideas or find a problem, please report us via GitHub!



Franc, V., Hlaváč, V., & Navara, M. (2005). Sequential coordinate-wise algorithm for the non-negative least squares problem. In: International Conference on Computer Analysis of Images and Patterns (pp. 407-414). Berlin, Heidelberg.

Lawson, C. L., & Hanson, R. J. (1974). Solving least squares problems (Vol. 15). Siam.

Block course “Hyperspectral Remote Sensing”

One reason that makes this master’s program so attractive is its highly diverse coursework. This is being reflected by the currently available block courses. The “Hyperspectral Remote Sensing” course held by Dr.rer.nat. Martin Bachmann is part of that. In this course students receive an introduction to the world of spectroscopy and hyperspectral remote sensing, its limitations and potential.

The main focus of the seminar was working with a field spectrometer. Students got hands on experience calibrating the spectrometer using a spectralon, as well as measuring the spectral signatures of different subjects under simulated laboratory conditions. Different LAI measurements, as well as measurements of various minerals, soil types and the effect of wetness have been examined. Additionally, further studies on the impact of soil aggregate size and shadow effects were carried out.

Since the purpose of a field spectrometer is to be used in the field, the students took the opportunity to take some measurements across the campus, under the guidance and provided with the expertise of Dr.rer.nat. Martin Bachmann. Taking measurements outside introduces more factors that need to be taken in account, for example cloud coverage and the spectral behavior of solar radiance in contrast to laboratory conditions.

The software ENVI Classic has been used to visualize the measurements, calculating various statistics and for identifying features regarded to distinct spectral behaviors of different materials. Furthermore, own spectral libraries consisting of the taken measurements have been created and compared to existing libraries.

This course provided students with the knowledge how to correctly conduct field spectroscopy measurements, the impact of shadow effects, surface roughness and different viewing angles, as well as the expertise to visualize and interpret certain spectral characteristics.

Reporting from the Student’s Board

Marius Philipp

Urban Remote Sensing

Remote Sensing of Urban Geography has taken place in this semester with Hannes Taubenböck. The course covered various important topics like: Earth observation data and methods for urban environment classification, Megacities, Megaregions, Urban Corridors: New concepts and their spatial dimension and pattern, Urban time series mapping, Spatial metrics for the analysis of urban patterns and structures at regional level, Urban climate and air pollution -techniques and results using remotely sensed data.

The above-mentioned topics were presented by students who had prepared a small research paper for each topic and followed by extensive questions and answer as well as discussion related to the topic by participants. These topics gave a broad overview of how urban areas can be mapped using remotely sensed data, and participants have been introduced to major challenges and strength related to each topic.

Th course followed by practical session of urban environment classification with use of Object-based image classification method in eCognition software. Participants were introduced to make use of this classification method for better classification of urban environment with high resolution data.

The course introduced participants with new concepts related to the discussed topics, they also gained the knowledge of how to use a powerful software for classification high resolution data in heterogenous urban environment.

This course gave basic foundation and required knowledge for further urban studies with remotely sensed data and will be followed with advance course in summers term.


Photoshooting for the EAGLE Website

Another Year, another generation of students. After our studies began there was also the need for updating the EAGLE students’ webpage in order to reveal the new generation of EAGLEs to the world. The first step was of course the creation of a group photo, as well as individual profile pictures that introduce each EALGE student.

But next to that, some additional photo shooting took place, so that some stock photos for the website could be submitted. Pictures during several lectures, learning events and other occasions were taken and uploaded in order to give a small insight in the daily life and work of us EAGLE students.

These photo shootings tend to be quite fun and will definitely continue throughout our studies to keep the website and anyone interested in this master’s program up to date.

Reporting from the Student’s Board

Marius Philipp

Bavarian Mountains, East-German Landscapes and a Party: The First EAGLE Summer Term

On the road to MICMOR

Now the new EAGLEs are arriving and an exciting second year is about to start. But first let’s take a look back at an enjoyable summer term.

We were right off to a promising start by visiting the KIT (Karlsruhe Institute of Technology) Campus at Garmisch-Partenkirchen and listing to interesting talks of the MiCMoR PhDs about researching alpine regions. All this happened in front of breathtaking scenery, the Bavarian Alps, especially the Zugspitze, which is the highest mountain of Germany

Back in Würzburg we had quite a few interesting courses from modeling species distribution to yield prediction and other remote sensing applications related to Land and Water management.

The highlight of the term (IMHO) was our one-week field trip to Demmin, where we were given an introduction into the field work of agriculture related earth observation. It was an intense and highly interesting week full of discussions, late night- analyses and of course a ton of fun. Therefore I’d like to thank Christopher Conrad and Thorsten Dahms for accompanying and teaching us on this field trip.

Field Work in East Germany

As the summer term was quite short, there was no time to rest. The next event was mostly organized by us students. The EAGLE summer dialogue was a great opportunity for an exchange between members and alumni of the chair, the DLR-DFD and the students. On this joyful evening I dare say we did a quite impressive job as hosts, especially regarding the fact that many of us haven’t organized such a kind of party before. My special thanks go to Christopher Conrad and Stefan Dech for providing the necessary support behind the scenes.

As I said before we had no time to rest, since the end of term was approaching fast. While finishing our assignments some of us also had to prepare for the traditional end of term block courses given by DLR-members. So we had a short but quite informative course by Claudia Künzer. In combination with the simulated conference constructed by Martin Wegmann it was and intensive finish of a densely packed term full of interesting and informative courses.

But we are not done yet. Eight of us went on another field trip. This time we ended up in the Steigerwald research station in Fabrik Schleichach (Upper Franconia). The goal of this course was to engage in a sort of cooperation with students from the biology master program. Now we were given a really nice opportunity to use our knowledge of remote sensing to overcome the tasks of explaining the behavior/ distribution of bats and insects. On this occasion we conducted- I am quoting: “impressive”- analyses (whatever that means). In sum it was a very fun and enjoyable experience and I’d like to thank Martin Wegmann for making this field trip (probably he’d like me to add the word “awesome”) possible but even greater thanks goes to our formidable host Jörg Müller, who is the head of the research station.

As you can see, we had quite a nice and intense term and I hope that all the people we came across during this semester can keep up the really good work, when it comes to teaching the new EAGLES. So that someday even by German standards the word “awesome” is justified.

Reporting for the Students’ Board

Johannes Löw

A review of the first semester from a students’ representative perspective


At our first day in the EAGLE program we were given an introduction suggesting nearly endless possibilities for us the EAGLE students. Honestly speaking it was quite appealing, but it also resulted in high expectations regarding the program. So did the lecturers deliver accordingly? I would say that they did. We had an interesting semester packed with a lot of information, especially for those with no or a minor remote sensing background. Now everybody has a basic understanding of remote sensing and its methods. Furthermore, thanks to Martin Wegmann all the students are now capable of implementing it in a small R-code.

Since it is the first run of this program, nothing is perfect yet. There are some minor issues due to unpredicted consequences of our first concept of the program. In these cases the students’ board and the lecturers are working closely together to find solutions suited for both parties. These cases usually evolve around the suitability of examination types, the workload of single courses or the transparency of regulations regarding the program. In most cases the problems are easily solved. Additionally, due to the close contact we were able to negotiate some deals, which come close to initially promised possibilities allowing the students adapt their timetable according to their interests, as far as it is possible in the European Bologna-system.

In sum, I would say, we are off to a good start, but to create a highly appealing program a lot of work has yet to be done. And since we had an end of term meeting with Claudia Künzer, Martin Wegmann and Christopher Conrad, our suggestions, how the program could be improved, have already been communicated. As a result we had a long fruitful discussion about our program. With this very productive meeting in mind we are curious about the new challenges that will arise in the next semester. [written by Johannes, reporting for the students’ board]


Sources: (

Install every missing R package in one go

Before submitting a project or setting up R on a new system, this function might come in handy. You can put all your favourite or required packages into a single vector and check if they’re already installed.

If not, packageChecker() will take care of that.

packageChecker <- function(requiredPacks){
  check <- requiredPacks %in% installed.packages()[,"Package"]
  for(i in 1:length(check)){
    if(check[i] == FALSE){

# execution
requiredPacks <- c("pwltools", "sp", "raster", "ggplot2", "RStoolbox")


Once I completed coding this, I realized that installing the packages might only be half the job. You’ll most likely want to load them into your R session before executing the rest of your code.

While researching how to operate vectors on library() I found a neat existing solution.
But adding this inside the loop will do the trick.

sapply(requiredPacks, require, character.only = TRUE)


Thanks to Steven Worthington.


Backslash Converter for R

Every now and then some of us have to work on a campus terminal. And most of the time you want to take the code and data with you. So you do what every student does – you hook up your own usb-drive and change work directories in RStudio.

But as soon as you start copy-pasting your directory from the OS [win10] to


the first thing you notice is that R-syntax doesn’t like the \backslash and throws an error.
Since \backslash is a special operator to suppress metacharacters or escape sequences, it can’t be escaped without a second backslash.

So if you want to feed your code multiple datasets from different directories, you correct every directory manually. And campus terminal directories tend to be annoyingly long, where you have to change about 10 \backslashes each.

Not anymore.

This little snippet lets you copy-paste and set any directory you like in a second.

backslashConverter <- function(x){
  x <- readline()
  gsub("\\\\", "/", x)

set.wd <- function(){

# execution


How it works:

  • the function backslashConverter calls another function – readline() and saves your copied directory into the variable x.
  • readline() converts every single \ (from your directory) into a double \\. This way R won’t throw an error anymore.
  • gsub() matches every double \\ in the string x and replaces it with /.
    (this one is a little confusing, because a double \\ should look like \\\\, because in R it’s still an operator, so you open and close it twice.)
  • set.wd() is now your own function for set a directory. It calls the backslashConverter() and sets a new directory without changing anything manually.

New 2017 EAGLE students welcomed

The new 2017 EAGLE students have been welcomed to Wuerzburg and recently started their studies. Our webpage will be updated as soon as reports and photos about the new students are available.

EAGLE and Department of Remote Sensing Summer BBQ

Since the first ever semester of the EAGLE program has come to an end, we think it is time to come together and enjoy a nice summer evening. On the 23d of June, the EAGLE students invite to a great BBQ at the University of Würzburg. We hope for a good mixture of students, lecturers and other EAGLE interested people. The party will be a great place to share the experiences and information with each other. If you are interested to join, please fill in the contact sheet. More information will be provided via email – stay tuned!

Number of 2017 EAGLE Students

Start of Summer Semester 2018