The FOTO (Fourier Transform Textural Ordination) R package.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
R fixed typos and added new references to the description Jan 18, 2019
docs small typos Jan 18, 2019
inst/extdata first commit Jan 8, 2019
man fixed typos and added new references to the description Jan 18, 2019
tests unit tests Jan 8, 2019
vignettes docs + variable names Jan 10, 2019
.Rbuildignore
.gitignore . files Jan 8, 2019
.travis.yml . files Jan 8, 2019
CONDUCT.md first commit Jan 8, 2019
DESCRIPTION fixed typos and added new references to the description Jan 18, 2019
LICENSE first commit Jan 8, 2019
NAMESPACE docs + make functions internal Jan 9, 2019
NEWS.md docs Jan 8, 2019
README.Rmd small typos Jan 18, 2019
README.md small typos Jan 18, 2019
cran-comments.md docs Jan 8, 2019
foto.Rproj first commit Jan 8, 2019

README.md

Build Status codecov CRAN_Status_Badge Buy Me A Coffee

FOTO

The FOTO (Fourier Transform Textural Ordination) method uses a principal component analysis (PCA) on radially averaged 2D Fourier spectra to characterize (grayscale) image texture. The FOTO method was described by Couteron et al. 2005 to quantify canopy stucture in relation to biomass and biodiversity. More recently, the code base of this package was used in a similar study by Solorzano et al. 2018. Although the techiques as presented in these papers is applied on a canopy level, the principle works on images of all types.

Installation

stable release

To install the current stable release use a CRAN repository:

install.packages("foto")
library("foto")

development release

To install the development releases of the package run the following commands:

if(!require(devtools)){install.packages("devtools")}
devtools::install_github("khufkens/foto")
library("foto")

Vignettes are not rendered by default, if you want to include additional documentation please use:

if(!require(devtools)){install.packages("devtools")}
devtools::install_github("khufkens/foto", build_vignettes = TRUE)
library("foto")

Use

To classify image texture using the FOTO algorithm use the foto() function. The foto() routine returns a nested list with the source data (aggregated zones used and fourier components used in the PCA analysis) and a final colour image consisting of the three major principal components for every pixel.

detailed parameter description (click to expand)

Parameter Description
x a raster layer (stack or brick)
window_size a window size in pixels
plot plot output (TRUE / FALSE)
norm_spec normalize the radial spectrum (TRUE / FALSE)
method “zones” or “mw” (i.e. moving window)

Zones

The original implementation used discrete zones (blocks of x pixels wide, window_size parameter) to classify an image. This original implementation is the default, and the least computationally intensive, as it effectively reduces to resolution of the orignal data. In short, data is aggregated at the size of the specified window.

An example analysis is run below. In the resulting image pixels with a similar colour have a similar texture. The analysis is run on a historical image of plantations near Yangambi, DR Congo, as recovered in the COBECORE project. The regular pattern of planted trees is picked up readily by the algorithm.

# load the library
library(foto)

# load demo data
r <- raster::raster(system.file("extdata", "yangambi.png",
                          package = "foto",
                          mustWork = TRUE))

# classify pixels using zones (discrete steps)
output <- foto(r,
     plot = TRUE,
     window_size = 25,
     method = "zones")

# print data structure
print(names(output))
#> [1] "zones"          "radial_spectra" "rgb"

Moving window

To maintain the resolution of the original image a moving window approach can be used (method = “mw”). This approach overlays a window of size x (window_size parameter) on every pixel in the image and applies the FOTO methodology. This obviously represents a considerable computational burden and should be used with caution. An example is given below for a smaller subsection of the processed image above. The output format of the moving window analysis is consistent with that of the zoned approach.

# crop the image for speed
r <- crop(r, extent(1,100,1,100))

# crop the image
output <- foto(r,
     plot = TRUE,
     window_size = 25,
     method = "mw")
#> A moving window approach is computationally intensive.
#> This might take a while.

Partitioned normalization

Partiotioned normalization as described in Barbier et al. 2010 is not provided but easily accomplished once all images are processed. I refer to this paper for the appropriate routines.

References

  • Couteron P, Pelissier R, Nicolini E a., Paget D (2005) Predicting tropical forest stand structure parameters from Fourier transform of very high-resolution remotely sensed canopy images. Journal of Applied Ecology, 42, 1121–1128.

  • Barbier N, Couteron P, Proisy C, Malhi Y, Gastellu-Etchegorry J-P (2010) The variation of apparent crown size and canopy heterogeneity across lowland Amazonian forests. Global Ecology and Biogeography, 19, 72–84.

  • Solórzano JV, Gallardo-cruz JA, González EJ et al. (2018) Contrasting the potential of Fourier transformed ordination and gray level co-occurrence matrix textures to model a tropical swamp forest ’ s structural and diversity attributes. Journal of Applied Remote Sensing, 12, 036006.

Acknowledgements

This package is supported through the Belgian Science Policy office COBECORE project (BELSPO; grant BR/175/A3/COBECORE).