8000 DOC: First pass at SurfaceImage BIAP by effigies · Pull Request #1056 · nipy/nibabel · GitHub
[go: up one dir, main page]

Skip to content

DOC: First pass at SurfaceImage BIAP #1056

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 23 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
cb7d7d3
DOC: First pass at SurfaceImage BIAP
effigies Sep 17, 2021
ea2a466
DOC: Address suggestions
effigies Sep 29, 2021
0f4fddc
DOC: Clarify use cases are motivating, not necessarily implementation…
effigies Oct 8, 2021
3b2b575
DOC: Small updates
effigies Oct 8, 2021
9ddbcc7
DOC: Update BIAP with a couple examples leading to further questions
effigies Oct 8, 2021
27fd6f4
DOC: Separate Geometry and Header objects
effigies Oct 8, 2021
3e89a50
DOC: Smoothing example, typo
effigies Oct 20, 2021
b51e7a0
ENH: First pass at surfaceimage template classes
effigies Oct 20, 2021
0f72055
TEST: Build HDF5/Numpy-based surface classes
effigies Oct 21, 2021
408a227
DOC: Add VolumeGeometry stub
effigies Nov 5, 2021
79a801e
DOC: Fix header formatting
effigies Nov 5, 2021
eabc77f
TEST: Example FreeSurfer subject (not fitting into class hierarchy)
effigies Nov 5, 2021
199547f
DOC: Add concatenable structure proposal
effigies Nov 5, 2021
efef027
ENH: Add structure collection API
effigies Nov 5, 2021
d88c7c6
TEST: Rewrite FreeSurferSubject as GeometryCollection
effigies Nov 5, 2021
25e6d52
ENH: Possible VolumeGeometry
effigies Nov 5, 2021
e6be497
STY: Geometry -> Pointset
effigies Nov 8, 2021
3f62a80
Rename SurfaceGeometry to TriangularMesh
effigies Nov 19, 2021
dcd2050
FIX: FreeSurfer example implementation
effigies Nov 19, 2021
ff19edc
ENH: Flesh out VolumeGeometry
effigies Nov 19, 2021
4af4897
BIAP: Add SurfaceHeader.get_geometry() method
effigies Nov 19, 2021
a3adfe7
Rename Geometry -> Pointset
effigies Jan 14, 2022
e278981
DOC: Commit current thinking on BIAP0009
effigies Feb 11, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10000
Prev Previous commit
Next Next commit
STY: Geometry -> Pointset
  • Loading branch information
effigies committed Nov 19, 2021
commit e6be497ff02a482a68baca5f036fb19c92e124c8
52 changes: 34 additions & 18 deletions nibabel/surfaceimages.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,42 @@
from nibabel.dataobj_images import DataobjImage


class Geometry:
class Pointset:
""" A collection of related sets of coordinates in 3D space.

Coordinates are in RAS+ orientation, i.e., $(x, y, z)$ refers to
a point $x\mathrm{mm}$ right, $y\mathrm{mm}$ anterior and $z\mathrm{mm}$
superior of the origin.

The order of coordinates should be assumed to be significant.
"""

def get_coords(self, name=None):
""" Nx3 array of coordinates in RAS+ space """
""" Get coordinate data in RAS+ space

Parameters
----------
name : str
Name of one of a family of related coordinates.
For example, ``"white"`` and ``"pial"`` surfaces

Returns
-------
coords : (N, 3) array-like
Coordinates in RAS+ space
"""
raise NotImplementedError

@property
def n_coords(self):
""" Number of coordinates

The default implementation loads coordinates. Subclasses may
override with more efficient implementations.
"""
return self.get_coords().shape[0]

class SurfaceGeometry(Geometry):
class SurfaceGeometry(Pointset):
def __init__(self, meshes=None):
""" Surface header objects have access to an internal
``_meshes`` dictionary that has keys that are mesh names.
Expand All @@ -21,15 +50,6 @@ def __init__(self, meshes=None):
self._meshes = meshes
super().__init__()

@property
def n_coords(self):
""" Number of coordinates (vertices)

The default implementation loads coordinates. Subclasses may
override with more efficient implementations.
"""
return self.get_coords().shape[0]

@property
def n_triangles(self):
""" Number of triangles (faces)
Expand All @@ -39,10 +59,6 @@ def n_triangles(self):
"""
return self.get_triangles().shape[0]

def get_coords(self, name=None):
""" Nx3 array of coordinates in RAS+ space """
raise NotImplementedError

def get_triangles(self, name=None):
""" Mx3 array of indices into coordinate table """
raise NotImplementedError
Expand Down Expand Up @@ -101,7 +117,7 @@ def load_geometry(self, pathlike):
""" Specify a header to a data-only image """


class VolumeGeometry(Geometry):
class VolumeGeometry(Pointset):
def __init__(self, affines, *, indices=None):
try:
self._affines = dict(affines)
Expand Down Expand Up @@ -141,7 +157,7 @@ def from_spec(klass, pathlike):
raise NotImplementedError


class GeometrySequence(GeometryCollection, Geometry):
class GeometrySequence(GeometryCollection, Pointset):
def __init__(self, structures=()):
super().__init__(structures)
self._indices = {}
Expand Down
0