Commit 85caf5c624b13202222f4e7f7590b937844b0970
1 parent
a06516c0
Exists in
master
and in
68 other branches
ENH: Rule for reducing imagedata quality under win32 FIX #76
Showing
5 changed files
with
47 additions
and
8 deletions
Show diff stats
invesalius/control.py
| @@ -367,7 +367,10 @@ class Controller(): | @@ -367,7 +367,10 @@ class Controller(): | ||
| 367 | print ">Not used the IPPSorter" | 367 | print ">Not used the IPPSorter" |
| 368 | filelist = [i.image.file for i in dicom_group.GetHandSortedList()] | 368 | filelist = [i.image.file for i in dicom_group.GetHandSortedList()] |
| 369 | zspacing = dicom_group.zspacing | 369 | zspacing = dicom_group.zspacing |
| 370 | - imagedata = utils.CreateImageData(filelist, zspacing) | 370 | + size = dicom.image.size |
| 371 | + bits = dicom.image.bits_allocad | ||
| 372 | + | ||
| 373 | + imagedata = utils.CreateImageData(filelist, zspacing, size, bits) | ||
| 371 | 374 | ||
| 372 | # 1(a): Fix gantry tilt, if any | 375 | # 1(a): Fix gantry tilt, if any |
| 373 | tilt_value = dicom.acquisition.tilt | 376 | tilt_value = dicom.acquisition.tilt |
invesalius/data/imagedata_utils.py
| @@ -24,7 +24,7 @@ import wx.lib.pubsub as ps | @@ -24,7 +24,7 @@ import wx.lib.pubsub as ps | ||
| 24 | 24 | ||
| 25 | import constants as const | 25 | import constants as const |
| 26 | from data import vtk_utils | 26 | from data import vtk_utils |
| 27 | - | 27 | +import utils |
| 28 | 28 | ||
| 29 | # TODO: Test cases which are originally in sagittal/coronal orientation | 29 | # TODO: Test cases which are originally in sagittal/coronal orientation |
| 30 | # and have gantry | 30 | # and have gantry |
| @@ -217,7 +217,7 @@ def ExtractVOI(imagedata,xi,xf,yi,yf,zi,zf): | @@ -217,7 +217,7 @@ def ExtractVOI(imagedata,xi,xf,yi,yf,zi,zf): | ||
| 217 | voi.Update() | 217 | voi.Update() |
| 218 | return voi.GetOutput() | 218 | return voi.GetOutput() |
| 219 | 219 | ||
| 220 | -def CreateImageData(filelist, zspacing): | 220 | +def CreateImageData(filelist, zspacing, size, bits): |
| 221 | message = "Generating multiplanar visualization..." | 221 | message = "Generating multiplanar visualization..." |
| 222 | 222 | ||
| 223 | if not const.VTK_WARNING: | 223 | if not const.VTK_WARNING: |
| @@ -245,12 +245,16 @@ def CreateImageData(filelist, zspacing): | @@ -245,12 +245,16 @@ def CreateImageData(filelist, zspacing): | ||
| 245 | spacing = imagedata.GetSpacing() | 245 | spacing = imagedata.GetSpacing() |
| 246 | imagedata.SetSpacing(spacing[0], spacing[1], zspacing) | 246 | imagedata.SetSpacing(spacing[0], spacing[1], zspacing) |
| 247 | else: | 247 | else: |
| 248 | + | ||
| 248 | update_progress= vtk_utils.ShowProgress(2*len(filelist), | 249 | update_progress= vtk_utils.ShowProgress(2*len(filelist), |
| 249 | dialog_type = "ProgressDialog") | 250 | dialog_type = "ProgressDialog") |
| 250 | 251 | ||
| 251 | # Reformat each slice and future append them | 252 | # Reformat each slice and future append them |
| 252 | appender = vtk.vtkImageAppend() | 253 | appender = vtk.vtkImageAppend() |
| 253 | appender.SetAppendAxis(2) #Define Stack in Z | 254 | appender.SetAppendAxis(2) #Define Stack in Z |
| 255 | + | ||
| 256 | + x,y = size | ||
| 257 | + p = utils.PredictingMemory(len(filelist), x, y, bits) | ||
| 254 | 258 | ||
| 255 | # Reformat each slice | 259 | # Reformat each slice |
| 256 | for x in xrange(len(filelist)): | 260 | for x in xrange(len(filelist)): |
| @@ -262,10 +266,9 @@ def CreateImageData(filelist, zspacing): | @@ -262,10 +266,9 @@ def CreateImageData(filelist, zspacing): | ||
| 262 | reader.AddObserver("ProgressEvent", lambda obj,evt: | 266 | reader.AddObserver("ProgressEvent", lambda obj,evt: |
| 263 | update_progress(reader,message)) | 267 | update_progress(reader,message)) |
| 264 | reader.Update() | 268 | reader.Update() |
| 265 | - | 269 | + |
| 266 | #Resample image in x,y dimension | 270 | #Resample image in x,y dimension |
| 267 | - slice_imagedata = ResampleImage2D(reader.GetOutput(), 256, update_progress) | ||
| 268 | - | 271 | + slice_imagedata = ResampleImage2D(reader.GetOutput(), p, update_progress) |
| 269 | #Stack images in Z axes | 272 | #Stack images in Z axes |
| 270 | appender.AddInput(slice_imagedata) | 273 | appender.AddInput(slice_imagedata) |
| 271 | #appender.AddObserver("ProgressEvent", lambda obj,evt:update_progress(appender)) | 274 | #appender.AddObserver("ProgressEvent", lambda obj,evt:update_progress(appender)) |
| @@ -285,6 +288,7 @@ def CreateImageData(filelist, zspacing): | @@ -285,6 +288,7 @@ def CreateImageData(filelist, zspacing): | ||
| 285 | return imagedata | 288 | return imagedata |
| 286 | 289 | ||
| 287 | 290 | ||
| 291 | +""" | ||
| 288 | class ImageCreator: | 292 | class ImageCreator: |
| 289 | def __init__(self): | 293 | def __init__(self): |
| 290 | ps.Publisher().sendMessage("Cancel imagedata load", self.CancelImageDataLoad) | 294 | ps.Publisher().sendMessage("Cancel imagedata load", self.CancelImageDataLoad) |
| @@ -332,6 +336,7 @@ class ImageCreator: | @@ -332,6 +336,7 @@ class ImageCreator: | ||
| 332 | reader.Update() | 336 | reader.Update() |
| 333 | 337 | ||
| 334 | #Resample image in x,y dimension | 338 | #Resample image in x,y dimension |
| 339 | + | ||
| 335 | slice_imagedata = ResampleImage2D(reader.GetOutput(), 256, update_progress) | 340 | slice_imagedata = ResampleImage2D(reader.GetOutput(), 256, update_progress) |
| 336 | 341 | ||
| 337 | #Stack images in Z axes | 342 | #Stack images in Z axes |
| @@ -351,5 +356,5 @@ class ImageCreator: | @@ -351,5 +356,5 @@ class ImageCreator: | ||
| 351 | imagedata.Update() | 356 | imagedata.Update() |
| 352 | 357 | ||
| 353 | return imagedata | 358 | return imagedata |
| 354 | - | 359 | +""" |
| 355 | 360 |
invesalius/reader/dicom.py
| @@ -1854,6 +1854,7 @@ class Image(object): | @@ -1854,6 +1854,7 @@ class Image(object): | ||
| 1854 | self.type = parser.GetImageType() | 1854 | self.type = parser.GetImageType() |
| 1855 | self.size = (parser.GetDimensionX(), parser.GetDimensionY()) | 1855 | self.size = (parser.GetDimensionX(), parser.GetDimensionY()) |
| 1856 | self.imagedata = parser.GetImageData() | 1856 | self.imagedata = parser.GetImageData() |
| 1857 | + self.bits_allocad = parser._GetBitsAllocated() | ||
| 1857 | 1858 | ||
| 1858 | if (parser.GetImageThickness()): | 1859 | if (parser.GetImageThickness()): |
| 1859 | try: | 1860 | try: |
invesalius/reader/dicom_reader.py
| @@ -37,7 +37,10 @@ def ReadDicomGroup(dir_): | @@ -37,7 +37,10 @@ def ReadDicomGroup(dir_): | ||
| 37 | if len(patient_group) > 0: | 37 | if len(patient_group) > 0: |
| 38 | filelist, dicom, zspacing = SelectLargerDicomGroup(patient_group) | 38 | filelist, dicom, zspacing = SelectLargerDicomGroup(patient_group) |
| 39 | filelist = SortFiles(filelist, dicom) | 39 | filelist = SortFiles(filelist, dicom) |
| 40 | - imagedata = CreateImageData(filelist, zspacing) | 40 | + size = dicom.image.size |
| 41 | + bits = dicom.image.bits_allocad | ||
| 42 | + | ||
| 43 | + imagedata = CreateImageData(filelist, zspacing, size, bits) | ||
| 41 | session.Session().project_status = const.NEW_PROJECT | 44 | session.Session().project_status = const.NEW_PROJECT |
| 42 | return imagedata, dicom | 45 | return imagedata, dicom |
| 43 | else: | 46 | else: |
invesalius/utils.py
| @@ -82,3 +82,30 @@ def frange(start, end=None, inc=None): | @@ -82,3 +82,30 @@ def frange(start, end=None, inc=None): | ||
| 82 | L.append(next) | 82 | L.append(next) |
| 83 | 83 | ||
| 84 | return L | 84 | return L |
| 85 | + | ||
| 86 | +def PredictingMemory(qtd, x, y, p): | ||
| 87 | + m = qtd * (x * y * p) | ||
| 88 | + | ||
| 89 | + #314859200 = 350 MB | ||
| 90 | + #house 25 MB increases the | ||
| 91 | + #factor 0.4 | ||
| 92 | + if (m >= 314859200): | ||
| 93 | + porcent = 1.5 + (m - 314859200) / 26999999 * 0.04 | ||
| 94 | + x = x/porcent | ||
| 95 | + y = y/porcent | ||
| 96 | + return x | ||
| 97 | + else: | ||
| 98 | + return x | ||
| 99 | + | ||
| 100 | + return x | ||
| 101 | + | ||
| 102 | +def BytesConvert(bytes): | ||
| 103 | + if bytes >= 1073741824: | ||
| 104 | + return str(bytes / 1024 / 1024 / 1024) + ' GB' | ||
| 105 | + elif bytes >= 1048576: | ||
| 106 | + return str(bytes / 1024 / 1024) + ' MB' | ||
| 107 | + elif bytes >= 1024: | ||
| 108 | + return str(bytes / 1024) + ' KB' | ||
| 109 | + elif bytes < 1024: | ||
| 110 | + return str(bytes) + ' bytes' | ||
| 111 | + |