ootb_mblt()
was updated and results from this version will be different to those from previous version.calc_co()
provides canopy openness calculation for hemispherical images.correct_vignetting()
to correct the vignetting effect and doing so standardize radiometry.crop_caim()
allows cropping after reading, complementing read_caim()
.crosscalibrate_lens()
allows geometrical cross-calibration.extract_radiometry()
helps to built a function to correct the vignetting effect with correct_vignetting()
.extract_sky_points_simple()
to obtain sky points without the need of a working binarized image.fisheye_to_equidistant()
is now able to interpolate. It gains the m
argument.calc_zenith_colrow()
is former calc_zenith_raster_coord()
.calibrate_lens
gains a more extensive output.extract_rl()
default values were changed.extrac_sky_points()
. Now, dist_to_plan
works as intended.find_sky_pixels_nonnull()
gains intercept
and w
.fit_cie_sky_model()
output was simplified, it does not return a raster anymore. It has to be calculated from the model with cie_sky_model_raster()
.interpolate_sky_points()
changes g
for r
. This acknowledge a change made in the code but not reflected in the arguments or documentation. The change was to approximate the function as much as possible to the Lang et al. (2010) method in which this function was based.extract_sky_points()
due to a change on the behavior of large data.frame naming.ootb_obia()
gains w_red
.ootb_sky_reconstruction()
was updated.row_col_from_zenith_azimuth()
and zenith_azimuth_from_row_col()
now uses different arguments because they were reprogrammed to overcome limitations in azimuth angle computations and unintentional side effects.thr_mblt()
is former thr_image()
.ootb_obia()
gains gamma
## Minor improvements and fixesootb_mblt()
now can detect when find_sky_pixels()
fails to deliver a good mask, and switch to find a mask by applying a global threshold calculated with IsoData.This last method will works well since the failure of find_sky_pixels()
is associated with extremely open forest, in which circumstances it will not produce comission errors.local_fuzzy_thresholding()
was fixed. This affected the main function enhance_caim()
since it internally uses local_fuzzy_thresholding()
. If possible, results from scripts using local_fuzzy_thresholding()
or enhace_caim()
should be recalculated with this new version.azimuth_image()
gains rotation
, which allows processing images with the top oriented to any known azimuth angle. Previously, by default it assumed that the top was oriented to the north.chessboard()
provides chessboard segmentation.cie_sky_model_raster()
produces CIE sky images of any resolution from custom parameterized CIE sky models. The CIE sky model implementation is based on Pascal code by Mait Lang.colorfulness()
provides a method to quantify image colorfulness.deffuzify()
is an alternative to apply_thr()
for turning fuzzy classification into Boolean.extract_dn()
facilitates the extraction of digital numbers from canopy photographs. The extraction is based on raster coordinates obtained automatically with extract_sky_points()
or manually with third-party software.extract_rl()
facilitates the extraction of relative luminance from hemispherical photographs. This function uses objects from extract_sky_points()
and returns objects essential to fit_cie_sky_model()
.extract_sky_points()
to automatically extract sky points from canopy photographs.extract_sun_coord()
to automatically extract sun coordinates from canopy photographs. Objects returned by this function are essential to fit_cie_sky_model()
.find_sky_pixels_nonnull_criteria()
offers a method for fine-tuning working binarized images, which are the input of many functions, such as extract_sky_points()
and extract_sun_coord()
. The method is based on the assumption that the threshold can be tuned as long as no new cells with zero gaps are obtained (the so-called null cells).fisheye_to_pano()
provides a method to reproject from hemispherical to cylindrical.fit_cie_sky_model()
uses maximum likelihood to estimate the coefficients of the CIE sky model that best fit to data sampled from a canopy photograph. Then, those coefficients can be used to produce and image with cie_sky_model_raster()
.fit_coneshaped_model()
now works with the point-like data objects returned by extract_rl()
and returns a function that can easily produce a raster when SpatRaster objects are provided as arguments. As a result, the function is faster and more versatile.
r <- read_caim()
z <- zenith_image(ncol(r), lens("Nikon_FCE9"))
a <- azimuth_image(z)
g <- sky_grid_segmentation(z, a, 10)
bin <- find_sky_pixels(r, z, a)
sky_points <- extract_sky_points(r, bin, g)
sky_points <- extract_rl(r, z, a, sky_points, NULL)
model <- fit_coneshaped_model(sky_points$sky_points)
model$fun(60, 10)
model$fun(z, a)
interpolate_sky_points()
provides a method to produce raster images from point-like data, such as the objects returned by extract_dn()
or extract_rl()
.Mask_sunlit_canopy()
is a wrapper function around membership_to_color()
that facilitates masking sunlit canopy.obia()
is a revised version of the object-based image analysis presented in doi:10.1109/lgrs.2015.2425931.ootb_obia()
is a revised version of the full workflow presented in doi:10.1109/lgrs.2015.2425931, which includes enhance_caim()
and obia()
.ootb_sky_reconstruction()
provides an easy to use function that will build an above canopy image from a single below canopy image, by means of fit_cie_sky_model()
and interpolate_sky_points()
.polar_qtree()
provides quad-tree segmentation in the polar space.qtree()
provides classical quad-tree segmentationNew thr_isodata()
is an alternative implementation of the IsoData method from the autothresholdr package.
apply_thr()
turns NA values from r
to 0. This allows to quickly produce binarized images without NA values.calc_zenith_raster_coord()
is former calc_zenith_raster_coordinates()
.enhance_caim()
gains thr
and fuzziness
, and default values for all arguments except caim
. This makes the functions easier for new users and more flexible for advanced users.expand_noncircular()
now produces the expected output when zenith_colrow
is far from the image center, not only when it is close to it.extract_feature()
gains ignore_label_0
since it cannot handle NA values as expected after changing dependency from raster to terra.find_sky_pixels()
now uses sample size percentage.fisheye_to_equidistant()
is former reproject_to_equidistant()
. Now the resolution of the output is 1, and the extension is derived from radius
. Previously, and incorrectly, the resolution was different from 1 since while the dimension was computed from radius
, as it should, the extension was taken from z
.fix_reconstructed_sky()
is former fix_predicted_sky()
.normalize()
gains force_range
and defaults values for mn
and mx
.ootb_mblt()
now uses find_sky_pixels_nonnull_criteria()
and gains two arguments, bin
and fix_sky_cs
, which allows quick customization.read_caim()
now is allowed to read any raster image that terra::raster()
can read. Of course, the georeferencing is turned off by assigning a local projection and manipulating extension and resolution, as usual.
regional_thresholding()
, method
gains the thr_isodata method.As a consequence of changing dependency from raster to terra, rings_segmentation()
, sectors_segmentation()
, and sky_grid_segmentation()
return 0 outside the circular image instead of NA.