Commit 6dc42bf885717de6f176ffcbe092060f51c06948
1 parent
69aa6af4
Exists in
master
and in
5 other branches
Handling orientations in analyze files and storing it in memmap
Showing
2 changed files
with
47 additions
and
3 deletions
Show diff stats
invesalius/control.py
... | ... | @@ -19,8 +19,8 @@ |
19 | 19 | import math |
20 | 20 | import os |
21 | 21 | import plistlib |
22 | -import tempfile | |
23 | 22 | |
23 | +import numpy | |
24 | 24 | import wx.lib.pubsub as ps |
25 | 25 | |
26 | 26 | import constants as const |
... | ... | @@ -386,12 +386,16 @@ class Controller(): |
386 | 386 | proj.SetAcquisitionModality("MRI") |
387 | 387 | #TODO: Verify if all Analyse are in AXIAL orientation |
388 | 388 | |
389 | - if not header['orient']: | |
389 | + # To get Z, X, Y (used by InVesaliu), not X, Y, Z | |
390 | + matrix, matrix_filename = utils.analyze2mmap(imagedata) | |
391 | + if header['orient'] == 0: | |
390 | 392 | proj.original_orientation = const.AXIAL |
391 | 393 | elif header['orient'] == 1: |
392 | 394 | proj.original_orientation = const.CORONAL |
393 | 395 | elif header['orient'] == 2: |
394 | 396 | proj.original_orientation = const.SAGITAL |
397 | + else: | |
398 | + proj.original_orientation = const.SAGITAL | |
395 | 399 | |
396 | 400 | proj.threshold_range = (header['glmin'], |
397 | 401 | header['glmax']) |
... | ... | @@ -399,7 +403,8 @@ class Controller(): |
399 | 403 | proj.level = (0.5 * (proj.threshold_range[1] + proj.threshold_range[0])) |
400 | 404 | |
401 | 405 | self.Slice = sl.Slice() |
402 | - self.Slice.matrix = imagedata.get_data().swapaxes(0, 2) | |
406 | + self.Slice.matrix = matrix | |
407 | + self.Slice.matrix_filename = matrix_filename | |
403 | 408 | |
404 | 409 | self.Slice.window_level = proj.level |
405 | 410 | self.Slice.window_width = proj.window | ... | ... |
invesalius/data/imagedata_utils.py
... | ... | @@ -507,6 +507,45 @@ def dcm2memmap(files, slice_size, orientation): |
507 | 507 | |
508 | 508 | return matrix, scalar_range, temp_file |
509 | 509 | |
510 | +def analyze2mmap(analyze): | |
511 | + data = analyze.get_data() | |
512 | + header = analyze.get_header() | |
513 | + temp_file = tempfile.mktemp() | |
514 | + | |
515 | + # Sagital | |
516 | + if header['orient'] == 2: | |
517 | + print "Orientation Sagital" | |
518 | + shape = tuple([data.shape[i] for i in (1, 2, 0)]) | |
519 | + matrix = numpy.memmap(temp_file, mode='w+', dtype=data.dtype, shape=shape) | |
520 | + for n, slice in enumerate(data): | |
521 | + matrix[:,:, n] = slice | |
522 | + | |
523 | + # Coronal | |
524 | + elif header['orient'] == 1: | |
525 | + print "Orientation coronal" | |
526 | + shape = tuple([data.shape[i] for i in (1, 0, 2)]) | |
527 | + matrix = numpy.memmap(temp_file, mode='w+', dtype=data.dtype, shape=shape) | |
528 | + for n, slice in enumerate(data): | |
529 | + matrix[:,n,:] = slice | |
530 | + | |
531 | + # AXIAL | |
532 | + elif header['orient'] == 0: | |
533 | + print "no orientation" | |
534 | + shape = tuple([data.shape[i] for i in (0, 1, 2)]) | |
535 | + matrix = numpy.memmap(temp_file, mode='w+', dtype=data.dtype, shape=shape) | |
536 | + for n, slice in enumerate(data): | |
537 | + matrix[n] = slice | |
538 | + | |
539 | + else: | |
540 | + print "Orientation Sagital" | |
541 | + shape = tuple([data.shape[i] for i in (1, 2, 0)]) | |
542 | + matrix = numpy.memmap(temp_file, mode='w+', dtype=data.dtype, shape=shape) | |
543 | + for n, slice in enumerate(data): | |
544 | + matrix[:,:, n] = slice | |
545 | + | |
546 | + matrix.flush() | |
547 | + return matrix, temp_file | |
548 | + | |
510 | 549 | def to_vtk(n_array, spacing, slice_number, orientation): |
511 | 550 | try: |
512 | 551 | dz, dy, dx = n_array.shape | ... | ... |