Wiki
Version 50 (Annamaria Kiss, 30/05/2017 15:39)
1 | 1 | Annamaria Kiss | {{TOC}} |
---|---|---|---|
2 | 45 | Annamaria Kiss | |
3 | 46 | Annamaria Kiss | h1. lsm3d - Tools for segmenting 3D images of plant tissues at multiple scales using the level set method |
4 | 45 | Annamaria Kiss | |
5 | 45 | Annamaria Kiss | One of the main technical challenges in the reconstruction of plant tissues from 3D confocal images remains the faithful segmentation at the cellular level. A typical issue with segmentation based on watershed methods is the weaker staining of some outer periclinal walls. This systematically causes segmentation errors as holes on the tissue surface. |
6 | 45 | Annamaria Kiss | |
7 | 45 | Annamaria Kiss | We detect the outer surface of the tissue using level set method (lsm_contour). We enhance the signal of the outer periclinal walls by the detected outer surface. Also, we propose a new edge function, based on second order derivatives of the image, for a level set used to segment the tissue at cellular level (lsm_cells). |
8 | 1 | Annamaria Kiss | |
9 | 47 | Annamaria Kiss | The "lsm3d" tools: |
10 | 45 | Annamaria Kiss | |
11 | 45 | Annamaria Kiss | - *lsm_contour* --> detects the outer surface of the tissue |
12 | 45 | Annamaria Kiss | - *lsm_cells* --> used to cellular segmentation or nuclei detection |
13 | 45 | Annamaria Kiss | |
14 | 45 | Annamaria Kiss | h2. Dependencies |
15 | 45 | Annamaria Kiss | |
16 | 45 | Annamaria Kiss | The levelset tools make use of the CImg image processing C++ library, which in turn needs Xlib library. Furthermore, the lsm_cells tool is parallelized using OpenMP. |
17 | 45 | Annamaria Kiss | |
18 | 45 | Annamaria Kiss | In particular, if you do not have Xlib on your computer, you may add it: |
19 | 45 | Annamaria Kiss | * on Ubuntu: |
20 | 45 | Annamaria Kiss | <pre> |
21 | 45 | Annamaria Kiss | sudo apt-get install libx11-dev |
22 | 45 | Annamaria Kiss | </pre> |
23 | 45 | Annamaria Kiss | * on Mac OS: |
24 | 45 | Annamaria Kiss | install xQuartz from www.xquartz.org |
25 | 45 | Annamaria Kiss | |
26 | 45 | Annamaria Kiss | h2. Download |
27 | 45 | Annamaria Kiss | |
28 | 45 | Annamaria Kiss | In a terminal go to the directory where you wish to download and install the tool |
29 | 45 | Annamaria Kiss | <pre> |
30 | 45 | Annamaria Kiss | cd Path_to_your_directory |
31 | 45 | Annamaria Kiss | </pre> and then download using svn |
32 | 45 | Annamaria Kiss | <pre> |
33 | 45 | Annamaria Kiss | svn --username $USER checkout http://forge.cbp.ens-lyon.fr/svn/levelsetmethod/lsm3D |
34 | 45 | Annamaria Kiss | </pre> |
35 | 45 | Annamaria Kiss | |
36 | 45 | Annamaria Kiss | |
37 | 45 | Annamaria Kiss | h2. Compile |
38 | 45 | Annamaria Kiss | |
39 | 45 | Annamaria Kiss | <pre> |
40 | 45 | Annamaria Kiss | cd lsm3D |
41 | 45 | Annamaria Kiss | ./lsm3D_compile.sh |
42 | 45 | Annamaria Kiss | </pre> |
43 | 45 | Annamaria Kiss | |
44 | 45 | Annamaria Kiss | The binaries will be in the lsm3D/bin folder. Add this folder to your PATH by adding in your .bashrc file |
45 | 45 | Annamaria Kiss | <pre> |
46 | 45 | Annamaria Kiss | export PATH=$PATH:Path_to_your_directory/lsm3D/bin |
47 | 45 | Annamaria Kiss | </pre> |
48 | 45 | Annamaria Kiss | |
49 | 49 | Annamaria Kiss | Troubleshooting if problems with compilation : |
50 | 49 | Annamaria Kiss | In the file lsm3d/lsm3D_compile.sh |
51 | 49 | Annamaria Kiss | - you might have to choose an appropriate compiler, which supports OpenMP. |
52 | 49 | Annamaria Kiss | - you might need to precise the location of the X11 library in the compilation options. |
53 | 45 | Annamaria Kiss | |
54 | 49 | Annamaria Kiss | |
55 | 45 | Annamaria Kiss | For more detailed information on the method and usage please see the [[Wiki]]. |
56 | 45 | Annamaria Kiss | |
57 | 1 | Annamaria Kiss | |
58 | 48 | Annamaria Kiss | h2. Methods and usage |
59 | 6 | Annamaria Kiss | |
60 | 30 | Annamaria Kiss | The main idea of the level set method in image segmentation is to evolve a contour until it fits a desired object in the image. A level set function (LSF) is defined on the image (one value per pixel), and the contour is defined as it's zero crossing points. The function is positive inside the contour and negative outside of it. At each time step, the values of the LSF are updated in each pixel, and thus the zero crossing points change and the contour evolves. The LSF's evolution is such that an energy is minimized, which in turn is usually based on the image properties (gradient, intensity...) and the geometrical aspects of the contour (curvature, size...). |
61 | 1 | Annamaria Kiss | |
62 | 6 | Annamaria Kiss | |
63 | 6 | Annamaria Kiss | h3. lsm_contour --> detects the outer surface of the tissue |
64 | 1 | Annamaria Kiss | |
65 | 31 | Annamaria Kiss | |
66 | 23 | Annamaria Kiss | !>lsm_contour_100.png!The LSF is initialized with a linear threshold, which roughly separates the background from the cells. The threshold is linear in order to adjust for the image intensity variation along the z-axis. The function takes +c0 values inside the initial contour and -c0 outside, the area in the contour being the background. The contour evolves attracted mainly by the maximum gradient, corresponding to the edge of the cell walls. There are also a curvature term, to obtain a smoother contour, and an accelerating area term to push the contour towards the boundaries. At each time step, the background growth is measured. The algorithm stops when the growth stays in a small interval near zero for ten consecutive iterations. |
67 | 1 | Annamaria Kiss | |
68 | 49 | Annamaria Kiss | *Usage* |
69 | 10 | Annamaria Kiss | |
70 | 10 | Annamaria Kiss | In order to check the syntax, just lounch the binary without any argument. It will give as output |
71 | 22 | Annamaria Kiss | <pre> |
72 | 29 | Annamaria Kiss | Usage : lsm_contour img t_up t_down a b smooth perUp perDown |
73 | 6 | Annamaria Kiss | Examples for parameter values: |
74 | 6 | Annamaria Kiss | ------------------------------ |
75 | 6 | Annamaria Kiss | img : grayscale image of cells, (.inr or .inr.gz) |
76 | 6 | Annamaria Kiss | Upper threshold : t_up = 20 |
77 | 6 | Annamaria Kiss | Down threshold : t_down = 5 |
78 | 6 | Annamaria Kiss | Area term : a = 0 (0.5, 1) |
79 | 6 | Annamaria Kiss | Curvature term : b = 0 (1) |
80 | 6 | Annamaria Kiss | Gaussian filter : smooth = 1 (0, if image already filtered) |
81 | 6 | Annamaria Kiss | Stop criteria : the contour evolution is in [perDown,perUp] for 10 consecutive iterations |
82 | 6 | Annamaria Kiss | perUp = 0.002, perDown = -0.002 |
83 | 6 | Annamaria Kiss | </pre> |
84 | 6 | Annamaria Kiss | |
85 | 33 | Annamaria Kiss | In order to test it on an image file "sample-stack.inr.gz", lounch the binary with parameters : |
86 | 6 | Annamaria Kiss | |
87 | 1 | Annamaria Kiss | <pre> |
88 | 33 | Annamaria Kiss | lsm_contour sample-stack.inr.gz 20 10 0 0 1 0.002 -0.002 |
89 | 1 | Annamaria Kiss | </pre> |
90 | 1 | Annamaria Kiss | |
91 | 33 | Annamaria Kiss | The detected contour is in the directory "sample-stack_LSMcont20-10a0b0s1". |
92 | 1 | Annamaria Kiss | |
93 | 26 | Annamaria Kiss | |
94 | 50 | Annamaria Kiss | h3. lsm_cells --> for cellular or nuclear segmentation |
95 | 1 | Annamaria Kiss | |
96 | 1 | Annamaria Kiss | !>lsm_cells_100.png!The detection of cell-shapes is done in 3 steps : |
97 | 15 | Annamaria Kiss | - eroding the watershed segmentation and initialize a function for each cell |
98 | 15 | Annamaria Kiss | - evolve independently each cell's contour, attract by the maximal gradient (the inside edge of the cell walls) |
99 | 12 | Annamaria Kiss | - evolve simultaneously every cell's contour, attract by the maximal intensity (center of the cell walls) |
100 | 1 | Annamaria Kiss | In the last step, every cell evolves for one iteration and then possible overlap is checked. An overlap region is considered not segmented. A cell can't evolve in an other cell area : overlap can only happen in a same iteration. At each iteration, the growth of the segmented areas is measured, and the algorithm stops when this growth becomes null. |
101 | 6 | Annamaria Kiss | |
102 | 49 | Annamaria Kiss | *Usage* |
103 | 6 | Annamaria Kiss | |
104 | 11 | Annamaria Kiss | You can recall the syntax any time by lounching the binary without any argument: |
105 | 6 | Annamaria Kiss | <pre> |
106 | 6 | Annamaria Kiss | Usage : lsm_cells img img_wat img_contour erosion [a b smooth lsm_type] |
107 | 6 | Annamaria Kiss | ----------------- |
108 | 6 | Annamaria Kiss | img : grayscale image of cells, (.inr or .inr.gz) |
109 | 6 | Annamaria Kiss | img_wat : image of seeds, (.inr or .inr.gz) |
110 | 6 | Annamaria Kiss | img_contour : mask, where cells do not evolve, (.inr or .inr.gz) |
111 | 6 | Annamaria Kiss | if 'None', then cells can evolve on the whole image |
112 | 6 | Annamaria Kiss | erosion : amount of erosion of seeds for initialisation (uint8) --> -2, 0, 2 |
113 | 6 | Annamaria Kiss | if 0, then no erosion or dilation |
114 | 6 | Annamaria Kiss | if negative, then a dilation is performed |
115 | 6 | Annamaria Kiss | a : area term (float) --> 0 or 0.5 or 1 (the default is 0.5) |
116 | 6 | Annamaria Kiss | if negative, the object retracts |
117 | 6 | Annamaria Kiss | if positive, the object inflates |
118 | 6 | Annamaria Kiss | b : curvature term (float) --> 0 or 1 (the default is 0) |
119 | 6 | Annamaria Kiss | gamma : scale parameter (float>0) --> 0.5 or 1 (the default is 1) |
120 | 6 | Annamaria Kiss | smooth : gaussian blur to apply to the image (int) --> 0 or 1 (the default is 0) |
121 | 6 | Annamaria Kiss | lsm_type : image, gradient or hessien based evolution --> 'i', 'g' or 'h' (the default is g) |
122 | 6 | Annamaria Kiss | </pre> |
123 | 6 | Annamaria Kiss | |
124 | 33 | Annamaria Kiss | Applying it to the image "sample-stack.inr.gz" as the level sets are initialised by the watershed segmentation of the same image |
125 | 1 | Annamaria Kiss | <pre> |
126 | 34 | Annamaria Kiss | lsm_cells sample-stack.inr.gz sample-stack-watershed.inr.gz 'None' 2 0.3 0 0.2 1 'h' |
127 | 32 | Annamaria Kiss | </pre> |
128 | 34 | Annamaria Kiss | you will get the new segmentation in the "sample-stack-watershed_cellLSM-d2-a0.3-b0-g0.2-s1-h" folder. Or if you would like to use a mask image as background, you can make the test with the previously detected contour as a mask, like |
129 | 32 | Annamaria Kiss | <pre> |
130 | 34 | Annamaria Kiss | lsm_cells sample-stack.inr.gz sample-stack-watershed.inr.gz sample-stack_LSMcont20-10a0b0s1/sample-stack_LSMcont20-10a0b0s1.inr.gz 2 0.3 0 0.2 1 'h' |
131 | 16 | Annamaria Kiss | </pre> |