Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ENH: CoordinateImage API#1090

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Draft
effigies wants to merge26 commits intonipy:master
base:master
Choose a base branch
Loading
fromeffigies:enh/coordimage_api
Draft
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
26 commits
Select commitHold shift + click to select a range
1b7df51
ENH: Start restoring triangular meshes
effigiesSep 19, 2023
5d25cef
TEST: Test basic TriangularMesh behavior
effigiesSep 20, 2023
e426afe
RF: Use order kwarg for array proxies
effigiesSep 20, 2023
1a46c70
TEST: Rework FreeSurferHemisphere and H5Geometry examples with mixin
effigiesSep 20, 2023
be05f09
TEST: Tag tests that require access to the data directory
effigiesSep 20, 2023
cbb91d1
RF: Allow coordinate names to be set on init
effigiesSep 22, 2023
107ead6
TEST: More fully test mesh and family APIs
effigiesSep 22, 2023
368c145
ENH: Avoid duplicating objects, note that coordinate family mappings …
effigiesSep 22, 2023
9d5361a
ENH: Add copy() method to ArrayProxy
effigiesSep 19, 2023
81b1033
ENH: Copy lock if filehandle is shared, add tests
effigiesSep 22, 2023
b70a4d9
Merge branches 'enh/copyarrayproxy', 'enh/xml-kwargs' and 'enh/triang…
effigiesSep 22, 2023
798f0c6
ENH: Add stubs from BIAP 9
effigiesFeb 18, 2022
7a6d50c
ENH: Implement CoordinateAxis. and Parcel.__getitem__
effigiesFeb 21, 2022
344bfd8
TEST: Add FreeSurferSubject geometry collection, test loading Cifti2 …
effigiesFeb 21, 2022
1138a95
ENH: Add CaretSpecFile type for use with CIFTI-2
effigiesFeb 22, 2022
c7ab610
TEST: Load CaretSpecFile as a GeometryCollection
effigiesFeb 22, 2022
a458ec3
ENH: Hacky mixin to make surface CaretDataFiles implement TriangularMesh
effigiesFeb 23, 2022
921173b
FIX: CoordinateAxis.__getitem__ fix
effigiesFeb 24, 2022
d4d42a0
ENH: Implement CoordinateAxis.get_indices
effigiesFeb 24, 2022
b51ec36
TEST: Add some assertions and smoke tests to exercise methods
effigiesFeb 24, 2022
76b52f5
ENH: Add from_image/from_header methods to bring logic out of tests
effigiesJan 25, 2023
1392a06
TEST: Add fsLR.wb.spec file for interpreting fsLR data
effigiesFeb 24, 2022
5edddd4
ENH: Add CoordinateImage slicing by parcel name
effigiesJan 25, 2023
05ca9fb
RF: Simplify CaretSpecParser slightly
effigiesFeb 25, 2022
6c2407d
TEST: Check SurfaceDataFile retrieval
effigiesAug 20, 2022
20f71df
Merge branch 'master' into enh/coordimage_api
effigiesJan 16, 2025
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
PrevPrevious commit
NextNext commit
ENH: Add from_image/from_header methods to bring logic out of tests
  • Loading branch information
@effigies
effigies committedSep 22, 2023
commit76b52f50ebf28ab0f9823719ed330b3c7131b977
40 changes: 40 additions & 0 deletionsnibabel/coordimage.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import numpy as np

import nibabel as nib
import nibabel.pointset as ps
from nibabel.fileslice import fill_slicer


Expand All@@ -17,6 +19,22 @@ def __init__(self, data, coordaxis, header=None):
self.coordaxis = coordaxis
self.header = header

@classmethod
def from_image(klass, img):
coordaxis = CoordinateAxis.from_header(img.header)
if isinstance(img, nib.Cifti2Image):
if img.ndim != 2:
raise ValueError('Can only interpret 2D images')
for i in img.header.mapped_indices:
if isinstance(img.header.get_axis(i), nib.cifti2.BrainModelAxis):
break
# Reinterpret data ordering based on location of coordinate axis
data = img.dataobj.copy()
data.order = ['F', 'C'][i]
if i == 1:
data._shape = data._shape[::-1]
return klass(data, coordaxis, img.header)


class CoordinateAxis:
"""
Expand DownExpand Up@@ -85,6 +103,28 @@ def get_indices(self, parcel, indices=None):
def __len__(self):
return sum(len(parcel) for parcel in self.parcels)

# Hacky factory method for now
@classmethod
def from_header(klass, hdr):
parcels = []
if isinstance(hdr, nib.Cifti2Header):
axes = [hdr.get_axis(i) for i in hdr.mapped_indices]
for ax in axes:
if isinstance(ax, nib.cifti2.BrainModelAxis):
break
else:
raise ValueError('No BrainModelAxis, cannot create CoordinateAxis')
for name, slicer, struct in ax.iter_structures():
if struct.volume_shape:
substruct = ps.NdGrid(struct.volume_shape, struct.affine)
indices = struct.voxel
else:
substruct = None
indices = struct.vertex
parcels.append(Parcel(name, substruct, indices))

return klass(parcels)


class Parcel:
"""
Expand Down
20 changes: 5 additions & 15 deletionsnibabel/tests/test_coordimage.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,22 +51,12 @@ def from_spec(klass, pathlike):

def test_Cifti2Image_as_CoordImage():
ones = nb.load(CIFTI2_DATA / 'ones.dscalar.nii')
axes = [ones.header.get_axis(i) for i in range(ones.ndim)]

parcels = []
for name, slicer, bma in axes[1].iter_structures():
if bma.volume_shape:
substruct = ps.NdGrid(bma.volume_shape, bma.affine)
indices = bma.voxel
else:
substruct = None
indices = bma.vertex
parcels.append(ci.Parcel(name, None, indices))
caxis = ci.CoordinateAxis(parcels)
dobj = ones.dataobj.copy()
dobj.order = 'C' # Hack for image with BMA as the last axis
cimg = ci.CoordinateImage(dobj, caxis, ones.header)
assert ones.shape == (1, 91282)
cimg = ci.CoordinateImage.from_image(ones)
assert cimg.shape == (91282, 1)

caxis = cimg.coordaxis
assert len(caxis) == 91282
assert caxis[...] is caxis
assert caxis[:] is caxis

Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp