Short Description

This plug-in implements fast active surfaces for 3D image segmentation. Their representation in terms of spline surfaces allows for a natural and intiutive manipulation of the surface.


This software implements a fast active-contour model (a.k.a. snake) for image segmentation in 3D microscopy. The proposed 3D snake can approximate blob-like objects with good accuracy and can perfectly reproduce spheres and ellipsoids, irrespective of their position and orientation. The modification of one control point affects a limited region of the snake surface, which favors intuitive interactions with the user. Since our shape model is fully characterized by few control points, the design of customized shapes becomes possible by simple manipulation of these points in the same way that control points are used in the NURBS meshes typical of computer-aided industrial designs.

Written by Ricard Delgado-Gonzalo and Virginie Uhlmann at the Biomedical Image Group (BIG), EPFL, Switzerland.

Technical Details

Among all different possible curve representations, we use a B-spline representation characterized by control points. These points (red/green crosses) define a control surface that controls the continuous representation of the snake (reddish wireframe). The evolution of the curve is formulated as a minimization problem. The associated cost function is called snake energy. In our case we add up a combination of contour and region energies (i.e., α Econtour + (1-α) Eregion) and a combination of internal energies (i.e., Eboundary + γ Estiffness).

  • The contour energy corresponds to the integral of the projection of the image gradient onto the curve. This energy uses a smoothed version of the input image with a Gaussian kernel of standard deviation σ.
  • The region energy maximizes the difference of intensity between the region enclosed by the curve, and the intensity of a region within and an extended shell.
  • The boundary energy keeps the snake away from the borders of the image.
  • The stiffness energy prevents the surface from twisting and self-intersecting.

For a formal definition of the different energy terms as well as the B-spline representation, refer to the publications on the reference section.



The plug-in requires no image at launch. All types of 3D images (i.e., z-stacks) are accepted. For 2D images and 2D sequences consider using our Active Cells plug-in instead. In the case of multi-channel images, the processing is performed on the channel selected on the main plug-in interface.

Main Panel

The main interface window is divided in four differentiated panels: the image panel, the snake options panel, the display options panel, and the interaction panel. When the plug-in is initiated, each panel is set to basic mode. In this mode, only the most important options are shown. Each panel switches to advanced mode when the user clicks on any empty region of the panel (see Fig. 1 and Fig. 2).

Figure 1. Main panel in basic mode. Figure 2. Main panel in advanced mode.

Image panel

This panel contains the options and parameters related to the active image; that is, the image that is being analyzed. When a new image is selected, the parameters in the panel update accordingly.

  • Image: This non-editable text field contains the name of the active image.
  • Channel: This option determines the channel in which the processing is performed. The combo box updates automatically when a different image is selected.
  • Smoothing: Standard deviation σ of the 3D Gaussian kernel that is used to smooth the image when computing the contour energy. The filtering is applied isotropically.

Snake options panel

This panel contains the options and parameters related to the active snake; that is, the snake that the user can interact with. When a new snake is selected or created, the parameters in the panel update accordingly.

  • Target brightness: This option determines if the snake will be attracted to Dark or Bright targets.
  • Control points: The parameter determines the number of control points, it is not the number itself. I we denote this parameter M, the total number of control points displayed on the image is M*(M-1)+6.
  • Energy type: This option determines if the snake evolves following the Contour energy, the Region energy, or a Mixture of both.
  • Alpha: Trade-off parameter that balances the contribution of the contour energy and the region energy when the mixture is used. The values of α are inside the interval [0,1].
  • Gamma: Trade-off parameter that balances the contribution of the stiffness energy. The values of γ must be greater or equal than zero.
  • Max iterations: Number of iterations of the optimizer when evolving the snake.
  • Immortal: If checked, the optimizer will stop when the snake has totally converged; that is, when the snake has reached the minimum of the energy functional.

Display options panel

