本文整理汇总了Python中tvb.recon.io.factory.IOUtils类的典型用法代码示例。如果您正苦于以下问题:Python IOUtils类的具体用法?Python IOUtils怎么用?Python IOUtils使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了IOUtils类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_write_volume
def test_write_volume():
in_file_path = get_data_file(
TEST_MODIF_SUBJECT, TEST_VOLUME_FOLDER, "T1.nii.gz")
volume = IOUtils.read_volume(in_file_path)
out_file_path = get_temporary_files_path('T1-out.nii.gz')
IOUtils.write_volume(out_file_path, volume)
assert os.path.exists(out_file_path)
示例2: label_with_dilation
def label_with_dilation(self, to_label_nii_fname: os.PathLike, dilated_nii_fname: os.PathLike,
out_nii_fname: os.PathLike):
"""
Labels a volume using its labeled dilation. The dilated volume is labeled using scipy.ndimage.label function.
:param to_label_nii_fname: usually a CT-mask.nii.gz
:param dilated_nii_fname: dilated version of the to_label_nii_fname volume
"""
# TODO could make dilation with ndimage also.
mask = IOUtils.read_volume(to_label_nii_fname)
dil_mask = IOUtils.read_volume(dilated_nii_fname)
lab, n = scipy.ndimage.label(dil_mask.data)
# TODO: this change is from tvb-make. Keep it or not? It returns a different result than the old version.
lab_xyz = list(self.compute_label_volume_centers(lab, dil_mask.affine_matrix))
lab_sort = numpy.r_[:n + 1]
# sort labels along AP axis
for i, (val, _) in enumerate(sorted(lab_xyz, key=lambda t: t[1][1])):
lab_sort[val] = i
lab = lab_sort[lab]
mask.data *= lab
self.logger.info(
'%d objects found when labeling the dilated volume.', n)
IOUtils.write_volume(out_nii_fname, mask)
示例3: test_label_with_dilation
def test_label_with_dilation():
service = VolumeService()
ct_mask_data = numpy.array(
[[[0, 0, 0], [0, 1, 0], [0, 1, 0]], [[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 1], [0, 0, 0], [0, 0, 1]]])
ct_mask_volume = Volume(ct_mask_data, [[1, 0, 0, 0], [0, 1, 0, 0], [
0, 0, 1, 0], [0, 0, 0, 1]], None)
ct_mask_path = get_temporary_files_path("ct_mask.nii.gz")
IOUtils.write_volume(ct_mask_path, ct_mask_volume)
ct_dil_mask_data = numpy.array(
[[[0, 0, 0], [1, 1, 1], [0, 1, 0]], [[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 1, 1], [0, 0, 0], [0, 1, 1]]])
ct_dil_mask_volume = Volume(ct_dil_mask_data, [[1, 0, 0, 0], [
0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]], None)
ct_dil_mask_path = get_temporary_files_path("ct_dil_mask.nii.gz")
IOUtils.write_volume(ct_dil_mask_path, ct_dil_mask_volume)
ct_result = get_temporary_files_path("ct_res.nii.gz")
service.label_with_dilation(ct_mask_path, ct_dil_mask_path, ct_result)
assert os.path.exists(ct_mask_path)
assert os.path.exists(ct_dil_mask_path)
assert os.path.exists(ct_result)
vol = IOUtils.read_volume(ct_result)
示例4: overlap_volume_surfaces
def overlap_volume_surfaces(self, volume_background: os.PathLike, surfaces_path: os.PathLike,
use_center_surface: bool, use_cc_point: bool, snapshot_name: str=SNAPSHOT_NAME):
volume = IOUtils.read_volume(volume_background)
if use_cc_point:
ras = self.generic_io.get_ras_coordinates(
self.read_t1_affine_matrix())
else:
ras = volume.get_center_point()
surfaces = [IOUtils.read_surface(os.path.expandvars(surface), use_center_surface) for surface in
surfaces_path]
for projection in PROJECTIONS:
try:
x, y, background_matrix = volume.slice_volume(projection, ras)
except IndexError:
ras = volume.get_center_point()
x, y, background_matrix = volume.slice_volume(projection, ras)
self.logger.info("The volume center point has been used for %s snapshot of %s and %s.", projection,
volume_background, surfaces_path)
clear_flag = True
for surface_index, surface in enumerate(surfaces):
surf_x_array, surf_y_array = surface.cut_by_plane(
projection, ras)
self.writer.write_matrix_and_surfaces(x, y, background_matrix, surf_x_array, surf_y_array,
surface_index, clear_flag)
clear_flag = False
self.writer.save_figure(
self.generate_file_name(projection, snapshot_name))
示例5: test_remove_zero_connectivity
def test_remove_zero_connectivity():
service = VolumeService()
data = numpy.array([[[0, 0, 1], [2, 3, 0]], [[4, 0, 0], [0, 0, 0]]])
volume = Volume(data, [[1, 0, 0, 0], [0, 1, 0, 0],
[0, 0, 1, 0], [0, 0, 0, 1]], None)
volume_path = get_temporary_files_path("tdi_lbl.nii.gz")
IOUtils.write_volume(volume_path, volume)
in_connectivity = numpy.array(
[[10, 1, 0, 3], [0, 10, 0, 2], [0, 0, 0, 0], [0, 0, 0, 10]])
connectivity_path = get_temporary_files_path("conn.csv")
numpy.savetxt(connectivity_path, in_connectivity, fmt='%1d')
tract_lengths_path = get_temporary_files_path("tract_lengths.csv")
numpy.savetxt(tract_lengths_path, in_connectivity, fmt='%1d')
service.remove_zero_connectivity_nodes(
volume_path, connectivity_path, tract_lengths_path)
assert os.path.exists(os.path.splitext(connectivity_path)[0] + ".npy")
assert os.path.exists(os.path.splitext(tract_lengths_path)[0] + ".npy")
vol = IOUtils.read_volume(volume_path)
assert len(numpy.unique(vol.data)) == 4
conn = numpy.array(numpy.genfromtxt(connectivity_path, dtype='int64'))
assert numpy.array_equal(conn, [[20, 1, 3], [1, 20, 2], [3, 2, 20]])
示例6: overlap_3_volumes
def overlap_3_volumes(self, background_path: os.PathLike, overlay_1_path: os.PathLike,
overlay_2_path: os.PathLike, use_cc_point: bool,
snapshot_name: str=SNAPSHOT_NAME):
volume_background = IOUtils.read_volume(background_path)
volume_overlay_1 = IOUtils.read_volume(overlay_1_path)
volume_overlay_2 = IOUtils.read_volume(overlay_2_path)
if use_cc_point:
ras = self.generic_io.get_ras_coordinates(
self.read_t1_affine_matrix())
else:
ras = volume_background.get_center_point()
for projection in PROJECTIONS:
try:
x, y, background_matrix = volume_background.slice_volume(
projection, ras)
x1, y1, overlay_1_matrix = volume_overlay_1.slice_volume(
projection, ras)
x2, y2, overlay_2_matrix = volume_overlay_2.slice_volume(
projection, ras)
except IndexError:
new_ras = volume_background.get_center_point()
x, y, background_matrix = volume_background.slice_volume(
projection, new_ras)
x1, y1, overlay_1_matrix = volume_overlay_1.slice_volume(
projection, new_ras)
x2, y2, overlay_2_matrix = volume_overlay_2.slice_volume(
projection, new_ras)
self.logger.info("The volume center point has been used for %s snapshot of %s, %s and %s.", projection,
background_path, overlay_1_path, overlay_2_path)
self.writer.write_3_matrices(x, y, background_matrix, x1, y1, overlay_1_matrix, x2, y2, overlay_2_matrix,
self.generate_file_name(projection, snapshot_name))
示例7: test_write_annotation
def test_write_annotation(self):
file_path = get_data_file(
self.subject, self.annot_path, "lh.aparc.annot")
annotation = IOUtils.read_annotation(file_path)
out_annotation_path = self.temp_file_path("lh-test.aparc.annot")
IOUtils.write_annotation(out_annotation_path, annotation)
new_annotation = IOUtils.read_annotation(out_annotation_path)
self.assertEqual(annotation.region_names, new_annotation.region_names)
示例8: test_write_write_brain_visa_surf
def test_write_write_brain_visa_surf():
surface_path = get_data_file(
TEST_FS_SUBJECT, TEST_SURFACE_FOLDER, "lh.pial")
out_path = get_temporary_files_path("lh.pial.tri")
surface = IOUtils.read_surface(surface_path, False)
IOUtils.write_surface(out_path, surface)
assert os.path.exists(out_path)
示例9: simple_label_config
def simple_label_config(self, in_aparc_path: os.PathLike, out_volume_path: os.PathLike):
"""
Relabel volume to have contiguous values like Mrtrix' labelconfig.
:param in_aparc_path: volume voxel value is the index of the region it belongs to.
:return: writes the labeled volume to out_volume_path.
"""
aparc = IOUtils.read_volume(in_aparc_path)
aparc = self._label_config(aparc)
IOUtils.write_volume(out_volume_path, aparc)
示例10: test_write_fs_surface
def test_write_fs_surface():
file_path = get_data_file(TEST_FS_SUBJECT, TEST_SURFACE_FOLDER, "lh.pial")
original_surface = IOUtils.read_surface(file_path, False)
triangles_number = len(original_surface.triangles)
output_file_path = get_temporary_files_path("lh-test.pial")
IOUtils.write_surface(output_file_path, original_surface)
new_surface = IOUtils.read_surface(output_file_path, False)
assert triangles_number == len(new_surface.triangles) == 327680
示例11: label_vol_from_tdi
def label_vol_from_tdi(self, tdi_volume_path: os.PathLike, out_volume_path: os.PathLike, lo: float=0.5):
"""
Creates a mask of the voxels with tract ends > lo and any other voxels become 0.
Labels each voxel different from 0 with integer labels starting from 1.
:param tdi_volume_path: volume voxel value is the sum of tract ends. Voxel without tract ends has value 0.
:param lo: tract ends threshold used for masking.
:return: writes labeled volume to :ut_volume_path.
"""
nii_volume = IOUtils.read_volume(tdi_volume_path)
tdi_volume = self._label_volume(nii_volume, lo)
IOUtils.write_volume(out_volume_path, tdi_volume)
示例12: show_aparc_aseg_with_new_values
def show_aparc_aseg_with_new_values(
self, aparc_aseg_volume_path: os.PathLike, region_values_path: os.PathLike,
background_volume_path: os.PathLike, use_cc_point: bool,
fs_to_conn_indices_mapping_path: os.PathLike=FS_TO_CONN_INDICES_MAPPING_PATH,
snapshot_name: str=SNAPSHOT_NAME):
"""
Parameters
----------
aparc_aseg_volume_path
region_values_path
background_volume_path
use_cc_point
fs_to_conn_indices_mapping_path
snapshot_name
Returns
-------
"""
aparc_aseg_volume = IOUtils.read_volume(aparc_aseg_volume_path)
fs_to_conn_indices_mapping = {}
with open(fs_to_conn_indices_mapping_path, 'r') as fd:
for line in fd.readlines():
key, _, val = line.strip().split()
fs_to_conn_indices_mapping[int(key)] = int(val)
len_fs_conn = len(fs_to_conn_indices_mapping)
conn_measure = np.loadtxt(region_values_path)
npad = len_fs_conn - conn_measure.size
conn_measure = np.pad( conn_measure, (0, npad), 'constant')
if use_cc_point:
ras = self.generic_io.get_ras_coordinates(
self.read_t1_affine_matrix())
else:
ras = aparc_aseg_volume.get_center_point()
background_volume = None
if background_volume_path:
background_volume = IOUtils.read_volume(background_volume_path)
for projection in PROJECTIONS:
self._aparc_aseg_projection(
aparc_aseg_volume, aparc_aseg_volume_path, projection, ras,
fs_to_conn_indices_mapping,
background_volume, background_volume_path,
snapshot_name, conn_measure
)
示例13: test_overlap_surface_annotation
def test_overlap_surface_annotation(self):
writer = ImageWriter(SNAPSHOTS_DIRECTORY)
surface_path = get_data_file(self.head2, "SurfaceCortical.h5")
surface = IOUtils.read_surface(surface_path, False)
annot_path = get_data_file(self.head2, "RegionMapping.h5")
annot = IOUtils.read_annotation(annot_path)
annot.region_names = ['reg1', 'reg2']
annot.regions_color_table = numpy.array(
[[200, 200, 200, 255, 30567], [100, 150, 200, 255, 30568]])
resulted_file_name = self.processor.generate_file_name(
'surface_annotation', SNAPSHOT_NAME)
writer.write_surface_with_annotation(surface, annot, resulted_file_name)
fname = '%s0' % (resulted_file_name, )
self._assert_writer_path_exists(fname)
示例14: remove_zero_connectivity_nodes
def remove_zero_connectivity_nodes(self, node_volume_path: os.PathLike, connectivity_matrix_path: os.PathLike,
tract_length_path: Optional[str]=None):
"""
It removes network nodes with zero connectivity from the volume and connectivity matrices.
The zero connectivity nodes will be labeled with 0 in the volume and the remaining labels will be updated.
The connectivity matrices will be symmetric.
:param node_volume_path: tdi_lbl.nii volume path
:param connectivity_matrix_path: .csv file, output of Mrtrix3 tck2connectome
:param tract_length_path: optional .csv tract lengths matrix
:return: overwrites the input volume and matrices with the processed ones. Also saves matrices as .npy.
"""
node_volume = IOUtils.read_volume(node_volume_path)
connectivity = numpy.array(numpy.genfromtxt(
connectivity_matrix_path, dtype='int64'))
connectivity = connectivity + connectivity.T
connectivity_row_sum = numpy.sum(connectivity, axis=0)
nodes_to_keep_indices = connectivity_row_sum > 0
connectivity = connectivity[nodes_to_keep_indices, :][
:, nodes_to_keep_indices]
numpy.save(os.path.splitext(connectivity_matrix_path)
[0] + NPY_EXTENSION, connectivity)
numpy.savetxt(connectivity_matrix_path, connectivity, fmt='%1d')
if os.path.exists(str(tract_length_path)):
connectivity = numpy.array(numpy.genfromtxt(
tract_length_path, dtype='int64'))
connectivity = connectivity[nodes_to_keep_indices, :][
:, nodes_to_keep_indices]
numpy.save(os.path.splitext(tract_length_path)
[0] + NPY_EXTENSION, connectivity)
numpy.savetxt(tract_length_path, connectivity, fmt='%1d')
else:
self.logger.warning("Path %s is not valid.", tract_length_path)
nodes_to_remove_indices, = numpy.where(~nodes_to_keep_indices)
nodes_to_remove_indices += 1
for node_index in nodes_to_remove_indices:
node_volume.data[node_volume.data == node_index] = 0
node_volume.data[node_volume.data > 0] = numpy.r_[
1:(connectivity.shape[0] + 1)]
IOUtils.write_volume(node_volume_path, node_volume)
示例15: test_merge_surfaces
def test_merge_surfaces(self,):
h5_surface_path = get_data_file("head2", "SurfaceCortical.h5")
h5_surface = IOUtils.read_surface(h5_surface_path, False)
vtx = h5_surface.vertices
tri = h5_surface.triangles
nv = vtx.size
nt = tri.size
nv2 = int(nv / 2)
nt2 = int(nt / 2)
lh_surface = Surface(vtx[:nv2], tri[:nt2])
rh_surface = Surface(vtx[nv2:], tri[nt2:])
# h5_region_mapping_path = get_data_file("head2", "RegionMapping.h5")
# annotation = IOUtils.read_annotation(h5_region_mapping_path)
#
# lh_region_mapping = annotation.region_mapping[:len(annotation.region_mapping) / 2]
# rh_region_mapping = annotation.region_mapping[len(annotation.region_mapping) / 2:]
out_surface = self.service.merge_surfaces([lh_surface, rh_surface])
self.assertEqual(len(out_surface.vertices),
len(lh_surface.vertices) + len(rh_surface.vertices))
self.assertEqual(len(out_surface.triangles),
len(lh_surface.triangles) + len(rh_surface.triangles))