From 85caf5c624b13202222f4e7f7590b937844b0970 Mon Sep 17 00:00:00 2001 From: paulojamorim Date: Fri, 8 Jan 2010 15:34:27 +0000 Subject: [PATCH] ENH: Rule for reducing imagedata quality under win32 FIX #76 --- invesalius/control.py | 5 ++++- invesalius/data/imagedata_utils.py | 17 +++++++++++------ invesalius/reader/dicom.py | 1 + invesalius/reader/dicom_reader.py | 5 ++++- invesalius/utils.py | 27 +++++++++++++++++++++++++++ 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/invesalius/control.py b/invesalius/control.py index 01f59cd..6277301 100755 --- a/invesalius/control.py +++ b/invesalius/control.py @@ -367,7 +367,10 @@ class Controller(): print ">Not used the IPPSorter" filelist = [i.image.file for i in dicom_group.GetHandSortedList()] zspacing = dicom_group.zspacing - imagedata = utils.CreateImageData(filelist, zspacing) + size = dicom.image.size + bits = dicom.image.bits_allocad + + imagedata = utils.CreateImageData(filelist, zspacing, size, bits) # 1(a): Fix gantry tilt, if any tilt_value = dicom.acquisition.tilt diff --git a/invesalius/data/imagedata_utils.py b/invesalius/data/imagedata_utils.py index 966630f..877f7c9 100644 --- a/invesalius/data/imagedata_utils.py +++ b/invesalius/data/imagedata_utils.py @@ -24,7 +24,7 @@ import wx.lib.pubsub as ps import constants as const from data import vtk_utils - +import utils # TODO: Test cases which are originally in sagittal/coronal orientation # and have gantry @@ -217,7 +217,7 @@ def ExtractVOI(imagedata,xi,xf,yi,yf,zi,zf): voi.Update() return voi.GetOutput() -def CreateImageData(filelist, zspacing): +def CreateImageData(filelist, zspacing, size, bits): message = "Generating multiplanar visualization..." if not const.VTK_WARNING: @@ -245,12 +245,16 @@ def CreateImageData(filelist, zspacing): spacing = imagedata.GetSpacing() imagedata.SetSpacing(spacing[0], spacing[1], zspacing) else: + update_progress= vtk_utils.ShowProgress(2*len(filelist), dialog_type = "ProgressDialog") # Reformat each slice and future append them appender = vtk.vtkImageAppend() appender.SetAppendAxis(2) #Define Stack in Z + + x,y = size + p = utils.PredictingMemory(len(filelist), x, y, bits) # Reformat each slice for x in xrange(len(filelist)): @@ -262,10 +266,9 @@ def CreateImageData(filelist, zspacing): reader.AddObserver("ProgressEvent", lambda obj,evt: update_progress(reader,message)) reader.Update() - + #Resample image in x,y dimension - slice_imagedata = ResampleImage2D(reader.GetOutput(), 256, update_progress) - + slice_imagedata = ResampleImage2D(reader.GetOutput(), p, update_progress) #Stack images in Z axes appender.AddInput(slice_imagedata) #appender.AddObserver("ProgressEvent", lambda obj,evt:update_progress(appender)) @@ -285,6 +288,7 @@ def CreateImageData(filelist, zspacing): return imagedata +""" class ImageCreator: def __init__(self): ps.Publisher().sendMessage("Cancel imagedata load", self.CancelImageDataLoad) @@ -332,6 +336,7 @@ class ImageCreator: reader.Update() #Resample image in x,y dimension + slice_imagedata = ResampleImage2D(reader.GetOutput(), 256, update_progress) #Stack images in Z axes @@ -351,5 +356,5 @@ class ImageCreator: imagedata.Update() return imagedata - +""" diff --git a/invesalius/reader/dicom.py b/invesalius/reader/dicom.py index a4bb2f2..f029582 100644 --- a/invesalius/reader/dicom.py +++ b/invesalius/reader/dicom.py @@ -1854,6 +1854,7 @@ class Image(object): self.type = parser.GetImageType() self.size = (parser.GetDimensionX(), parser.GetDimensionY()) self.imagedata = parser.GetImageData() + self.bits_allocad = parser._GetBitsAllocated() if (parser.GetImageThickness()): try: diff --git a/invesalius/reader/dicom_reader.py b/invesalius/reader/dicom_reader.py index 6d64b49..471d103 100644 --- a/invesalius/reader/dicom_reader.py +++ b/invesalius/reader/dicom_reader.py @@ -37,7 +37,10 @@ def ReadDicomGroup(dir_): if len(patient_group) > 0: filelist, dicom, zspacing = SelectLargerDicomGroup(patient_group) filelist = SortFiles(filelist, dicom) - imagedata = CreateImageData(filelist, zspacing) + size = dicom.image.size + bits = dicom.image.bits_allocad + + imagedata = CreateImageData(filelist, zspacing, size, bits) session.Session().project_status = const.NEW_PROJECT return imagedata, dicom else: diff --git a/invesalius/utils.py b/invesalius/utils.py index 2a0d86f..a2d58f3 100755 --- a/invesalius/utils.py +++ b/invesalius/utils.py @@ -82,3 +82,30 @@ def frange(start, end=None, inc=None): L.append(next) return L + +def PredictingMemory(qtd, x, y, p): + m = qtd * (x * y * p) + + #314859200 = 350 MB + #house 25 MB increases the + #factor 0.4 + if (m >= 314859200): + porcent = 1.5 + (m - 314859200) / 26999999 * 0.04 + x = x/porcent + y = y/porcent + return x + else: + return x + + return x + +def BytesConvert(bytes): + if bytes >= 1073741824: + return str(bytes / 1024 / 1024 / 1024) + ' GB' + elif bytes >= 1048576: + return str(bytes / 1024 / 1024) + ' MB' + elif bytes >= 1024: + return str(bytes / 1024) + ' KB' + elif bytes < 1024: + return str(bytes) + ' bytes' + -- libgit2 0.21.2