This panel contains the options and parameters related to the visualization of the active snake; the snake that the user can interact with. When a new snake is selected or created, the parameters in the panel update accordingly.

  • Mesh resolution: This option determines the density of the wireframe overlaid onto the active image. Three options are available: Low, Normal, High.
  • Mesh thickness: This parameter determines the thickness of the lines composing the wireframe of the snake as well as the control points. The values of are inside the interval [1,10].
  • Mesh transparency: In a 2D viewer, this parameter controls which lines of the snake wireframe are rendered in the overlay. The lines crossing the current z-slice are always displayed and they become transparent the further they are from the current z-slice. The minimum value of this parameter is 1, where the complete wireframe is rendered.
  • Show evolution: If checked, when the snake is being optimized, the intermediate steps will be rendered onto the screen.

Interaction panel

This panel contains a set of buttons for creating, interacting, and deleting snakes.

The ‘plus’ button creates a new snake in the active image with the parameters of the Snake Options Panel. The snake is initialized in the center of the image.
When this tool is selected, the mouse interaction switches to move mode. When the cursor is on top of a control point, it will become green (selected) informing that it is draggable. If all control points appear as selected, the curve itself will be draggable.
When this tool is selected, the mouse interaction switches to 2D resizing mode. To resize the snake, drag it. All control points will appear as selected and the surface will be scaled with respect to the center of gravity of the snake within the selected interaction plane (XY, YZ, or XZ).
When this tool is selected, the mouse interaction switches to rotation mode. To rotate a snake, drag it. All control points will appear as selected and the surface will be rotated perpendicular to the selected interaction plane (XY, YZ, or XZ).
The ‘play’ button (a right-pointing black triangle) is used to start optimizing the active snake.
The ‘ff’ button (a double right-pointing black triangle) is used to start optimizing in parallel all snakes within the active image.
The “trash bin” button erases the active snake from the image.

User Interaction

Any snake can be manipulated thanks to the combination of mouse actions and the set of tools present in the Interaction Panel. The image canvas provides real-time feedback of how the actions are being performed.

Activate snake

A snake within an image is said to be active when it can be manipulated by mouse actions. To activate a snake, click anywhere within the region enclosed by the snake. Then, the associated control points will appear, and the previous active snake are set to inactive.

Move a control point

To move a control point, simply drag it. The point closest to where you clicked will change color and be moved to the position where you release the mouse.

Move a snake

To move a snake, drag it within the image. All the control points of the selected snake will change color and be moved to the position where you release the mouse. Alternatively, you can use the keyboard arrow keys to get a finer control over the position of the snake.

Copy/paste a snake

To copy the shape and attributes of the active snake, press Ctrl+C. Press Ctrl+V to paste it in the active image. Note: the copied snake can be pasted in a different image from where it was originally copied.

Menu bar


  • Generate mask: Creates a binary image of the same size than the active image with a reasterization of the volume enclosed by the surface of the snake.


  • Documentation (online): This is a link to this manual in the official Icy repository.
  • About: Opens a window with the logo of the plug-in.


R. Delgado-Gonzalo, V. Uhlmann, D. Schmitter, M. Unser, “Snakes on a Plane: A Perfect Snap for Bioimage Analysis,” IEEE Signal Processing Magazine, vol. 32, no. 1, pp. 41-48, January 2015.

R. Delgado-Gonzalo, N. Chenouard, M. Unser, “Spline-Based Deforming Ellipsoids for Interactive 3D Bioimage Segmentation,” IEEE Transactions on Image Processing, vol. 22, no. 10, pp. 3926-3940, October 2013.

R. Delgado Gonzalo, “Segmentation and Tracking in High-Throughput Bioimaging,” Swiss Federal Institute of Technology Lausanne, EPFL Thesis no. 5657 (2013), 186 p., March 15, 2013.

R. Delgado-Gonzalo, N. Chenouard, M. Unser, “Fast Parametric Snakes for 3D Microscopy,” Proceedings of the Ninth IEEE International Symposium on Biomedical Imaging: From Nano to Macro (ISBI’12), Barcelona, Spain, May 2-5, 2012.


