--- title: "Quickstart" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Quickstart} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5 ) ``` Welcome to BioThermR! BioThermR helps you process thermal images for biological research. This guide covers the core loop: Import -\> Segment -\> Measure -\> Visualize. First, load the package: ```{r setup} library(BioThermR) library(ggplot2) ``` ## 1. Import Thermal Data BioThermR includes example data to help you get started quickly. We will load a sample `.raw` thermal file provided with the package. ```{r import_real} # 1. Locate the example file provided with BioThermR raw_path <- system.file("extdata", "C05.raw", package = "BioThermR") # 2. Read the thermal data using read_thermal_raw obj <- read_thermal_raw(raw_path) # 3. Quick sanity check # This confirms the data is loaded and has the correct dimensions print(paste("Filename:", obj$meta$filename)) print(paste("Dimensions:", obj$meta$dims[1], "x", obj$meta$dims[2])) ``` ## 2. Visualize Raw Data Let's look at the raw image. Notice the background is around 28°C (purple/black) and the subject is \>32°C (yellow/red). ```{r visualize_raw_data} plot_thermal_heatmap(obj, use_processed = FALSE) + ggtitle("Raw Thermal Image") ``` ## 3. Automated Segmentation Instead of manually guessing a temperature threshold, BioThermR can automatically separate the subject from the background using **Otsu's method** and morphological operations. This is particularly useful for batch processing where lighting or background temperatures might vary slightly. ```{r segment_auto} # Apply automated segmentation # method = "otsu": Automatically calculates the best threshold # keep_largest = TRUE: Removes small noise artifacts, keeping only the animal obj <- roi_segment_ebimage(obj, method = "otsu", keep_largest = TRUE) # Visualize the result (Processed Data) # Note how the background is now clean (NA) plot_thermal_heatmap(obj, use_processed = TRUE) + ggtitle("Auto-Segmented Image") ``` ## 4. Calculate Statistics Now that the background is gone (set to NA), we can calculate accurate body temperature metrics. ```{r calculate_statistics} # Compute Min, Max, Mean, Median, etc. obj <- analyze_thermal_stats(obj) # Show the results print(obj$stats) ``` ## 5. Batch Processing & Montage BioThermR shines when processing large datasets. The package includes **30 sample raw images** in the `extdata` folder. We will load, segment, and visualize all of them in a few lines of code. ```{r batch_process, fig.width=8, fig.height=6} # 1. Get the path to the folder containing the 30 raw files data_folder <- system.file("extdata", package = "BioThermR") print(paste("Reading batch from:", data_folder)) # 2. Read the entire batch # Note: We use pattern = ".raw" to ensure we only load the raw thermal files batch_list <- read_thermal_batch(data_folder, pattern = "\\.raw$") # 3. Batch Segmentation (Automated) # We use lapply to apply the 'roi_segment_ebimage' function to every image in the list # This automatically removes the background for all 30 mice batch_list_clean <- lapply(batch_list, roi_segment_ebimage) # 4. Visualization A: Gap-Free Montage p1 <- plot_thermal_montage(batch_list_clean, ncol = 5, padding = 2, text_size = 3) + ggtitle("Montage View: 30 Mice") print(p1) # 5. Visualization B: Thermal Cloud p2 <- plot_thermal_cloud(batch_list_clean, spread_factor = 1.5, jitter_factor = 0.5, show_labels = TRUE) + ggtitle("Thermal Cloud: Population Overview") print(p2) ``` ## 6. Compile Statistics to Data Frame Finally, we extract the temperature metrics (Mean, Max, Min, etc.) from all 30 segmented images and compile them into a single table. This data frame is ready for statistical analysis (ANOVA, t-test) or export to CSV. ```{r batch_stats} # 1. Calculate stats for each image in the list # This adds a 'stats' slot to each BioThermR object batch_list_stats <- lapply(batch_list_clean, analyze_thermal_stats) # 2. Compile into a tidy data frame # Rows = Images, Columns = Metrics df_results <- compile_batch_stats(batch_list_stats) # 3. View the first few rows head(df_results) ```