Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
fslpy
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Analyze
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
FSL
fslpy
Commits
d637e26b
Commit
d637e26b
authored
8 years ago
by
Paul McCarthy
Browse files
Options
Downloads
Patches
Plain Diff
ImageWrapper has a reset method which does initialisation stuff.
parent
414f8793
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
fsl/data/imagewrapper.py
+82
-52
82 additions, 52 deletions
fsl/data/imagewrapper.py
with
82 additions
and
52 deletions
fsl/data/imagewrapper.py
+
82
−
52
View file @
d637e26b
...
...
@@ -88,20 +88,9 @@ class ImageWrapper(notifier.Notifier):
array proxy).
:arg dataRange: A tuple containing the initial ``(min, max)`` data
range to use.
.. note:: The ``dataRange`` parameter is intended for situations where
the image data range is known (e.g. it was calculated
earlier, and the image is being re-loaded. If a
``dataRange`` is passed in, it will *not* be overwritten by
any range calculated from the data, unless the calculated
data range is wider than the provided ``dataRange``.
range to use. See the :meth:`reset` method.
"""
if
dataRange
is
None
:
dataRange
=
None
,
None
self
.
__image
=
image
self
.
__name
=
name
...
...
@@ -117,6 +106,86 @@ class ImageWrapper(notifier.Notifier):
# 'padding' dimensions too.
self
.
__numPadDims
=
len
(
image
.
shape
)
-
self
.
__numRealDims
# The internal state is stored
# in these attributes - they're
# initialised in the reset method.
self
.
__range
=
None
self
.
__coverage
=
None
self
.
__volRanges
=
None
self
.
__covered
=
False
self
.
reset
(
dataRange
)
if
loadData
:
self
.
loadData
()
@property
def
dataRange
(
self
):
"""
Returns the currently known data range as a tuple of ``(min, max)``
values.
"""
# If no image data has been accessed, we
# default to whatever is stored in the
# header (which may or may not contain
# useful values).
low
,
high
=
self
.
__range
hdr
=
self
.
__image
.
get_header
()
if
low
is
None
:
low
=
float
(
hdr
[
'
cal_min
'
])
if
high
is
None
:
high
=
float
(
hdr
[
'
cal_max
'
])
return
low
,
high
@property
def
covered
(
self
):
"""
Returns ``True`` if this ``ImageWrapper`` has read the entire
image data, ``False`` otherwise.
"""
return
self
.
__covered
def
loadData
(
self
):
"""
Forces all of the image data to be loaded into memory.
.. note:: This method will be called by :meth:`__init__` if its
``loadData`` parameter is ``True``.
"""
# If the data is not already loaded, this will
# cause nibabel to load it. By default, nibabel
# will cache the numpy array that contains the
# image data, so subsequent calls to this
# method will not overwrite any changes that
# have been made to the data.
self
.
__image
.
get_data
()
def
reset
(
self
,
dataRange
=
None
):
"""
Reset the internal state and known data range of this
``ImageWrapper``.
:arg dataRange: A tuple containing the initial ``(min, max)`` data
range to use. See the :meth:`reset` method.
.. note:: The ``dataRange`` parameter is intended for situations where
the image data range is known (e.g. it was calculated
earlier, and the image is being re-loaded. If a
``dataRange`` is passed in, it will *not* be overwritten by
any range calculated from the data, unless the calculated
data range is wider than the provided ``dataRange``.
"""
if
dataRange
is
None
:
dataRange
=
None
,
None
image
=
self
.
__image
ndims
=
self
.
__numRealDims
-
1
nvols
=
image
.
shape
[
self
.
__numRealDims
-
1
]
# The current known image data range. This
# gets updated as more image data gets read.
self
.
__range
=
dataRange
...
...
@@ -143,9 +212,7 @@ class ImageWrapper(notifier.Notifier):
# All of these indices are stored in a numpy array:
# - first dimension: low/high index
# - second dimension: image dimension
# - third dimension: slice/volume index
ndims
=
self
.
__numRealDims
-
1
nvols
=
image
.
shape
[
self
.
__numRealDims
-
1
]
# - third dimension: slice/volume index
self
.
__coverage
=
np
.
zeros
((
2
,
ndims
,
nvols
),
dtype
=
np
.
float32
)
# Internally, we calculate and store the
...
...
@@ -160,43 +227,6 @@ class ImageWrapper(notifier.Notifier):
# (i.e. when all data has been loaded in).
self
.
__covered
=
False
if
loadData
:
self
.
loadData
()
@property
def
dataRange
(
self
):
"""
Returns the currently known data range as a tuple of ``(min, max)``
values.
"""
# If no image data has been accessed, we
# default to whatever is stored in the
# header (which may or may not contain
# useful values).
low
,
high
=
self
.
__range
hdr
=
self
.
__image
.
get_header
()
if
low
is
None
:
low
=
float
(
hdr
[
'
cal_min
'
])
if
high
is
None
:
high
=
float
(
hdr
[
'
cal_max
'
])
return
low
,
high
def
loadData
(
self
):
"""
Forces all of the image data to be loaded into memory.
.. note:: This method will be called by :meth:`__init__` if its
``loadData`` parameter is ``True``.
"""
# If the data is not already loaded, this will
# cause nibabel to load it. By default, nibabel
# will cache the numpy array that contains the
# image data, so subsequent calls to this
# method will not overwrite any changes that
# have been made to the data.
self
.
__image
.
get_data
()
def
__getData
(
self
,
sliceobj
,
isTuple
=
False
):
"""
Retrieves the image data at the location specified by ``sliceobj``.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment