# Segmentation

This page gives an overview of the segmentation model **ImageDataExtractor** used to detect particles, as well as how it is used as a standalone segmentation model *outside* of a data extraction context.

## Overview

**ImageDataExtractor** uses a segmentation method called BPartIS, which is a Bayesian deep neural network trained to segment particles in electron microscopy images. By default, this is run in Bayesian mode, which affords more accurate segmentations at the cost of some speed.

## Usage

```
>>> import cv2
>>> from imagedataextractor.segment import ParticleSegmenter
>>> segmenter = ParticleSegmenter(bayesian=True, tu=0.0125, n_samples=50, device='cpu')
>>> image = cv2.imread('<path/to/image>') # PIL can also be used
>>> segmentation, uncertainty, _ = segmenter.segment(image)
```

- The segmenter can be run in discriminative mode by setting
`bayesian=False`

.
`tu`

is the uncertainty threshold beyond which particles are classed as false positives (Bayesian mode only).
`n_samples`

is the number of Monte Carlo samples used when performance Bayesian inference during prediction (Bayesian mode only).
- The segmenter can be run on a GPU, by setting
`device='cuda'`

.