Attending: Chris, Joshua Teves
Attending: Chris, Eric Larson
Notes:
Geometry
is now Pointset
and SurfaceGeometry
is now TriangularMesh
Pointset
could be Pointcloud
, which seems common in graphics worldVolumeGeometry
; nitransforms uses ImageGrid
Hao-Ting will take another shot at GIFTI. Oscar will review with an eye toward making sure we aren't making life harder for nitransforms.
BIAP: https://github.com/nipy/nibabel/pull/1056
Resources:
Post-meeting comments from Satra, mixed freely with CJM commentary:
Poll for date/time: https://doodle.com/poll/ih86eymx9h64vhai
Selected date/time: Thursday 16 September 2021 @ 9am EDT
Call link: Zoom (has waiting room) (expired)
Follow-up date/time: Thursday 30 September 2021 @ 9am EDT
Follow-up call link: Zoom
Please feel free to start an H3 block here and fiddle. Note your name so you can walk us through it. This does not need to be fully thought out.
Desiderata
def plot(surf_img, surface=None):
texture = surf_img.get_data()
coords, triangles = surf_img.get_mesh(surface)
...
plot(surf_img) # Default surface
plot(surf_img, "inflated") # Associated surface
plot(surf_img, "pial")
def surface_maths(mathstr, surf_img1, surf_img2):
assert surf_img1.header == surf_img2.header
res = domaths(mathstr, surf_img1.get_data(), surf_img2.get_data())
return SurfaceImage(res, surf_img1.header)
def smooth_surf(surf_img, fwhm, surface=None):
coords, triangles = surf_img.get_mesh(surface)
...
def decimate(surf_hdr, *, vtx_count=None, ratio=None):
# Decimation creates a new mesh in the same space
# Can be simplified on a per-format basis if assumptions are met
def resample_from_to(surf_img, surf_hdr):
...
def decimate_and_resample(surf_img, *, vtx_count=None, ratio=None):
# From https://nipy.discourse.group/t/collecting-use-cases/58/4
new_header = decimate(surf_img.header, vtx_count=vtx_count, ratio=ratio)
fwhm = calculate_antialiasing_window(surf_img.header.vtx_count, new_header.vtx_count)
smoothed_img = smooth_surf(surf_img, fwhm)
return resample_from_to(surf_img, new_header)
class SurfaceImage:
header : SurfaceHeader
data : ndarray
def __init__(self, ndarray, ):
...
def load_header(self, path):
...
class SurfaceHeader:
Diffusion emedding on connectome
https://github.com/MICA-MNI/BrainSpace
GLM on surface data:
https://github.com/MICA-MNI/BrainStat
A MATLAB tool for surface based GLM - reference for potential use cases and interface
https://www.math.mcgill.ca/keith/surfstat/
Surfplot