Skip to content

Commit

Permalink
Deploying to gh-pages from @ 1aee194 🚀
Browse files Browse the repository at this point in the history
  • Loading branch information
jni committed Nov 20, 2023
1 parent fd5c0cc commit 7c26ec9
Show file tree
Hide file tree
Showing 34 changed files with 200 additions and 175 deletions.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
63 changes: 41 additions & 22 deletions dev/_modules/skan/csr.html

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions dev/_modules/skan/draw.html
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ <h1>Source code for skan.draw</h1><div class="highlight"><pre>
<span class="n">stats</span><span class="p">,</span>
<span class="o">*</span><span class="p">,</span>
<span class="n">image_cmap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">skeleton_color_source</span><span class="o">=</span><span class="s1">&#39;branch-type&#39;</span><span class="p">,</span>
<span class="n">skeleton_color_source</span><span class="o">=</span><span class="s1">&#39;branch_type&#39;</span><span class="p">,</span>
<span class="n">skeleton_colormap</span><span class="o">=</span><span class="s1">&#39;viridis&#39;</span><span class="p">,</span>
<span class="n">axes</span><span class="o">=</span><span class="kc">None</span>
<span class="p">):</span>
Expand All @@ -356,7 +356,7 @@ <h1>Source code for skan.draw</h1><div class="highlight"><pre>

