---
title: "STAPLE Example"
author: "Vignette Author"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{STAPLE Example}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(stapler)
```

## STAPLE Example

```{r sim_data, include=FALSE}
images = staple_example_data()
```

Simultaneous truth and performance level estimation (STAPLE) is a method for estimating a image segmentation.  Commonly an image is segmented from a set of raters or readers.  Here, we have an image that has been segmented from `r length(images)` different readers.  Each is a binary segmentation, which includes areas of lesions from one person's image.  

## Running STAPLE 

Here we will use STAPLE to fuse the data:

```{r data}
library(stapler)
images = staple_example_data()
res = staple(x = images, set_orient = TRUE)
print(names(res))
```


We use the `set_orient = TRUE` argument so that if the images headers are different, then they will be set to the same orientation when run.  The `staple` function will read in the images, reshape the data into a matrix, compute a prior for each element (voxel, in this case), run STAPLE.  The output probability image, labeled image (if probability $\geq 0.5$), and prior image are given in the output `res`.

## Multi-class STAPLE

STAPLE works with multi-class data as well.  The data do not need to be binary, but they need to be consistently labeled for each image/segmentation.  Here we will 

```{r}
x = matrix(rbinom(5000, size = 5, prob = 0.5), ncol = 1000)
table(x)
res_mult = staple_multi_mat(x)
ncol(res_mult$probability)
colnames(res_mult$probability)
```