TITLE: Comparing forest canopy measurements with a phone lens and an expensive DSLR fisheye
DATE: 2018-09-30
AUTHOR: John L. Godlee
====================================================================


On my most recent teaching stint as a demonstrator for a 4th year
undergraduate field course, myself and one of the other
demonstrators experimented with estimating forest canopy structural
metrics like gap fraction and Leaf Area Index (LAI) using two
different photographic methods. The first was a conventional full
hemipsherical fisheye lens on a DSLR camera, the second was a
considerably cheaper fisheye lens converter for a smartphone.

We took 10 photos with the same orientation at the same height under
a stand of Ash-Birch mixed plantation. I cropped the images so each
set of paired images captured approximately the same area of canopy.

  {IMAGE}


  {IMAGE}


One issue was that the phone fisheye converter tended to move around
on the body of the phone, leading to the edges of the fisheye frame
being distorted or excluded from the phone’s frame. This meant that
to maintain consistency between the angle of view cpatured by each
photo, all photos had to be cropped to approximately (DEGREES) field
of view. To see whether this excess cropping affected estimations of
LAI or gap fraction, I compared photos from the DSLR camera, cropped
to different proportional circular crops:

    phone_px_rad <- 2460 / 2
    camera_px_rad <- 3925 / 2

    crops <- c(1, 0.9, 0.75, 0.5, 0.25)

    phone_px_rad <- phone_px_rad * crops
    camera_px_rad <- camera_px_rad * crops
    rads <- c(phone_px_rad, camera_px_rad)
    phone_camera <- c(rep("phone", times = 5), rep("camera", times = 5))
    crops_group <- rep(crops, times = 2)

    crops_df <- data.frame(crops_group, phone_camera, rads)

    ggplot(crops_df, aes(x = crops_group, y = rads, colour = phone_camera)) + 
        geom_point() + 
        geom_line() + 
        scale_x_reverse() + 
        theme_classic() + 
        labs(x = "Proportional crop by diameter of original image", 
            y = "Pixel diameter of resultant image")

  {IMAGE}


  {IMAGE}


  {IMAGE}