propagate              package:EBImage              R Documentation

_V_o_r_o_n_o_i-_b_a_s_e_d _s_e_g_m_e_n_t_a_t_i_o_n _o_n _i_m_a_g_e _m_a_n_i_f_o_l_d_s

_D_e_s_c_r_i_p_t_i_o_n:

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

_U_s_a_g_e:

       ## S4 method for signature 'Image, IndexedImage':
       propagate(x, seeds, mask=NULL, lambda=0.1, 
          ext=1, seed.centers=FALSE, ...)

_A_r_g_u_m_e_n_t_s:

       x: An object of 'Image' to be segmented, in the 'Grayscale'
          mode. 

   seeds: An object of 'IndexedImage' of the same size as x in all
          three dimensions. This image provides seed points for object
          detection. 

    mask: An object of 'Image' 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. 

seed.centers: If 'TRUE', only centers of the seed points are left in
          the seeds image supplied to the propagate algorithm. 

     ...: Reserved. 

_D_e_t_a_i_l_s:

     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 above formulation was proposed by Carpenter et al, however in
     the  calculation we use a modified distance measture, in which
     sharp gradients are downregulated and large distances additionally
     penalized. Effectively, we use the following formula:

     d = sqrt(grad(I)) + 1e-3*lambda * (dx^2+dy^2)^2

     The denominator is left out for speed reasons, so is the square
     root of the  distance.

     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.

_V_a_l_u_e:

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

_L_i_c_e_n_s_e:

     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.

_A_u_t_h_o_r(_s):

     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>.

_R_e_f_e_r_e_n_c_e_s:

     '[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

_S_e_e _A_l_s_o:

     ' IndexedImage, Image, watershed, getFeatures '

_E_x_a_m_p_l_e_s:

       
       ## load images of nuclei (seed points later)
       f <- paste( system.file(package="EBImage"), "images/Gene1_G.tif", sep="/" )
       ii = readImage(f)
       ## normalize images
       ii = normalize(ii, separate=TRUE)
       ## segment
       mask = thresh(ii, 25, 25, 0.02)
       ## refine segmentation with morphology filters
       mk3 = morphKern(3)
       mk5 = morphKern(5)
       mask = dilate(erode(closing(mask, mk5), mk3), mk5)
       ## index objects with 'watershed'
       io = watershed( distmap(mask), 1.5, 1)
       if (interactive()) display(io)

       ## load images of cells (the ones to segment with propagate)
       f <- paste( system.file(package="EBImage"), "images/Gene1_R.tif", sep="/" )
       xi = readImage(f)
       ## normalize images
       xi = normalize(xi, separate=TRUE)
       ## segment
       mask = thresh(xi, 40, 40, 0.0)
       ## refine segmentation with morphology filters
       mk7 = morphKern(7)
       mask = dilate(erode(closing(mask, mk7), mk5), mk7)
       ## index objects of xi with 'propagate' using ii as seeds
       xo = propagate(xi, io, mask, 1e-2, 2)
       if (interactive()) display(xo)
       

