Jouer avec des outils de cartographie sur des images 3D de cellules

Jouons avec les outils de cartographie sur des données non géographiques ! {rayshader} est cool sur les raster, mais pourquoi ne pas l’utiliser sur des cellules végétales segmentées ?

Utilisation des outils de cartographie hors de leur contexte

Ce n’est pas la première fois que j’utilise des outils de cartographie pour faire autre chose que de la cartographie. Dans mon article de blog Une application Shiny pour la comparaison experte d’images, j’ai parlé d’un article écrit avec Marion Louveaux, une analyste de données issues d’images biologiques travaillant sur les images de microscopie de tissus végétaux. Dans cet article scientifique, nous avons utilisé des outils pour mesurer l’autocorrélation spatiale de l’intensité des couleurs des pixels d’images obtenues au microscope confocal.
Notre collaboration continue à travers différents packages R, en développement sur le compte github de Marion. Dans cet article de blog, j’utiliserai les sorties d’images 3D issues d’une segmentation cellulaire réalisées par Marion avec MorphoGraphX software et importées sous forme de mesh 3D dans R grâce au package {mgx2r} (sa page de documentation {pkgdown} est ici).

Je voulais trouver une bonne raison de jouer avec les packages de Tyler Morgan-Wall pour la visualisation 3D de données raster : {rayshader} et {rayfocus}. Utiliser des images de segmentation de cellules en combinaison avec {rayshader}, c’est le défi du jour !

library(mgx2r)
library(rgl)
library(dplyr)
library(sf)
library(ggplot2)
library(raster)
library(rayshader)
library(magick)
# extraWD <- tempdir()

Récupérer les données de segmentation cellulaire

Nous utilisons les données d’exemple de la vignette de {mgx2r}. Ce jeu de données est issu de MorphoGraphX. C’est une segmentation 3D surfacique d’une image 3D. Il est lu et transformé en mesh avec {mgx2r} pour pouvoir être utilisé avec {rgl}.

Par ailleurs, j’aime beaucoup les nouvelles fonctions ajoutées à {rgl}, comme ce rglwidget pour inclure des sorties {rgl} dans les documents HTML Rmarkdown ou dans les applications Shiny.

Cette image est un widget rgl interactif

filePly <- system.file("extdata", "full/mesh/mesh_meristem_full_T0.ply", package = "mgx2r")

myMesh <- read_mgxPly(
  file = filePly, ShowSpecimen = FALSE, addNormals = TRUE,
  MatCol = 1, header_max = 30)
## [1] "Object has 7763 faces and 4158 vertices."
try(rgl.close(), silent = TRUE)
plot3d(myMesh) 
aspect3d("iso")
# Change view
view3d(theta = 30, phi = -40, zoom = 0.5)
rglwidget()