class: center, middle, inverse, title-slide .title[ # Quantifying the shape of plants ] .subtitle[ ## using the Euler Characteristic Transform ] .author[ ###
Erik Amézquita
, Michelle Quigley, Tim Ophelders
Elizabeth Munch, Dan Chitwood
Dan Koenig, Jacob Landis
- ] .institute[ ### Computational Mathematics, Science and Engineering
Michigan State University
- ] .date[ ### 2022-01-25
-
In
inSilico Plants
4(1) 2022 ] --- background-image: url("../../img/endlessforms.png") background-size: 150px background-position: 89% 7% class: inverse # Plant morphology <div class="row"> <div class="column" style="max-width:50%"> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/oM9kAq0PBvw?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/V39K58evWlU?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </div> <div class="column" style="max-width:50%"> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/4GBgPIEDoa0?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/qkOjHHuoUhA?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </div> </div> <p style="font-size: 24px; text-align: right; font-family: 'Yanone Kaffeesatz'">Check out more 3D X-ray CT scans at <a href="https://www.youtube.com/@endlessforms6756">youtube.com/@endlessforms6756</a></p> --- # Topological Data Analysis (TDA) <div class="row"> <div class="column" style="max-width:25%; font-size: 15px;"> <img style="padding: 25px 0 35px 0;" src="../figs/S019_L0_1.gif"> <p style="font-size: 25px; text-align: center; color: DarkRed;"> Raw Data </p> <ul> <li> X-ray CT </li> <li> Point clouds </li> <li> Time series </li> <ul> </div> <div class="column" style="max-width:40%; padding: 0 25px 0 25px; font-size: 15px;"> <img src="../figs/ecc_X.gif"> <p style="font-size: 23px; text-align: center; color: DarkRed;"> Topological Summary </p> <ul> <li> Euler Characteristic </li> <li> Persistence diagrams </li> <li> Mapper/Reeb graphs </li> <ul> </div> <div class="column" style="max-width:35%; font-size: 15px;"> <img src="../figs/svm_mds_ect.gif"> <p style="font-size: 25px; text-align: center; color: DarkRed;"> Analysis </p> <ul> <li> Statistics </li> <li> Machine learning </li> <li> Classification/prediction </li> <ul> </div> </div> --- class: inverse <div class="row"> <div class="column" style="max-width:44%"> <a href="https://kizilvest.ru/20150827-v-kizilskom-rajone-nachalas-uborochnaya-strada/" target="_blank"><img style="padding: 0 0 0 0;" src="../figs/barley_kizilskoye.jpg"></a> <a href="https://ipad.fas.usda.gov/highlights/2008/11/eth_25nov2008/" target="_blank"><img style="padding: 0 0 0 0;" src="../figs/barley_ethiopia.gif"></a> <a href="https://www.doi.org/10.1007/978-1-4419-0465-2_2168" target="_blank"><img style="padding: 0 0 0 0;" src="../figs/barley_historical_expansion.jpg"></a> </div> <div class="column" style="max-width:44%"> <a href="https://www.resilience.org/stories/2020-03-09/the-last-crop-before-the-desert/" target="_blank"><img style="padding: 0 0 0 0;" src="../figs/barley_morocco.jpg"></a> <a href="https://www.tibettravel.org/tibetan-culture/highland-barley.html" target="_blank"><img style="padding: 0 0 0 0;" src="../figs/barley_seed_tibet.jpg"></a> <a href="https://www.nationalgeographic.co.uk/travel/2020/05/photo-story-from-barley-fields-to-whisky-barrels-in-rural-scotland" target="_blank"><img style="padding: 0 0 0 0;" src="../figs/barley_seed_scotland_cropped.jpg"></a> </div> <div class="column" style="max-width:8%; font-size: 15px;"> <p style="text-align: center; font-size: 30px; line-height: 1em;"> <strong> Barley across the world </strong></p> <p>Kiliskoye (Chelyabinsk, Russia)</p> <p>Marchouch (Rabat, Morocco)</p> <p>Aksum (Tigray, Ethiopia)</p> <p>Salar (Tsetang, Tibet)</p> <p>Expansion of the barley. </p> <p>Turriff (Aberdeenshire, Scotland)</p> <p style="font-size:9px;line-height: 1em;">Click on any picture for more details and credits</p> </div> </div> --- # Cross Composite II experiment .pull-right[ ![](../figs/composite_hybrid_mixture.jpg) ] --- background-image: url("../figs/composite_cross_v_02.svg") background-size: 425px background-position: 95% 90% # Cross Composite II experiment .pull-left[ ![](../figs/barley_world.jpg) - **28 parents/accessions** `\((F_0)\)` ] .pull-right[ ![](../figs/composite_hybrid_mixture.jpg) ] --- background-image: url("../figs/composite_cross_v_02.svg") background-size: 425px background-position: 95% 90% # Cross Composite II experiment .pull-left[ ![](../figs/barley_world.jpg) - **28 parents/accessions** `\((F_0)\)` - Do `\({28 \choose 2}\)` **hybrids** `\((F_1)\)` ] .pull-right[ ![](../figs/composite_hybrid_mixture.jpg) ] --- background-image: url("../figs/composite_cross_v_05.svg") background-size: 425px background-position: 95% 90% # Cross Composite II experiment .pull-left[ ![](../figs/barley_world.jpg) - **28 parents/accessions** `\((F_0)\)` - Do `\({28 \choose 2}\)` **hybrids** `\((F_1)\)` - **Self-fertilize** the resulting 379 hybrids ] .pull-right[ ![](../figs/composite_hybrid_mixture.jpg) ] --- background-image: url("../figs/composite_cross_v_05.svg") background-size: 425px background-position: 95% 90% # Cross Composite II experiment .pull-left[ ![](../figs/barley_world.jpg) - **28 parents/accessions** `\((F_0)\)` - Do `\({28 \choose 2}\)` **hybrids** `\((F_1)\)` - **Self-fertilize** the resulting 379 hybrids - Each line grows in a different part of an open field ] .pull-right[ ![](../figs/composite_hybrid_mixture.jpg) ] --- background-image: url("../figs/composite_cross_v_05.svg") background-size: 425px background-position: 95% 90% # Cross Composite II experiment .pull-left[ ![](../figs/barley_world.jpg) - **28 parents/accessions** `\((F_0)\)` - Do `\({28 \choose 2}\)` **hybrids** `\((F_1)\)` - **Self-fertilize** the resulting 379 hybrids - Each line grows in a different part of an open field **for 58 generations** ] .pull-right[ ![](../figs/composite_hybrid_mixture.jpg) ] --- # Raw Data: X-rays → Image Processing <div class="row"> <div class="column" style="max-width:51%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../figs/x3000_setup.jpg"> <p style="text-align: center;"> Proprietary X-Ray CT scan reconstruction </p> </div> </div> --- # Raw Data: X-rays → Image Processing <div class="row"> <div class="column" style="max-width:51%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../figs/x3000_setup.jpg"> <p style="text-align: center;"> Proprietary X-Ray CT scan reconstruction </p> </div> <div class="column" style="max-width:17.5%; color: Navy; font-size: 15px;"> <img src="../figs/S019_L0_1.gif"> <p style="text-align: center;"> 975 spikes </p> </div> </div> --- # Raw Data: X-rays → Image Processing <div class="row"> <div class="column" style="max-width:51%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../figs/x3000_setup.jpg"> <p style="text-align: center;"> Proprietary X-Ray CT scan reconstruction </p> </div> <div class="column" style="max-width:17.5%; color: Navy; font-size: 15px;"> <img src="../figs/S019_L0_1.gif"> <p style="text-align: center;"> 975 spikes </p> </div> <div class="column" style="max-width:20.5%; color: Navy; font-size: 15px;"> <img src="../figs/S017_L0_seed_10_0.gif"> <p style="text-align: center;"> 38,000 seeds </p> </div> </div> --- # Raw Data: X-rays → Image Processing <div class="row"> <div class="column" style="max-width:51%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../figs/x3000_setup.jpg"> <p style="text-align: center;"> Proprietary X-Ray CT scan reconstruction </p> </div> <div class="column" style="max-width:17.5%; color: Navy; font-size: 15px;"> <img src="../figs/S019_L0_1.gif"> <p style="text-align: center;"> 975 spikes </p> </div> <div class="column" style="max-width:20.5%; color: Navy; font-size: 15px;"> <img src="../figs/S017_L0_seed_10_0.gif"> <p style="text-align: center;"> 38,000 seeds </p> </div> </div> <div class="row"> <div class="column" style="max-width:35%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../figs/seed_orientation1.png"> <p style="text-align: center;"> Align all the seeds </p> </div> </div> --- # Raw Data: X-rays → Image Processing <div class="row"> <div class="column" style="max-width:51%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../figs/x3000_setup.jpg"> <p style="text-align: center;"> Proprietary X-Ray CT scan reconstruction </p> </div> <div class="column" style="max-width:17.5%; color: Navy; font-size: 15px;"> <img src="../figs/S019_L0_1.gif"> <p style="text-align: center;"> 975 spikes </p> </div> <div class="column" style="max-width:20.5%; color: Navy; font-size: 15px;"> <img src="../figs/S017_L0_seed_10_0.gif"> <p style="text-align: center;"> 38,000 seeds </p> </div> </div> <div class="row"> <div class="column" style="max-width:35%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../figs/seed_orientation1.png"> <p style="text-align: center;"> Align all the seeds </p> </div> <div class="column" style="max-width:55%; color: Navy; font-size: 15px;"> <img src="../figs/boxplot_all_traditional_h_transp.gif"> <p style="text-align: center;"> Traditional shape descriptors </p> </div> </div> --- # Topology: The Euler characteristic `\(\chi\)` `$$\chi = \#(\text{Vertices}) - \#(\text{Edges}) + \#(\text{Faces}).$$` <img src="../../tda/figs/euler_characteristic_2.png" width="400" style="display: block; margin: auto;" /> -- - Summarize **topological features** with the Euler-Poincaré formula `$$\chi = \#(\text{Connected Components}) - \#(\text{Loops}) + \#(\text{Voids}).$$` -- - The Euler characteristic is a **topological invariant**. --- # Euler Characteristic Curve (ECC) - Consider a cubical complex `\(X\subset\mathbb{R}^d\)` - And a unit-length direction `\(\nu\in S^{d-1}\)` -- - And the subcomplex containing all cubical cells below height `\(h\)` in the direction `\(\nu\)` `$$X(\nu)_h =\{\Delta \in X\::\:\langle x,\nu\rangle\leq h\text{ for all }x\in\Delta\}$$` -- - The Euler Characteristic Curve (ECC) of direction `\(\nu\)` is defined as the sequence `$$\{\chi(X(\nu)_h)\}_{h\in\mathbb{R}}$$` --- background-image: url("../figs/ecc_ver2.gif") background-size: 750px background-position: 50% 90% # Euler Characteristic Curve (ECC) - Consider a cubical complex `\(X\subset\mathbb{R}^d\)` - And a unit-length direction `\(\nu\in S^{d-1}\)` - And the subcomplex containing all cubical cells below height `\(h\)` in the direction `\(\nu\)` `$$X(\nu)_h =\{\Delta \in X\::\:\langle x,\nu\rangle\leq h\text{ for all }x\in\Delta\}$$` - The Euler Characteristic Curve (ECC) of direction `\(\nu\)` is defined as the sequence `$$\{\chi(X(\nu)_h)\}_{h\in\mathbb{R}}$$` --- background-image: url("../figs/ect_ver2.gif") background-size: 800px background-position: 50% 88% ## Euler Characteristic Transform (ECT) - Repeat and concatenate for all possible directions. $$ `\begin{split} ECT(X):\; & S^{d-1} \to \mathbb{Z}^{\mathbb{R}}\\ &\nu\mapsto\{\chi(X(\nu)_h)\}_{h\in\mathbb{R}}. \end{split}` $$ -- - [**Theorem** (Turner, Mukherjee, Boyer 2014) & (Curry, Mukherjee, Turner, 2018)](http://arxiv.org/abs/1805.09782): The ECT is injective with a finite bound of necessary directions. --- background-image: url("../figs/S012_L2_Blue_33.png") background-size: 150px background-position: 99% 50% # Game plan - **Goal:** Classify 28 barley parental accessions using solely grain morphology information. - **3121** grains in total -- .pull-left[ <img src="../figs/pole_directions_p7_m12_crop.jpg" width="150" style="display: block; margin: auto;" /> ] .pull-right[ - 158 directions - 16 thresholds per direction - Every seed is associated a `\(158\times16=2528\)`-dim vector - Dimensions reduced with UMAP ] -- - Compare **3** sets of morphological descriptors Descriptor | No. of descriptors -----------|-------------------- Traditional | 11 Topological (ECT → UMAP) | ~~2528~~ → 12 Combined (Trad ⊕ Topo) | 23 -- - Sample randomly 75/25 training/testing sample for each accession. - Repeat the sampling and SVM computation 100 times and consider the average. --- # Classification of 28 lines with SVM <style type="text/css"> .tg {border-collapse:collapse;border-color:#93a1a1;border-spacing:0;margin:0px auto;} .tg td{background-color:#fdf6e3;border-bottom-width:1px;border-color:#93a1a1;border-style:solid;border-top-width:1px; border-width:0px;color:#002b36;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px; word-break:normal;} .tg th{background-color:#657b83;border-bottom-width:1px;border-color:#93a1a1;border-style:solid;border-top-width:1px; border-width:0px;color:#fdf6e3;font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden; padding:10px 5px;word-break:normal;} .tg .tg-2bhk{background-color:#eee8d5;border-color:inherit;text-align:left;vertical-align:top} .tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top} .tg .tg-gyvr{background-color:#eee8d5;border-color:inherit;font-size:100%;text-align:left;vertical-align:top} </style> <table class="tg"> <thead> <tr> <th class="tg-0pky">Shape descriptors</th> <th class="tg-0pky">No. of descriptors</th> <th class="tg-0pky">Precision</th> <th class="tg-0pky">Recall</th> <th class="tg-0pky">F1</th> </tr> </thead> <tbody> <tr> <td class="tg-2bhk">Traditional</td> <td class="tg-2bhk">11</td> <td class="tg-2bhk">0.57 ± 0.058</td> <td class="tg-2bhk">0.56 ± 0.019</td> <td class="tg-2bhk">0.55 ± 0.019</td> </tr> <tr> <td class="tg-0pky">Topological</td> <td class="tg-0pky">12</td> <td class="tg-0pky">0.75 ± 0.047</td> <td class="tg-0pky">0.75 ± 0.016</td> <td class="tg-0pky">0.74 ± 0.016</td> </tr> <tr> <td class="tg-2bhk">Combined</td> <td class="tg-2bhk">23</td> <td class="tg-2bhk">0.87 ± 0.031</td> <td class="tg-2bhk">0.86 ± 0.010</td> <td class="tg-2bhk">0.86 ± 0.010</td> </tr> </tbody> </table> <img src="../figs/avg_f1_combined_158_16_12_umap_horz.png" width="700" style="display: block; margin: auto;" /> --- # Traditional shape descriptors ![](../figs/trad_pca_2_dims_founders_spikes.jpg) --- # Topological shape descriptors + UMAP ![](../figs/umap_2_dims_founders_spikes.jpg) --- # Topological shape descriptors + KPCA ![](../figs/kpca_2_dims_founders_spikes.jpg) --- # Hidden topological shape information .pull-left[ - Analysis of variance to determine the most discerning directions and slices/thresholds. - The top crease on the seed is highly descriptive! <img src="../figs/kruskal_wallis_topo_summary.jpg" width="300" style="display: block; margin: auto;" /> ] -- .pull-right[ <img src="../figs/discerning_directions.png" width="225" style="display: block; margin: auto;" /> ![](../figs/arrow_seed_09_0.gif) ] --- # Into semi-supervised territory - Train an SVM with 100% of the founders `\((F_0)\)` - Classify the progeny `\((F_{18}\text{ and }F_{58})\)` to detect genotype enrichment .pull-left[ ![](../figs/histogram_combined_gen1_d158_T16_topounscaled_vert.svg) ] .pull-right[ ![](../figs/histogram_combined_gen7_d158_T16_topounscaled_vert.svg) ] --- class: center, inverse, middle # But wait! ## There is more ### Looking to strike some oil --- # If life gives you lemons... <div class="row"> <div class="column" style="max-width:38%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../../citrus/crc_pics/crc_diversity.jpg"> <p style="text-align: center;"> UCR Collaboration </p> </div> <div class="column" style="max-width:38%; color: Navy; font-size: 15px;"> <img style="padding: 2px 0 2px 0;" src="../../citrus/crc_pics/citrus_xrayct_scanning.jpeg"> <p style="text-align: center;"> 3D X-Ray CT scan </p> </div> <div class="column" style="max-width:23%; color: Navy; font-size: 15px;"> <img src="../../citrus/figs/SR01_CRC3289_12B-19-9_L01_raw.gif"> <p style="text-align: center;"> Raw </p> </div> </div> -- <div class="row" style="margin: 0 auto;"> <div class="column" style="max-width:20%; color: Navy; font-size: 15px;"> <img src="../../citrus/figs/SR01_L01_black_exocarp.gif"> <p style="text-align: center;"> Exocarp </p> </div> <div class="column" style="max-width:20%; color: Navy; font-size: 15px;"> <img src="../../citrus/figs/SR01_L01_black_rind.gif"> <p style="text-align: center;"> Mesocarp </p> </div> <div class="column" style="max-width:20%; color: Navy; font-size: 15px;"> <img src="../../citrus/figs/SR01_L01_black_endocarp.gif"> <p style="text-align: center;"> Endocarp </p> </div> <div class="column" style="max-width:20%; color: Navy; font-size: 15px;"> <img src="../../citrus/figs/SR01_L01_black_spine.gif"> <p style="text-align: center;"> Spine </p> </div> <div class="column" style="max-width:18%; color: Black; font-size: 15px;"> <ul> <li> 63 raw scans </li> <li> 51 different citrus species </li> <li> 166 different individuals </li> <ul> </div> </div> --- ## Isolating the oil glands of a sweet orange .pull-left[ ![](../../citrus/figs/SW04_L01_oil_glands.gif) - 500,000 voxels per orange ] -- .pull-right[ ![](../../citrus/figs/SW02_L00_center_oil_glands.gif) - About 18,000 gland centers detected - Number in the right ballpark - **We have a typical point cloud in `\(\mathbb{R}^3\)`.** ] --- ## Oil glands are closely linked to fruit development .pull-left[ ![](https://www.boredpanda.com/blog/wp-content/uploads/2020/06/5eec755907306_07f29bfovq551-png__700.jpg) <p style="font-size: 8px; text-align: right; color: Grey;"> Credits: <a href="https://www.boredpanda.com/life-cycles-pics/">BoredPanda</a></p> Developing cycle of a lemon ] .pull-right[ <iframe width="560" height="300" src="https://static-movie-usa.glencoesoftware.com/webm/10.1073/956/d916befc88029defb1ecef6c4a2fd83db89428d9/pnas.1720809115.sm02.webm" frameborder="0" allowfullscreen></iframe> <p style="font-size: 8px; text-align: right; color: Grey;"> Credits: <a href="https://doi.org/10.1073/pnas.1720809115">Smith <em>et al.</em> (2018)</a></p> - Cross-sectional view of a navel orange peel bending to the point of jetting. - Huge perfume and food industry behind essential oils ] --- class: inverse # There is even more <div class="row"> <div class="column" style="max-width:50%"> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/ikhuvGpJbeA?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </div> <div class="column" style="max-width:50%"> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/ceKnz-xhwgA?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </div> </div> .pull-left[ ![](../../arabidopsis/figs/col-0_x_leaf.gif) ] .pull-right[ ![](../../arabidopsis/figs/ecc_axis_X.gif) ![](../../arabidopsis/figs/ecc_axis_Z.gif) ] --- class: right, bottom, inverse background-image: url("../figs/acknowledgments.jpg") background-size: 1000px background-position: 50% 40% - [`egr.msu.edu/~amezqui3/barley/slides/uftda_2022.html`](https://www.egr.msu.edu/~amezqui3/barley/slides/fwcg_2021.html)