propagate {EBImage} | R Documentation

## Voronoi-based segmentation on image manifolds

### Description

R implementation of the Voronoi-based image segmentation on image manifolds [2].

### Usage

        # S4 Method for Image-class

        propagate(x, seeds, mask=NULL, lambda=0.005, ext=1)

### Arguments

`x`
  An object of `Image-class` to be segmented, in the `Grayscale` mode.
`seeds`
  An object of `Image-class` of the same size as x in all three dimensions; in the `Grayscale` mode with integer-based object encoding, as returned by `watershed`. This image provides seed points for object detection.
`mask`
  An object of `Image-class` of the same size as x in all three dimensions; in the `Grayscale` mode. All zero regions will be excluded from object detection.
`lambda`
  A numeric value. The regularisation parameter for the distance calculations, determines the trade-off between the Euclidian distance in the image plane and the contribution of the gradient of the values in `x`. See details.
`ext`
  Extension of the neighborhood to estimate image gradient, in pixels in every direction from the central point, i.e. ext=1 means a 3x3 neighborhood.

### Value

An image of `Image-class`, with the same object indexing as `seeds`. No new objects are created, only those specified by seeds are propagated. Use `getObjects` to assign the feature matrix.

### Details

The method operates by computing a discretized approximation of the Voronoi regions for given seed points on a manifold with a metric controlled by local image features.

The metric is a Riemannian metric defined in terms of the image I and a regularization parameter lambda. With this metric the distance between pixels used to let the given seeds grow outwards (propagate) is

$d^2 = (grad(I)^2 + lambda * (dx^2 + dy^2)) / (lambda + 1)$

The gradient is calculated on a neighborhood of pixels (the width of which is controlled by the argument `ext`) to avoid relying on single (noisy) pixels. Lambda controls the weight of the Euclidian distance term. In case of large lambda, d turns into Euclidian distance in the `(x,y)`-plane. For small lambda, the distance will be dominated by the intensity gradient.

### Author

Original CellProfiler code: Anne Carpenter <carpenter@wi.mit.edu>, Thouis Jones <thouis@csail.mit.edu>, In Han Kang <inthek@mit.edu>.

Port for this package: Oleg Sklyar <osklyar@ebi.ac.uk> and Wolfgang Huber <huber@ebi.ac.uk>.

### License

The underlying `C++` code is based on code from CellProfiler [1,3]. An LGPL license was granted by Thouis Jones to use this part of CellProfiler's code for the `propagate` function.

### References

`[1]` A. Carpenter, T.R. Jones, M.R. Lamprecht, C. Clarke, I.H. Kang, O. Friman, D. Guertin, J.H. Chang, R.A. Lindquist, J. Moffat, P. Golland and D.M. Sabatini, "CellProfiler: image analysis software for identifying and quantifying cell phenotypes", Genome Biology 2006, 7:R100

`[2]` T. Jones, A. Carpenter and P. Golland, "Voronoi-Based Segmentation of Cells on Image Manifolds", CVBIA05 (535-543), 2005

`[3]` CellProfiler: http://www.cellprofiler.org

### See Also

`Image-class, watershed, getObjects`

### Examples

        if ( interactive() ) {
          ddir <- paste( system.file(package="EBImage"), "images", sep="/" )
          a <- read.image( paste(ddir, c("A04w0.jpg", "A04w1.jpg"), sep="/") )
          rgb <- channel(a[,,1],"asred") + channel(a[,,2],"asgreen")

          ## Not run: detecting nuclei by watershed
          t <- thresh( blur(a[,,2], 4, 2), 15, 15)
          t <- opening( closing(t, morphKern(9)) )
          w <- watershed( distmap(t) )

          ## Not run: generating mask for propagate
          mask <- thresh( a[,,1], 50, 50, -0.01)
          mask <- closing( mask, morphKern(13) )
          mask <- opening( mask, morphKern(11) )
          mask <- erode(mask)

          ## Not run: propagate with the mask and gradient-driven metric
          wx <- propagate( a[,,1], w, mask, 0.0001, 2)
          prev <- paintObjects(wx, paintObjects(w, rgb))
          display(prev)

          ## Not run: pure Voronoi: no mask and almost no gradient term in metric
          wx1 <- propagate( a[,,1], w, NULL, 1e8, 2)
          prev1 <- paintObjects(wx1, rgb)
          display(prev1)
        }

[Package EBImage version 2.0.1 Index]