This work would not have been possible without the contribution of

  • Nicolas Chenouard (
  • Philippe Thévenaz (
  • Emrah Bostan (
  • Ulugbek S. Kamilov (
  • Ramtin Madani (
  • Masih Nilchian (
  • Cédric Vonesch (
  • Virginie Uhlmann (
  • Michael Unser (

2 reviews on “Active Cells 3D

  1. D
    The review author didn't let any comment.
  2. Fabrice de Chaumont
    Very simple and intuitive. The Youtube example is a good idea to better understand how to use the plugin. Still, the nyan cat background is very ugly :)

Leave a Review

Leave a review
Cancel review
View full changelog
Close changelog


  • Version • Released on: 2015-05-24 19:00:15

    - Includes subdivision methods

  • Version • Released on: 2015-02-11 23:54:35

    - Corrected deprecated methods in the Protocols
    - Fixed some issues in the protocols

  • Version • Released on: 2014-11-30 15:56:23

    - Added interaction with the control points in the VTK viewer

  • Version • Released on: 2014-08-07 20:16:13

    - Fixed bug that made it crash with OrthoViewer

  • Version • Released on: 2014-05-03 01:31:49

    - Adapted to VTK6

  • Version • Released on: 2014-04-01 23:27:17

    Minor update

  • Version • Released on: 2013-12-09 11:20:21

    Adjusted to the new ROI mechanisms of Icy.

  • Version • Released on: 2013-12-04 13:52:56

    Performance improvements

  • Version • Released on: 2013-10-30 19:55:57

    Modified for icy 1.4

  • Version • Released on: 2013-10-24 17:00:41

    Rolled back to Java 6

  • Version • Released on: 2013-10-24 14:40:30

    - Updated to Java 1.6
    - Incorporated protocol

  • Version • Released on: 2013-10-22 15:27:34

    Updated dependencies

  • Version • Released on: 2013-05-29 15:48:36

    - Modified deprecated methods in Icy 1.3.6 (related to AnchorListeners).
    - Modified deprecated methods in Icy 1.3.6 (related to painters).
    - Modified interaction with mouse in the 3D canvas in order to allow the MouseListener methods to be called with null parameter(s).
    - Implemented getPerimeter method from ROI3D class.
    - Updated 'online documentation' element from the menu bar. Now it points to the documentation page of Icy.
    - Updated javadoc.

  • Version • Released on: 2013-05-21 10:48:38

    Minor improvements

  • Version • Released on: 2013-05-08 13:51:14

    - Fixed a bug in which the new snake did not comply with the active display settings.

  • Version • Released on: 2013-05-06 19:02:14

    - Introduced a new panel in the main interface in order to control some display properties in the viewers (mesh resolution, transparency, etc.).

    - Added key controls to modify the position of the snake with the arrows.

    - Added a method to initialize the snake automatically from a binary mask (experimental).

    - Updated javadoc.

    - Fixed issues with the "About" logo.

  • Version • Released on: 2013-04-26 10:32:13

    - Code reorganization. Some classes have been moved to the SDK.
    - Performance improvements

  • Version • Released on: 2013-04-19 17:04:24

    - Added the possibility of copying and pasting snakes.

  • Version • Released on: 2013-04-17 16:25:06

    - Modified the sampling scheme.
    - Updated javadoc.

  • Version • Released on: 2013-04-11 11:36:14

    - Rolled back to adjust to release Icy branch

  • Version • Released on: 2013-04-11 10:39:23

    - Fixed deprecated methods.
    - Added javadoc 7 style

  • Version • Released on: 2013-03-01 10:51:14

    Corrected bug that was forcing the initial size

  • Version • Released on: 2013-01-17 11:52:58

    Bug fixes

  • Version • Released on: 2013-01-06 14:25:29
  • Version • Released on: 2012-11-06 09:35:31

    Removed the 3D rendering of the control points

  • Version • Released on: 2012-11-05 16:25:11
  • Version • Released on: 2012-11-02 08:58:35