ootb_obia: Out-of-the-box object-based image analysis of canopy...

View source: R/ootb_obia.R

ootb_obiaR Documentation

Out-of-the-box object-based image analysis of canopy photographs


Out-of-the-box version of methods first presented in \insertCiteDiaz2015;textualrcaiman.


  z = NULL,
  a = NULL,
  m = NULL,
  sky_blue = NULL,
  w_red = 0,
  gamma = 2.2



SpatRaster. The return of a call to read_caim() or read_caim_raw().


SpatRaster built with zenith_image().


SpatRaster built with azimuth_image().


SpatRaster. Default (NULL) is the equivalent to enter !is.na(z) for hemispherical photography, or enter !is.na(caim$Red) for restricted view photography.


color. Is the target_color argument to be passed to membership_to_color(). Default (NULL) is the equivalent to enter sRGB(0.1, 0.4, 0.8)–the HEX color code is #1A66CC, it can be entered into a search engine (such as Mozilla Firefox) to see a color swatch.


Numeric vector of length one. Weight of the red channel. A single layer image is calculated as a weighted average of the blue and red channels. This layer is used as lightness information. The weight of the blue is the complement of w_red.


Numeric vector of length one. This is for applying a gamma back correction to the lightness information (see Details and argument w_red).


This function is a hard-coded version of a pipeline that combines these main functions mask_sunlit_canopy(), enhance_caim(), polar_qtree()/qtree(), and obia(). The code can be easily inspected by calling ootb_obia –no parenthesis. Advanced users can use that code as a template.

Pixels from the synthetic layer returned by obia() that lay between 0 and 1 are assigned to the class plant only if they comply with the following conditions:

  • Their values are equal to 0 after defuzzify() with a sky grid segmentation of 10 degrees.

  • Their values are equal to 0 after apply_thr() with a threshold computed with thr_isodata().

  • They are not exclusively surrounded by sky pixels.

Use the default values of z and a to process restricted view photographs.

If you use this function in your research, please cite \insertCiteDiaz2015;textualrcaiman or \insertCiteDiaz2023;textualrcaiman in addition to this package (⁠citation("rcaiman"⁠).


An object of class SpatRaster with values 0 and 1.



See Also

Other Binarization Functions: apply_thr(), obia(), ootb_mblt(), regional_thresholding(), thr_isodata(), thr_mblt()


## Not run: 
# ==============================================
# Circular Hemispherical Photo (from a raw file)
# ==============================================

caim <- read_caim()
z <- zenith_image(ncol(caim), lens())
a <- azimuth_image(z)
m <- !is.na(z)

mn <- quantile(caim$Blue[m], 0.01)
mx <- quantile(caim$Blue[m], 0.99)
r <- normalize(caim$Blue, mn, mx, TRUE)

bin <- find_sky_pixels(r, z, a)
mblt <- ootb_mblt(r, z, a, bin)

mx <- optim_normalize(caim, mblt$bin)
ncaim <- normalize(caim, mx = mx, force_range = TRUE)
percentage_of_clipped_highlights(ncaim$Blue, m)

bin2 <- ootb_obia(ncaim, z, a, gamma = NULL)

# =====================================
# Hemispherical Photo from a Smartphone
# =====================================

path <- system.file("external/APC_0581.jpg", package = "rcaiman")
caim <- read_caim(path) %>% normalize()
z <- zenith_image(2132/2, c(0.7836, 0.1512, -0.1558))
a <- azimuth_image(z)
zenith_colrow <- c(1063, 771)/2
caim <- expand_noncircular(caim, z, zenith_colrow) %>% normalize()
m <- !is.na(caim$Red) & !is.na(z)
caim[!m] <- 0

bin <- ootb_obia(caim, z, a)

# ============================
# Restricted View Canopy Photo
# ============================

path <- system.file("external/APC_0020.jpg", package = "rcaiman")
caim <- read_caim(path) %>% normalize()

bin <- ootb_obia(caim)

## End(Not run)

rcaiman documentation built on Nov. 15, 2023, 1:08 a.m.