diff --git a/_pages/about.md b/_pages/about.md index 4c01b1a..e1f8e0e 100644 --- a/_pages/about.md +++ b/_pages/about.md @@ -1,6 +1,6 @@ --- layout: about -title: about +title: bio permalink: / subtitle: Researcher in computer vision, machine learning and remote sensing, Ph.D. profile: @@ -28,10 +28,10 @@ learning** on a very large scale! Before that, I had the chance to work as a postdoc on the [SIXP][sixp] project. I have worked on plant species and very high resolution multispectral imagery with **semantic segmentation** on a very a fine scale! Earlier, I did my [Ph.D. -thesis][thesis] in [LETG Rennes][letg] and [IRISA's OBELIX -team][obelix]. The topic was to propose new and efficient ways of -processing **3D point clouds** from **LiDAR data**, using -**morphological hierarchies** and deep learning. +thesis][thesis] in [LETG Rennes][letg], [IRISA's OBELIX team][obelix] +and [Tellus Environment][tellus]. The topic was to propose new and +efficient ways of processing **3D point clouds** from **LiDAR data**, +using **morphological hierarchies** and deep learning. I am currently looking for new adventures! @@ -40,7 +40,7 @@ I am currently looking for new adventures! [thesis]: assets/pdf/Guiotte - 2021 - 2D3D discretization of Lidar point clouds Proces.pdf [obelix]: http://www-obelix.irisa.fr/ +[tellus]: https://tellus-environment.com/ [letg]: https://letg.cnrs.fr/ [aj]: https://lavionjaune.com/ [sixp]: https://sixp.inria.fr/ - diff --git a/_pages/projects.md b/_pages/projects.md index 7e164b0..2ea0fdc 100644 --- a/_pages/projects.md +++ b/_pages/projects.md @@ -2,7 +2,7 @@ layout: page title: projects permalink: /projects/ -description: A growing collection of your cool projects. +description: Just a small list of the projects lying around in my folders. It may be updated at any time, with new or not so new content! nav: true nav_order: 2 display_categories: [thesis, other] diff --git a/_projects/1_project.md b/_projects/1_project.md index cc35b67..574229b 100644 --- a/_projects/1_project.md +++ b/_projects/1_project.md @@ -3,8 +3,8 @@ layout: page title: project 1 description: a project with a background image img: assets/img/12.jpg -importance: 1 -category: thesis +importance: 9 +category: demo --- Every project has a beautiful feature showcase page. diff --git a/_projects/sap.md b/_projects/sap.md new file mode 100644 index 0000000..811dc06 --- /dev/null +++ b/_projects/sap.md @@ -0,0 +1,145 @@ +--- +layout: page +title: SAP +description: Python package to compute morphological hierarchies of images and more. +img: /assets/img/sap.svg +importance: 1 +category: thesis +--- + +SAP (for Simple Attribute Profiles) is a Python package to easily +compute attribute profiles of images. I have developed this package as +part of my PhD thesis. + +The source code is available on [github][git]. I used this project to +experiments CI/CD with gitlab pipelines (the project was initially +hosted on the INRIA's gitlab) and lately with Github [actions]. +[Testing][test], [code coverage][cover], release publishing on +[PyPI][pypi] and [online documentation][doc] are all automatically +updated. + +[git]: https://github.com/fguiotte/sap +[doc]: https://python-sap.rtfd.io +[actions]: https://github.com/fguiotte/sap/actions +[pypi]: https://pypi.org/project/sap/ +[test]: https://github.com/fguiotte/sap/tree/master/test +[cover]: https://app.codecov.io/gh/fguiotte/sap/tree/master/sap + + +## Installation + +To start tinkering images with the package, you just have to: + +```bash +pip install sap +``` + +## Quick start + +A small Python snippet to get you started quickly: + +```python +import sap +import numpy as np +import matplotlib.pyplot as plt + +image = np.random.random((512, 512)) + +t = sap.MaxTree(image) +area = t.get_attribute('area') +filtered_image = t.reconstruct(area < 100) + +plt.imshow(filtered_image) +plt.show() +``` + +## Slower launch + +This package is a combination of three submodules. + +### Trees + +The first submodule `sap.trees` is to build trees from images, to compute +attributes, and to filter them. + +For example, we can build the max-tree of an image, compute the area +attributes of the nodes and reconstruct a filtered image removing nodes +with area less than 100 pixels: + +```python +t = sap.MaxTree(image) +area = t.get_attribute('area') +filtered_image = t.reconstruct(area < 100) +``` + + + +### Profiles + +The second submodule `sap.profiles` is provided to compute *Attribute +Profiles* (and other profiles) of images. The submodule contains the +utils to easily concatenate the profiles (*Extended Attribute Profiles*) +and to display them. + +```python +import imageio.v3 as iio # Reads and writes images +import sap + +image = iio.imread('image.png') + +ap = sap.attribute_profiles(image, {'area': [100, 1000]}) +sap.show_profiles(ap) +``` + +![Attribute profiles stacks connected component filtering of images (opening and closing) at several scales.](/assets/img/ap_area.png){.img-fluid .rounded .z-depth-1} + +### Spectra + +The third submodule is `sap.spectra`. We use it to compute Pattern +Spectra of trees and to display them. Pattern Spectra can be useful to +set thresholds of attribute filters and Attribute Profiles. + + +```python +import rasterio as rio # Reads and writes geospatial raster data +from matplotlib import pyplot as plt # Display plots and images +import sap + +dsm = rio.open('dsm.tif').read()[0] + +max_tree = sap.MaxTree(dsm) + +plt.imshow(max_tree.reconstruct()) +plt.show() +``` + +![](/assets/img/sap_1.png){.img-fluid .z-depth-1 .rounded} + +```python +ps = sap.spectrum2d(max_tree, 'area', 'compactness', x_log=True) + +sap.show_spectrum(*ps) + +plt.xlabel('area') +plt.ylabel('compactness') +plt.colorbar() +plt.title('SAP 2D spectrum') + +plt.show() +``` + +![](/assets/img/sap_2.png){.img-fluid .z-depth-1 .rounded} + + +To go further, please have a look to the [online documentation][doc]. + + +This package has been used, amongst other projects, to perform an +experimental comparison of the attribute profiles and their variations +in a published paper [^1]. + +[^1]: Deise Santana Maia, Minh-Tan Pham, Erchan Aptoula, Florent + Guiotte, et Sébastien Lefèvre, « *Classification of Remote Sensing + Data With Morphological Attribute Profiles: A decade of advances* », + GRSM, vol. 9, nᵒ 3, p. 43‑71, sept. 2021, doi: + [10.1109/MGRS.2021.3051859](https://doi.org/10.1109/MGRS.2021.3051859). diff --git a/_projects/spectra.md b/_projects/spectra.md index 8929eef..e6c18d1 100644 --- a/_projects/spectra.md +++ b/_projects/spectra.md @@ -1,7 +1,7 @@ --- layout: page title: Spectra -description: Application using the morphological hierarchies and LiDAR data +description: Application using the morphological hierarchies and LiDAR data. img: /assets/img/spectra.png importance: 1 category: thesis @@ -21,6 +21,8 @@ represents their compactness (a shape-based ratio).](/assets/img/spectra.png){.figure-img .img-fluid .rounded .z-depth-1} +## Interactive filtering + We can use this spectrum to select the attribute thresholds. The current application allows us to do this in real time! @@ -40,6 +42,8 @@ the square of its perimeter. It ranges from 0 for non-compact shapes to (e.g. circular shapes) while the bottom of the spectrum represents linear shapes. +## Example driven + Selecting thresholds in the attribute space can still be difficult. We propose to drive the threshold selection by the example. The application allows to select in the LiDAR data structures and to highlight their @@ -49,6 +53,8 @@ shapes and sizes in the spectrum. .img-fluid .rounded .z-depth-1 } +## Wait, there's more! + In the previous example we showed the use of two attributes, area and compactness. However, there are many more that we can use or even define, depending on the purpose of the application. @@ -64,6 +70,8 @@ space exploration! ![3D spectrum (area, compactness, height).](/assets/vid/3D_axis2_trans_2x.mp4){.figure-img .img-fluid .rounded .z-depth-1 loop=true autoplay=true} +## Notes + The underlying data structure for processing LiDAR data are hierarchical morphologies, in particular component trees, which allow an efficient representation of nested connected components for the computation of @@ -73,4 +81,15 @@ The application was developed in Python using the [SAP package](/projects/sap/) to build the trees, compute the spectra and filter the data. -This application was developed as part of my Ph.D. thesis. +This application was developed as part of my PhD thesis. Experiments +and quantitative results have been published on use cases in a natural +environment, related to illegal gold panning and dikes detection [^1]. + +[^1]: F. Guiotte, G. Etaix, S. Lefèvre, et T. Corpetti, « *Interactive + Digital Terrain Model Analysis in Attribute Space* », International + Archives of the Photogrammetry, Remote Sensing and Spatial Information + Sciences, vol. XLIII-B2-2020, p. 1203‑1209, 2020, doi: + [10.5194/isprs-archives-XLIII-B2-2020-1203-2020][doi]. + +[doi]: https://doi.org/10.5194/isprs-archives-XLIII-B2-2020-1203-2020 + diff --git a/assets/img/ap_area.png b/assets/img/ap_area.png new file mode 100644 index 0000000..440cc39 Binary files /dev/null and b/assets/img/ap_area.png differ diff --git a/assets/img/sap.svg b/assets/img/sap.svg new file mode 100644 index 0000000..a7b5e20 --- /dev/null +++ b/assets/img/sap.svg @@ -0,0 +1,88 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/assets/img/sap_1.png b/assets/img/sap_1.png new file mode 100644 index 0000000..7ca1b33 Binary files /dev/null and b/assets/img/sap_1.png differ diff --git a/assets/img/sap_2.png b/assets/img/sap_2.png new file mode 100644 index 0000000..5ede4a2 Binary files /dev/null and b/assets/img/sap_2.png differ