View source: R/ifcb_extract_biovolumes.R
| ifcb_extract_biovolumes | R Documentation |
This function reads biovolume data from feature files generated by the ifcb-analysis repository (Sosik and Olson 2007)
and matches them with corresponding classification results or manual annotations. It calculates biovolume in cubic micrometers and
determines if each class is a diatom based on the World Register of Marine Species (WoRMS). Carbon content
is computed for each region of interest (ROI) using conversion functions from Menden-Deuer and Lessard (2000),
depending on whether the class is identified as a diatom.
ifcb_extract_biovolumes(
feature_files,
class_files = NULL,
custom_images = NULL,
custom_classes = NULL,
class2use_file = NULL,
micron_factor = 1/3.4,
diatom_class = "Bacillariophyceae",
diatom_include = NULL,
marine_only = FALSE,
diatom_equation = c("large", "all", "auto"),
threshold = "opt",
multiblob = FALSE,
feature_recursive = TRUE,
class_recursive = TRUE,
drop_zero_volume = FALSE,
feature_version = NULL,
use_cell_counts = FALSE,
single_cell_values = c(-1, 0),
carbon_conversion = c("roi", "cell"),
use_python = FALSE,
verbose = TRUE,
mat_folder = deprecated(),
mat_files = deprecated(),
mat_recursive = deprecated()
)
feature_files |
A path to a folder containing feature files or a character vector of file paths. |
class_files |
(Optional) A character vector of full paths to classification or manual
annotation files ( |
custom_images |
(Optional) A character vector of image filenames in the format DYYYYMMDDTHHMMSS_IFCBXXX_ZZZZZ(.png),
where "XXX" represents the IFCB number and "ZZZZZ" represents the ROI number.
These filenames should match the |
custom_classes |
(Optional) A character vector of corresponding class labels for |
class2use_file |
(Optional) A character string specifying the path to the file containing the |
micron_factor |
Conversion factor from microns per pixel (default: 1/3.4). |
diatom_class |
A character vector specifying diatom class names in WoRMS. Default: |
diatom_include |
Optional character vector of class names that should always be treated as diatoms,
overriding the boolean result of |
marine_only |
Logical. If |
diatom_equation |
A character string selecting which Menden-Deuer and Lessard (2000)
carbon-to-volume relationship to apply to diatoms. |
threshold |
A character string controlling which classification to use.
|
multiblob |
Logical. If |
feature_recursive |
Logical. If |
class_recursive |
Logical. If |
drop_zero_volume |
Logical. If |
feature_version |
Optional numeric or character version to filter feature files by (e.g. 2 for "_v2"). Default is NULL (no filtering). |
use_cell_counts |
Logical. If |
single_cell_values |
Integer vector of |
carbon_conversion |
A character string controlling how the Menden-Deuer and
Lessard (2000) relationships are applied. |
use_python |
Logical. If |
verbose |
Logical. If |
mat_folder |
|
mat_files |
|
mat_recursive |
Classification Data Handling:
If class_files is provided, the function reads class annotations from .mat, .h5, or .csv files.
If custom_images and custom_classes are supplied, they override classification file data (e.g. data from a CNN model).
If both class_files and custom_images/custom_classes are given, class_files takes precedence.
MAT File Processing:
If use_python = TRUE, the function reads .mat files using ifcb_read_mat() (requires Python + SciPy).
Otherwise, it reads .mat files with the default R reader.
Per-cell carbon conversion:
The Menden-Deuer and Lessard (2000) relationships are fitted per cell
(log pgC cell^-1 = log a + b * log V), but an IFCB biovolume describes a
whole region of interest, which for a chain-forming diatom is the whole
chain. Every one of these relationships has b < 1, so applying one to an
aggregated chain volume returns less carbon than applying it per cell and
summing. The two differ by a factor of n^(1-b): about 1.28 for an
8-cell chain and 1.43 for 20 cells under the large-diatom equation.
carbon_conversion = "cell" divides the ROI biovolume evenly among the
counted cells, which assumes the cells in a chain are of similar size.
It further assumes the ROI biovolume is cell volume. This is weakest for Chaetoceros, whose setae add to the measured ROI biovolume without being cell material, so the per-cell volume is overestimated and per-cell carbon is biased high; whole-ROI conversion biases it low instead. Neither is corrected here.
A data frame containing:
sample: The sample name.
classifier: The classifier used (if applicable).
roi_number: The region of interest (ROI) number.
class: The identified taxonomic class.
biovolume_um3: Computed biovolume in cubic micrometers.
carbon_pg: Estimated carbon content in picograms.
cell_count, cell_count_resolved (only when use_cell_counts = TRUE): the raw per-ROI
cell count and the resolved number of cells used for abundance.
Menden-Deuer Susanne, Lessard Evelyn J., (2000), Carbon to volume relationships for dinoflagellates, diatoms, and other protist plankton, Limnology and Oceanography, 45(3), 569-579, doi: 10.4319/lo.2000.45.3.0569.
Sosik, H. M. and Olson, R. J. (2007), Automated taxonomic classification of phytoplankton sampled with imaging-in-flow cytometry. Limnol. Oceanogr: Methods 5, 204–216.
Groves, G. J. J., Arthur, G., Bresnan, E., Whyte, C., Arce, P. and Davidson, K. (2026), Automatic enumeration of chains of marine diatoms using "You Only Look Once" - a machine learning approach. Journal of Plankton Research, 48(2), fbaf064, doi: 10.1093/plankt/fbaf064.
ifcb_read_features ifcb_is_diatom ifcb_summarize_cell_counts https://github.com/nodc-sweden/ifcb-pytorch-classify https://www.marinespecies.org/
## Not run:
# Using classification results:
feature_files <- "data/features"
class_files <- "data/classified"
biovolume_df <- ifcb_extract_biovolumes(feature_files,
class_files)
print(biovolume_df)
# Using custom classification result:
classes <- c("Mesodinium_rubrum",
"Mesodinium_rubrum")
images <- c("D20220522T003051_IFCB134_00002",
"D20220522T003051_IFCB134_00003")
biovolume_df_custom <- ifcb_extract_biovolumes(feature_files,
custom_images = images,
custom_classes = classes)
print(biovolume_df_custom)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.