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 | 367 | print ">Not used the IPPSorter" |
| 368 | 368 | filelist = [i.image.file for i in dicom_group.GetHandSortedList()] |
| 369 | 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 | 375 | # 1(a): Fix gantry tilt, if any |
| 373 | 376 | tilt_value = dicom.acquisition.tilt | ... | ... |
invesalius/data/imagedata_utils.py
| ... | ... | @@ -24,7 +24,7 @@ import wx.lib.pubsub as ps |
| 24 | 24 | |
| 25 | 25 | import constants as const |
| 26 | 26 | from data import vtk_utils |
| 27 | - | |
| 27 | +import utils | |
| 28 | 28 | |
| 29 | 29 | # TODO: Test cases which are originally in sagittal/coronal orientation |
| 30 | 30 | # and have gantry |
| ... | ... | @@ -217,7 +217,7 @@ def ExtractVOI(imagedata,xi,xf,yi,yf,zi,zf): |
| 217 | 217 | voi.Update() |
| 218 | 218 | return voi.GetOutput() |
| 219 | 219 | |
| 220 | -def CreateImageData(filelist, zspacing): | |
| 220 | +def CreateImageData(filelist, zspacing, size, bits): | |
| 221 | 221 | message = "Generating multiplanar visualization..." |
| 222 | 222 | |
| 223 | 223 | if not const.VTK_WARNING: |
| ... | ... | @@ -245,12 +245,16 @@ def CreateImageData(filelist, zspacing): |
| 245 | 245 | spacing = imagedata.GetSpacing() |
| 246 | 246 | imagedata.SetSpacing(spacing[0], spacing[1], zspacing) |
| 247 | 247 | else: |
| 248 | + | |
| 248 | 249 | update_progress= vtk_utils.ShowProgress(2*len(filelist), |
| 249 | 250 | dialog_type = "ProgressDialog") |
| 250 | 251 | |
| 251 | 252 | # Reformat each slice and future append them |
| 252 | 253 | appender = vtk.vtkImageAppend() |
| 253 | 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 | 259 | # Reformat each slice |
| 256 | 260 | for x in xrange(len(filelist)): |
| ... | ... | @@ -262,10 +266,9 @@ def CreateImageData(filelist, zspacing): |
| 262 | 266 | reader.AddObserver("ProgressEvent", lambda obj,evt: |
| 263 | 267 | update_progress(reader,message)) |
| 264 | 268 | reader.Update() |
| 265 | - | |
| 269 | + | |
| 266 | 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 | 272 | #Stack images in Z axes |
| 270 | 273 | appender.AddInput(slice_imagedata) |
| 271 | 274 | #appender.AddObserver("ProgressEvent", lambda obj,evt:update_progress(appender)) |
| ... | ... | @@ -285,6 +288,7 @@ def CreateImageData(filelist, zspacing): |
| 285 | 288 | return imagedata |
| 286 | 289 | |
| 287 | 290 | |
| 291 | +""" | |
| 288 | 292 | class ImageCreator: |
| 289 | 293 | def __init__(self): |
| 290 | 294 | ps.Publisher().sendMessage("Cancel imagedata load", self.CancelImageDataLoad) |
| ... | ... | @@ -332,6 +336,7 @@ class ImageCreator: |
| 332 | 336 | reader.Update() |
| 333 | 337 | |
| 334 | 338 | #Resample image in x,y dimension |
| 339 | + | |
| 335 | 340 | slice_imagedata = ResampleImage2D(reader.GetOutput(), 256, update_progress) |
| 336 | 341 | |
| 337 | 342 | #Stack images in Z axes |
| ... | ... | @@ -351,5 +356,5 @@ class ImageCreator: |
| 351 | 356 | imagedata.Update() |
| 352 | 357 | |
| 353 | 358 | return imagedata |
| 354 | - | |
| 359 | +""" | |
| 355 | 360 | ... | ... |
invesalius/reader/dicom.py
| ... | ... | @@ -1854,6 +1854,7 @@ class Image(object): |
| 1854 | 1854 | self.type = parser.GetImageType() |
| 1855 | 1855 | self.size = (parser.GetDimensionX(), parser.GetDimensionY()) |
| 1856 | 1856 | self.imagedata = parser.GetImageData() |
| 1857 | + self.bits_allocad = parser._GetBitsAllocated() | |
| 1857 | 1858 | |
| 1858 | 1859 | if (parser.GetImageThickness()): |
| 1859 | 1860 | try: | ... | ... |
invesalius/reader/dicom_reader.py
| ... | ... | @@ -37,7 +37,10 @@ def ReadDicomGroup(dir_): |
| 37 | 37 | if len(patient_group) > 0: |
| 38 | 38 | filelist, dicom, zspacing = SelectLargerDicomGroup(patient_group) |
| 39 | 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 | 44 | session.Session().project_status = const.NEW_PROJECT |
| 42 | 45 | return imagedata, dicom |
| 43 | 46 | else: | ... | ... |
invesalius/utils.py
| ... | ... | @@ -82,3 +82,30 @@ def frange(start, end=None, inc=None): |
| 82 | 82 | L.append(next) |
| 83 | 83 | |
| 84 | 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 | + | ... | ... |