<span class="sd"> - skeleton-id: each individual skeleton (connected component) will</span>
<span class="sd"> have a different colour.</span>
<span class="sd"> - branch-type: each branch type (tip-tip, tip-junction,</span>
<span class="sd"> - branch_type: each branch type (tip-tip, tip-junction,</span>
<span class="sd"> junction-junction, path-path). This is the default.</span>
<span class="sd"> - branch-distance: the curved length of the skeleton branch.</span>
<span class="sd"> - euclidean-distance: the straight-line length of the skeleton branch.</span>
Expand All @@ -374,8 +374,8 @@ <h1>Source code for skan.draw</h1><div class="highlight"><pre>
<span class="n">image</span> <span class="o">=</span> <span class="n">_normalise_image</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">image_cmap</span><span class="o">=</span><span class="n">image_cmap</span><span class="p">)</span>
<span class="n">summary</span> <span class="o">=</span> <span class="n">stats</span>
<span class="c1"># transforming from row, col to x, y</span>
<span class="n">coords_cols</span> <span class="o">=</span> <span class="p">([</span><span class="s1">&#39;image-coord-src-</span><span class="si">%i</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]]</span>
<span class="o">+</span> <span class="p">[</span><span class="s1">&#39;image-coord-dst-</span><span class="si">%i</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">coords_cols</span> <span class="o">=</span> <span class="p">([</span><span class="s1">&#39;image_coord_src_</span><span class="si">%i</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]]</span>
<span class="o">+</span> <span class="p">[</span><span class="s1">&#39;image_coord_dst_</span><span class="si">%i</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">coords</span> <span class="o">=</span> <span class="n">summary</span><span class="p">[</span><span class="n">coords_cols</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">reshape</span><span class="p">((</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
<span class="k">if</span> <span class="n">axes</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">axes</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">()</span>
Expand Down
12 changes: 7 additions & 5 deletions dev/_modules/skan/pipe.html
Original file line number Diff line number Diff line change
Expand Up @@ -297,13 +297,15 @@ <h1>Source code for skan.pipe</h1><div class="highlight"><pre>
<span class="p">)</span>
<span class="n">quality</span> <span class="o">=</span> <span class="n">shape_index</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">sigma</span><span class="o">=</span><span class="n">pixel_smoothing_radius</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;reflect&#39;</span><span class="p">)</span>
<span class="n">skeleton</span> <span class="o">=</span> <span class="n">morphology</span><span class="o">.</span><span class="n">skeletonize</span><span class="p">(</span><span class="n">thresholded</span><span class="p">)</span> <span class="o">*</span> <span class="n">quality</span>
<span class="n">framedata</span> <span class="o">=</span> <span class="n">csr</span><span class="o">.</span><span class="n">summarize</span><span class="p">(</span><span class="n">csr</span><span class="o">.</span><span class="n">Skeleton</span><span class="p">(</span><span class="n">skeleton</span><span class="p">,</span> <span class="n">spacing</span><span class="o">=</span><span class="n">scale</span><span class="p">))</span>
<span class="n">framedata</span> <span class="o">=</span> <span class="n">csr</span><span class="o">.</span><span class="n">summarize</span><span class="p">(</span>
<span class="n">csr</span><span class="o">.</span><span class="n">Skeleton</span><span class="p">(</span><span class="n">skeleton</span><span class="p">,</span> <span class="n">spacing</span><span class="o">=</span><span class="n">scale</span><span class="p">),</span> <span class="n">separator</span><span class="o">=</span><span class="s1">&#39;_&#39;</span>
<span class="p">)</span>
<span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;squiggle&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log2</span><span class="p">(</span>
<span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;branch-distance&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;euclidean-distance&#39;</span><span class="p">]</span>
<span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;branch_distance&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;euclidean_distance&#39;</span><span class="p">]</span>
<span class="p">)</span>
<span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;scale&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">scale</span>
<span class="n">framedata</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
<span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;mean-pixel-value&#39;</span><span class="p">:</span> <span class="s1">&#39;mean-shape-index&#39;</span><span class="p">},</span>
<span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;mean_pixel_value&#39;</span><span class="p">:</span> <span class="s1">&#39;mean_shape_index&#39;</span><span class="p">},</span>
<span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">errors</span><span class="o">=</span><span class="s1">&#39;raise&#39;</span><span class="p">,</span>
<span class="p">)</span>
Expand Down Expand Up @@ -384,9 +386,9 @@ <h1>Source code for skan.pipe</h1><div class="highlight"><pre>
<span class="n">image_stats</span><span class="p">[</span><span class="s1">&#39;branch density&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">framedata</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="n">image_stats</span><span class="p">[</span><span class="s1">&#39;area&#39;</span><span class="p">]</span>
<span class="p">)</span>
<span class="n">j2j</span> <span class="o">=</span> <span class="n">framedata</span><span class="p">[</span><span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;branch-type&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span><span class="p">]</span>
<span class="n">j2j</span> <span class="o">=</span> <span class="n">framedata</span><span class="p">[</span><span class="n">framedata</span><span class="p">[</span><span class="s1">&#39;branch_type&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span><span class="p">]</span>
<span class="n">image_stats</span><span class="p">[</span><span class="s1">&#39;mean J2J branch distance&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">j2j</span><span class="p">[</span><span class="s1">&#39;branch-distance&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
<span class="n">j2j</span><span class="p">[</span><span class="s1">&#39;branch_distance&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
<span class="p">)</span>
<span class="n">image_results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">image_stats</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">filename</span><span class="p">,</span> <span class="n">image</span><span class="p">,</span> <span class="n">thresholded</span><span class="p">,</span> <span class="n">skeleton</span><span class="p">,</span> <span class="n">framedata</span>
Expand Down
8 changes: 4 additions & 4 deletions dev/_sources/examples/complete_analysis.md.txt
Original file line number Diff line number Diff line change
Expand Up @@ -112,21 +112,21 @@ data['field number'] = data['filename'].apply(field_number)
Next, we filter the branches by using the [*shape index*](http://scikit-image.org/docs/dev/api/skimage.feature.html#skimage.feature.shape_index). We have used a very simple method to extract skeletons (see [Getting started](../getting_started/getting_started)), which does an acceptable job but creates a lot of false branches. Since the goal of Skan is to analyse skeletons, rather than generate them, we attempt to filter the branches, and measure only those that look like ridges according to the shape index.

```{code-cell} ipython3
ridges = ((data['mean-shape-index'] < 0.625) &
(data['mean-shape-index'] > 0.125))
ridges = ((data['mean_shape_index'] < 0.625) &
(data['mean_shape_index'] > 0.125))
```

For the same reason, we only look at junction-to-junction branches, which are more accurately identified by our method than junction-to-endpoint branches.

```{code-cell} ipython3
j2j = data['branch-type'] == 2
j2j = data['branch_type'] == 2
datar = data.loc[ridges & j2j].copy()
```

Finally, we make a new column of measurements in a more natural scale for our purpose.

```{code-cell} ipython3
datar['branch distance (nm)'] = datar['branch-distance'] * 1e9
datar['branch distance (nm)'] = datar['branch_distance'] * 1e9
```

## 3. Making the figure
Expand Down
16 changes: 8 additions & 8 deletions dev/_sources/examples/visualizing_3d_skeletons.md.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,17 @@ all_paths = [
```

```{code-cell} ipython3
paths_table = skan.summarize(skeleton)
paths_table = skan.summarize(skeleton, separator='_')
```

```{code-cell} ipython3
paths_table['path-id'] = np.arange(skeleton.n_paths)
paths_table['path_id'] = np.arange(skeleton.n_paths)
```

First, we color by random path ID, showing each path in a distinct color using the matplotlib "tab10" qualitative palette. (Coloring by path ID directly results in "bands" of nearby paths receiving the same color.)

```{code-cell} ipython3
paths_table['random-path-id'] = np.random.default_rng().permutation(skeleton.n_paths)
paths_table['random_path_id'] = np.random.default_rng().permutation(skeleton.n_paths)
```

```{code-cell} ipython3
Expand All @@ -70,7 +70,7 @@ skeleton_layer = viewer.add_shapes(
shape_type='path',
properties=paths_table,
edge_width=0.5,
edge_color='random-path-id',
edge_color='random_path_id',
edge_colormap='tab10',
)
```
Expand All @@ -85,9 +85,9 @@ napari.utils.nbscreenshot(viewer)
We can also demonstrate that most of these branches are in one skeleton, with a few stragglers around the edges, by coloring by skeleton ID:

```{code-cell} ipython3
skeleton_layer.edge_color = 'skeleton-id'
skeleton_layer.edge_color = 'skeleton_id'
# for now, we need to set the face color as well
skeleton_layer.face_color = 'skeleton-id'
skeleton_layer.face_color = 'skeleton_id'
```

```{code-cell} ipython3
Expand All @@ -99,10 +99,10 @@ napari.utils.nbscreenshot(viewer)
Finally, we can color the paths by a numerical property, such as their length.

```{code-cell} ipython3
skeleton_layer.edge_color = 'branch-distance'
skeleton_layer.edge_color = 'branch_distance'
skeleton_layer.edge_colormap = 'viridis'
# for now, we need to set the face color as well
skeleton_layer.face_color = 'branch-distance'
skeleton_layer.face_color = 'branch_distance'
skeleton_layer.face_colormap = 'viridis'
```

Expand Down
12 changes: 6 additions & 6 deletions dev/_sources/getting_started/getting_started.md.txt
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ Let's go back to the red blood cell image to illustrate this graph.

```{code-cell} ipython3
from skan import Skeleton, summarize
branch_data = summarize(Skeleton(skeleton0, spacing=spacing_nm))
branch_data = summarize(Skeleton(skeleton0, spacing=spacing_nm), separator='_')
branch_data.head()
```

Expand All @@ -156,7 +156,7 @@ Next come the coordinates in natural space, the Euclidean distance between the p
This data table follows the "tidy data" paradigm, with one row per branch, which allows fast exploration of branch statistics. Here, for example, we plot the distribution of branch lengths according to branch type:

```{code-cell} ipython3
branch_data.hist(column='branch-distance', by='branch-type', bins=100);
branch_data.hist(column='branch_distance', by='branch_type', bins=100);
```

We can see that junction-to-junction branches tend to be longer than junction-to-endpoint and junction isolated branches, and that there are no cycles in our dataset.
Expand All @@ -165,7 +165,7 @@ We can also represent this visually with the `overlay_euclidean_skeleton`, which

```{code-cell} ipython3
draw.overlay_euclidean_skeleton_2d(image0, branch_data,
skeleton_color_source='branch-type');
skeleton_color_source='branch_type');
```

## 2. Comparing different skeletons
Expand Down Expand Up @@ -194,7 +194,7 @@ def skeletonize(images, spacings_nm):


skeletons = skeletonize(images, spacings_nm)
tables = [summarize(Skeleton(skeleton, spacing=spacing))
tables = [summarize(Skeleton(skeleton, spacing=spacing), separator='_')
for skeleton, spacing in zip(skeletons, spacings_nm)]

for filename, dataframe in zip(files, tables):
Expand All @@ -210,8 +210,8 @@ Now, however, we have a tidy data table with information about the sample origin
```{code-cell} ipython3
import seaborn as sns

j2j = (table[table['branch-type'] == 2].
rename(columns={'branch-distance':
j2j = (table[table['branch_type'] == 2].
rename(columns={'branch_distance':
'branch distance (nm)'}))
per_image = j2j.groupby('filename').median()
per_image['infected'] = ['infected' if 'inf' in fn else 'normal'
Expand Down
Loading

0 comments on commit 7c26ec9

Please sign in to comment.