Commit f879b8b886f8f5ed5bd62b27e70c64b5901795cf

Authored by Paulo Henrique Junqueira Amorim
1 parent 107e6ffc

ENH: Added conversion between DICOM and Python encoding

invesalius/constants.py
@@ -441,7 +441,8 @@ VTK_WARNING = 0 @@ -441,7 +441,8 @@ VTK_WARNING = 0
441 441
442 [ID_DICOM_IMPORT, ID_PROJECT_OPEN, ID_PROJECT_SAVE_AS, ID_PROJECT_SAVE, 442 [ID_DICOM_IMPORT, ID_PROJECT_OPEN, ID_PROJECT_SAVE_AS, ID_PROJECT_SAVE,
443 ID_PROJECT_CLOSE, ID_PROJECT_INFO, ID_SAVE_SCREENSHOT, ID_DICOM_LOAD_NET, 443 ID_PROJECT_CLOSE, ID_PROJECT_INFO, ID_SAVE_SCREENSHOT, ID_DICOM_LOAD_NET,
444 -ID_PRINT_SCREENSHOT, ID_EXIT, ID_IMPORT_OTHERS_FILES, ID_ANALYZE_IMPORT, ID_PREFERENCES] = [wx.NewId() for number in range(13)] 444 +ID_PRINT_SCREENSHOT, ID_EXIT, ID_IMPORT_OTHERS_FILES, ID_ANALYZE_IMPORT, ID_PREFERENCES,
  445 +ID_DICOM_NETWORK] = [wx.NewId() for number in range(14)]
445 446
446 447
447 [ID_EDIT_UNDO, ID_EDIT_REDO, ID_EDIT_LIST] =\ 448 [ID_EDIT_UNDO, ID_EDIT_REDO, ID_EDIT_LIST] =\
@@ -509,3 +510,22 @@ STYLE_LEVEL = {SLICE_STATE_EDITOR: 1, @@ -509,3 +510,22 @@ STYLE_LEVEL = {SLICE_STATE_EDITOR: 1,
509 RENDERING = 0 510 RENDERING = 0
510 SURFACE_INTERPOLATION = 1 511 SURFACE_INTERPOLATION = 1
511 LANGUAGE = 2 512 LANGUAGE = 2
  513 +
  514 +
  515 +#Correlaction extracted from pyDicom
  516 +DICOM_ENCODING_TO_PYTHON = {
  517 + 'None':'iso8859',
  518 + None:'iso8859',
  519 + '': 'iso8859',
  520 + 'ISO_IR 6': 'iso8859',
  521 + 'ISO_IR 100': 'latin_1',
  522 + 'ISO 2022 IR 87': 'iso2022_jp',
  523 + 'ISO 2022 IR 13': 'iso2022_jp',
  524 + 'ISO 2022 IR 149': 'euc_kr',
  525 + 'ISO_IR 192': 'UTF8',
  526 + 'GB18030': 'GB18030',
  527 + 'ISO_IR 126': 'iso_ir_126',
  528 + 'ISO_IR 127': 'iso_ir_127',
  529 + 'ISO_IR 138': 'iso_ir_138',
  530 + 'ISO_IR 144': 'iso_ir_144',
  531 + }
invesalius/reader/dicom.py
@@ -22,7 +22,7 @@ import time @@ -22,7 +22,7 @@ import time
22 #import vtkgdcm 22 #import vtkgdcm
23 import sys 23 import sys
24 import utils 24 import utils
25 - 25 +import constants as const
26 # In DICOM file format, if multiple values are present for the 26 # In DICOM file format, if multiple values are present for the
27 # "Window Center" (Level) and "Window Width", both attributes 27 # "Window Center" (Level) and "Window Width", both attributes
28 # shall have the same number of values and shall be considered as 28 # shall have the same number of values and shall be considered as
@@ -204,7 +204,7 @@ class Parser(): @@ -204,7 +204,7 @@ class Parser():
204 to the number of columns on the image. 204 to the number of columns on the image.
205 Return "" if not defined. 205 Return "" if not defined.
206 """ 206 """
207 - data = self.data_image[0x028][0x011] 207 + data = self.data_image[str(0x028)][str(0x011)]
208 if (data): 208 if (data):
209 return int(str(data)) 209 return int(str(data))
210 return "" 210 return ""
@@ -216,7 +216,7 @@ class Parser(): @@ -216,7 +216,7 @@ class Parser():
216 to the number of rows on the image. 216 to the number of rows on the image.
217 Return "" if not defined. 217 Return "" if not defined.
218 """ 218 """
219 - data = self.data_image[0x028][0x010] 219 + data = self.data_image[str(0x028)][str(0x010)]
220 if (data): 220 if (data):
221 return int(str(data)) 221 return int(str(data))
222 return "" 222 return ""
@@ -303,7 +303,7 @@ class Parser(): @@ -303,7 +303,7 @@ class Parser():
303 """ 303 """
304 # TODO: internationalize data 304 # TODO: internationalize data
305 try: 305 try:
306 - date = self.data_image[0x0008][0x0022] 306 + date = self.data_image[str(0x0008)][str(0x0022)]
307 except(KeyError): 307 except(KeyError):
308 return "" 308 return ""
309 309
@@ -318,7 +318,7 @@ class Parser(): @@ -318,7 +318,7 @@ class Parser():
318 318
319 DICOM standard tag (0x0020, 0x0012) was used. 319 DICOM standard tag (0x0020, 0x0012) was used.
320 """ 320 """
321 - data = self.data_image[0x0020][0x0012] 321 + data = self.data_image[str(0x0020)][str(0x0012)]
322 if (data): 322 if (data):
323 return int(str(data)) 323 return int(str(data))
324 return "" 324 return ""
@@ -329,7 +329,8 @@ class Parser(): @@ -329,7 +329,8 @@ class Parser():
329 329
330 DICOM standard tag (0x0008, 0x0050) was used. 330 DICOM standard tag (0x0008, 0x0050) was used.
331 """ 331 """
332 - data = self.data_image[0x008][0x050] 332 + #data = self.data_image[0x008][0x050]
  333 + return ""
333 if (data): 334 if (data):
334 try: 335 try:
335 value = int(str(data)) 336 value = int(str(data))
@@ -346,7 +347,7 @@ class Parser(): @@ -346,7 +347,7 @@ class Parser():
346 347
347 DICOM standard tag (0x0008,0x0032) was used. 348 DICOM standard tag (0x0008,0x0032) was used.
348 """ 349 """
349 - data = self.data_image[0x008][0x032] 350 + data = self.data_image[str(0x008)][str(0x032)]
350 if (data) and (data != ''): 351 if (data) and (data != ''):
351 return self.__format_time(str(data)) 352 return self.__format_time(str(data))
352 return "" 353 return ""
@@ -381,7 +382,7 @@ class Parser(): @@ -381,7 +382,7 @@ class Parser():
381 DICOM standard tag (0x0028,0x1050) was used. 382 DICOM standard tag (0x0028,0x1050) was used.
382 """ 383 """
383 try: 384 try:
384 - data = self.data_image[0x028][0x1050] 385 + data = self.data_image[str(0x028)][str(0x1050)]
385 except(KeyError): 386 except(KeyError):
386 return "300" 387 return "300"
387 if (data): 388 if (data):
@@ -413,7 +414,7 @@ class Parser(): @@ -413,7 +414,7 @@ class Parser():
413 DICOM standard tag (0x0028,0x1051) was used. 414 DICOM standard tag (0x0028,0x1051) was used.
414 """ 415 """
415 try: 416 try:
416 - data = self.data_image[0x028][0x1051] 417 + data = self.data_image[str(0x028)][str(0x1051)]
417 except(KeyError): 418 except(KeyError):
418 return "2000" 419 return "2000"
419 420
@@ -442,7 +443,7 @@ class Parser(): @@ -442,7 +443,7 @@ class Parser():
442 DICOM standard tag (0x0020, 0x0032) was used. 443 DICOM standard tag (0x0020, 0x0032) was used.
443 """ 444 """
444 try: 445 try:
445 - data = self.data_image[0x020][0x032] 446 + data = self.data_image[str(0x020)][str(0x032)]
446 except(KeyError): 447 except(KeyError):
447 return "" 448 return ""
448 if (data): 449 if (data):
@@ -457,7 +458,7 @@ class Parser(): @@ -457,7 +458,7 @@ class Parser():
457 458
458 DICOM standard tag (0x0020, 0x0032) was used. 459 DICOM standard tag (0x0020, 0x0032) was used.
459 """ 460 """
460 - data = self.data_image[0x020][0x1041] 461 + data = self.data_image[str(0x020)][str(0x1041)]
461 if (data): 462 if (data):
462 return eval(data) 463 return eval(data)
463 return "" 464 return ""
@@ -470,7 +471,7 @@ class Parser(): @@ -470,7 +471,7 @@ class Parser():
470 DICOM standard tag (0x7fe0, 0x0010) was used. 471 DICOM standard tag (0x7fe0, 0x0010) was used.
471 """ 472 """
472 try: 473 try:
473 - data = self.data_image[0x7fe0][0x0010] 474 + data = self.data_image[str(0x7fe0)][str(0x0010)]
474 except(KeyError): 475 except(KeyError):
475 return "" 476 return ""
476 477
@@ -488,7 +489,7 @@ class Parser(): @@ -488,7 +489,7 @@ class Parser():
488 DICOM standard tag (0x0020, 0x0011) was used. 489 DICOM standard tag (0x0020, 0x0011) was used.
489 """ 490 """
490 try: 491 try:
491 - data = self.data_image[0x020][0x011] 492 + data = self.data_image[str(0x020)][str(0x011)]
492 except(KeyError): 493 except(KeyError):
493 return "" 494 return ""
494 495
@@ -508,7 +509,7 @@ class Parser(): @@ -508,7 +509,7 @@ class Parser():
508 DICOM standard tag (0x0028, 0x0030) was used. 509 DICOM standard tag (0x0028, 0x0030) was used.
509 """ 510 """
510 try: 511 try:
511 - data = self.data_image[0x0028][0x0030] 512 + data = self.data_image[str(0x0028)][str(0x0030)]
512 except(KeyError): 513 except(KeyError):
513 return "" 514 return ""
514 if (data): 515 if (data):
@@ -523,7 +524,7 @@ class Parser(): @@ -523,7 +524,7 @@ class Parser():
523 DICOM standard tag (0x0010, 0x1030) was used. 524 DICOM standard tag (0x0010, 0x1030) was used.
524 """ 525 """
525 try: 526 try:
526 - data = self.data_image[0x0010][0x1030] 527 + data = self.data_image[str(0x0010)][str(0x1030)]
527 except(KeyError): 528 except(KeyError):
528 return "" 529 return ""
529 530
@@ -539,7 +540,7 @@ class Parser(): @@ -539,7 +540,7 @@ class Parser():
539 DICOM standard tag (0x0010, 0x1030) was used. 540 DICOM standard tag (0x0010, 0x1030) was used.
540 """ 541 """
541 try: 542 try:
542 - data = self.data_image[0x010][0x1020] 543 + data = self.data_image[str(0x010)][str(0x1020)]
543 except(KeyError): 544 except(KeyError):
544 return "" 545 return ""
545 546
@@ -554,7 +555,7 @@ class Parser(): @@ -554,7 +555,7 @@ class Parser():
554 DICOM standard tag (0x0010, 0x1040) was used. 555 DICOM standard tag (0x0010, 0x1040) was used.
555 """ 556 """
556 try: 557 try:
557 - data = self.data_image[0x010][0x1040] 558 + data = self.data_image[str(0x010)][str(0x1040)]
558 except(KeyError): 559 except(KeyError):
559 return "" 560 return ""
560 if (data): 561 if (data):
@@ -569,7 +570,7 @@ class Parser(): @@ -569,7 +570,7 @@ class Parser():
569 DICOM standard tag (0x0010, 0x1080) was used. 570 DICOM standard tag (0x0010, 0x1080) was used.
570 """ 571 """
571 try: 572 try:
572 - data = self.data_image[0x010][0x1080] 573 + data = self.data_image[str(0x010)][str(0x1080)]
573 except(KeyError): 574 except(KeyError):
574 return "" 575 return ""
575 if (data): 576 if (data):
@@ -586,7 +587,7 @@ class Parser(): @@ -586,7 +587,7 @@ class Parser():
586 DICOM standard tag (0x0010, 0x1081) was used. 587 DICOM standard tag (0x0010, 0x1081) was used.
587 """ 588 """
588 try: 589 try:
589 - data = self.data_image[0x010][0x1081] 590 + data = self.data_image[str(0x010)][str(0x1081)]
590 except(KeyError): 591 except(KeyError):
591 return "" 592 return ""
592 if (data): 593 if (data):
@@ -602,7 +603,7 @@ class Parser(): @@ -602,7 +603,7 @@ class Parser():
602 DICOM standard tag (0x0010, 0x2150) was used. 603 DICOM standard tag (0x0010, 0x2150) was used.
603 """ 604 """
604 try: 605 try:
605 - data = self.data_image[0x0010][0x2150] 606 + data = self.data_image[str(0x0010)][str(0x2150)]
606 except(KeyError): 607 except(KeyError):
607 return "" 608 return ""
608 609
@@ -619,7 +620,7 @@ class Parser(): @@ -619,7 +620,7 @@ class Parser():
619 DICOM standard tag (0x0010, 0x2152) was used. 620 DICOM standard tag (0x0010, 0x2152) was used.
620 """ 621 """
621 try: 622 try:
622 - data = self.data_image[0x0010][0x2152] 623 + data = self.data_image[str(0x0010)][str(0x2152)]
623 except(KeyError): 624 except(KeyError):
624 return "" 625 return ""
625 626
@@ -635,7 +636,7 @@ class Parser(): @@ -635,7 +636,7 @@ class Parser():
635 DICOM standard tag (0x0010, 0x2154) was used. 636 DICOM standard tag (0x0010, 0x2154) was used.
636 """ 637 """
637 try: 638 try:
638 - data = self.data_image[0x0010][0x2154] 639 + data = self.data_image[str(0x0010)][str(0x2154)]
639 except(KeyError): 640 except(KeyError):
640 return "" 641 return ""
641 642
@@ -652,7 +653,7 @@ class Parser(): @@ -652,7 +653,7 @@ class Parser():
652 DICOM standard tag (0x0010, 0x2297) was used. 653 DICOM standard tag (0x0010, 0x2297) was used.
653 """ 654 """
654 try: 655 try:
655 - data = self.data_image[0x0010][0x2297] 656 + data = self.data_image[str(0x0010)][str(0x2297)]
656 except(KeyError): 657 except(KeyError):
657 return "" 658 return ""
658 659
@@ -669,7 +670,7 @@ class Parser(): @@ -669,7 +670,7 @@ class Parser():
669 DICOM standard tag (0x0010, 0x2298) was used. 670 DICOM standard tag (0x0010, 0x2298) was used.
670 """ 671 """
671 try: 672 try:
672 - data = self.data_image[0x0010][0x2298] 673 + data = self.data_image[str(0x0010)][str(0x2298)]
673 except(KeyError): 674 except(KeyError):
674 return "" 675 return ""
675 676
@@ -686,7 +687,7 @@ class Parser(): @@ -686,7 +687,7 @@ class Parser():
686 DICOM standard tag (0x0010, 0x2299) was used. 687 DICOM standard tag (0x0010, 0x2299) was used.
687 """ 688 """
688 try: 689 try:
689 - data = self.data_image[0x0010][0x2299] 690 + data = self.data_image[str(0x0010)][str(0x2299)]
690 except(KeyError): 691 except(KeyError):
691 return "" 692 return ""
692 693
@@ -703,7 +704,7 @@ class Parser(): @@ -703,7 +704,7 @@ class Parser():
703 DICOM standard tag (0x0010, 0x2000) was used. 704 DICOM standard tag (0x0010, 0x2000) was used.
704 """ 705 """
705 try: 706 try:
706 - data = self.data_image[0x0010][0x2000] 707 + data = self.data_image[str(0x0010)][str(0x2000)]
707 except(KeyError): 708 except(KeyError):
708 return "" 709 return ""
709 710
@@ -720,7 +721,7 @@ class Parser(): @@ -720,7 +721,7 @@ class Parser():
720 DICOM standard tag (0x0008, 0x2110) was used. 721 DICOM standard tag (0x0008, 0x2110) was used.
721 """ 722 """
722 try: 723 try:
723 - data = self.data_image[0x0008][0x2110] 724 + data = self.data_image[str(0x0008)][str(0x2110)]
724 except(KeyError): 725 except(KeyError):
725 return "" 726 return ""
726 727
@@ -738,7 +739,7 @@ class Parser(): @@ -738,7 +739,7 @@ class Parser():
738 DICOM standard tag (0x0008, 0x0090) was used. 739 DICOM standard tag (0x0008, 0x0090) was used.
739 """ 740 """
740 try: 741 try:
741 - data = self.data_image[0x0008][0x0090] 742 + data = self.data_image[str(0x0008)][str(0x0090)]
742 except(KeyError): 743 except(KeyError):
743 return "" 744 return ""
744 745
@@ -757,7 +758,7 @@ class Parser(): @@ -757,7 +758,7 @@ class Parser():
757 DICOM standard tag (0x0008, 0x0092) was used. 758 DICOM standard tag (0x0008, 0x0092) was used.
758 """ 759 """
759 try: 760 try:
760 - data = self.data_image[0x0008][0x0092] 761 + data = self.data_image[str(0x0008)][str(0x0092)]
761 except(KeyError): 762 except(KeyError):
762 return "" 763 return ""
763 764
@@ -773,7 +774,7 @@ class Parser(): @@ -773,7 +774,7 @@ class Parser():
773 DICOM standard tag (0x0008, 0x0094) was used. 774 DICOM standard tag (0x0008, 0x0094) was used.
774 """ 775 """
775 try: 776 try:
776 - data = self.data_image[0x0008][0x0094] 777 + data = self.data_image[str(0x0008)][str(0x0094)]
777 except(KeyError): 778 except(KeyError):
778 return "" 779 return ""
779 780
@@ -789,7 +790,7 @@ class Parser(): @@ -789,7 +790,7 @@ class Parser():
789 DICOM standard tag (0x0018, 0x1030) was used. 790 DICOM standard tag (0x0018, 0x1030) was used.
790 """ 791 """
791 try: 792 try:
792 - data = self.data_image[0x0018][0x1030] 793 + data = self.data_image[str(0x0018)][str(0x1030)]
793 except(KeyError): 794 except(KeyError):
794 return None 795 return None
795 796
@@ -807,7 +808,7 @@ class Parser(): @@ -807,7 +808,7 @@ class Parser():
807 Critical DICOM tag (0x0008, 0x0008). Cannot be editted. 808 Critical DICOM tag (0x0008, 0x0008). Cannot be editted.
808 """ 809 """
809 try: 810 try:
810 - data = self.data_image[0x008][0x008] 811 + data = self.data_image[str(0x008)][str(0x008)]
811 except(IndexError): 812 except(IndexError):
812 return [] 813 return []
813 814
@@ -827,7 +828,7 @@ class Parser(): @@ -827,7 +828,7 @@ class Parser():
827 Critical DICOM tag (0x0008, 0x0016). Cannot be edited. 828 Critical DICOM tag (0x0008, 0x0016). Cannot be edited.
828 """ 829 """
829 try: 830 try:
830 - data = self.data_image[0x0008][0x0016] 831 + data = self.data_image[str(0x0008)][str(0x0016)]
831 except(KeyError): 832 except(KeyError):
832 return "" 833 return ""
833 834
@@ -844,7 +845,7 @@ class Parser(): @@ -844,7 +845,7 @@ class Parser():
844 Critical DICOM tag (0x0008, 0x0018). Cannot be edited. 845 Critical DICOM tag (0x0008, 0x0018). Cannot be edited.
845 """ 846 """
846 try: 847 try:
847 - data = self.data_image[0x0008][0x0018] 848 + data = self.data_image[str(0x0008)][str(0x0018)]
848 except(KeyError): 849 except(KeyError):
849 return "" 850 return ""
850 851
@@ -861,7 +862,7 @@ class Parser(): @@ -861,7 +862,7 @@ class Parser():
861 Critical DICOM Tag (0x0020,0x000D). Cannot be edited. 862 Critical DICOM Tag (0x0020,0x000D). Cannot be edited.
862 """ 863 """
863 try: 864 try:
864 - data = self.data_image[0x0020][0x000D] 865 + data = self.data_image[str(0x0020)][str(0x000D)]
865 except(KeyError): 866 except(KeyError):
866 return "" 867 return ""
867 868
@@ -881,7 +882,7 @@ class Parser(): @@ -881,7 +882,7 @@ class Parser():
881 Critical DICOM tag (0x0020,0x0037). Cannot be edited. 882 Critical DICOM tag (0x0020,0x0037). Cannot be edited.
882 """ 883 """
883 try: 884 try:
884 - data = self.data_image[0x0020][0x0037] 885 + data = self.data_image[str(0x0020)][str(0x0037)]
885 except(KeyError): 886 except(KeyError):
886 return [1.0, 0.0, 0.0, 0.0, 1.0, 0.0] 887 return [1.0, 0.0, 0.0, 0.0, 1.0, 0.0]
887 888
@@ -899,7 +900,7 @@ class Parser(): @@ -899,7 +900,7 @@ class Parser():
899 Critical DICOM tag (0x0020,0x0037). Cannot be edited. 900 Critical DICOM tag (0x0020,0x0037). Cannot be edited.
900 """ 901 """
901 try: 902 try:
902 - data = self.data_image[0x0020][0x0037] 903 + data = self.data_image[str(0x0020)][str(0x0037)]
903 except(KeyError): 904 except(KeyError):
904 return [0.0, 1.0, 0.0] 905 return [0.0, 1.0, 0.0]
905 906
@@ -917,7 +918,7 @@ class Parser(): @@ -917,7 +918,7 @@ class Parser():
917 Critical DICOM tag (0x0020,0x0037). Cannot be edited. 918 Critical DICOM tag (0x0020,0x0037). Cannot be edited.
918 """ 919 """
919 try: 920 try:
920 - data = self.data_image[0x0020][0x0037] 921 + data = self.data_image[str(0x0020)][str(0x0037)]
921 except(KeyError): 922 except(KeyError):
922 return [1.0, 0.0, 0.0] 923 return [1.0, 0.0, 0.0]
923 924
@@ -933,7 +934,7 @@ class Parser(): @@ -933,7 +934,7 @@ class Parser():
933 Critical DICOM tag (0x0020,0x0052). Cannot be edited. 934 Critical DICOM tag (0x0020,0x0052). Cannot be edited.
934 """ 935 """
935 try: 936 try:
936 - data = self.data_image[0x0020][0x0052] 937 + data = self.data_image[str(0x0020)][str(0x0052)]
937 except(KeyError): 938 except(KeyError):
938 return "" 939 return ""
939 940
@@ -1013,7 +1014,7 @@ class Parser(): @@ -1013,7 +1014,7 @@ class Parser():
1013 DICOM standard tag (0x0018, 0x1030) was used. 1014 DICOM standard tag (0x0018, 0x1030) was used.
1014 """ 1015 """
1015 try: 1016 try:
1016 - data = self.data_image[0x0018][0x1030] 1017 + data = self.data_image[str(0x0018)][str(0x1030)]
1017 if (data): 1018 if (data):
1018 return data 1019 return data
1019 except(KeyError): 1020 except(KeyError):
@@ -1037,7 +1038,7 @@ class Parser(): @@ -1037,7 +1038,7 @@ class Parser():
1037 Critical DICOM tag (0x0018, 0x0020). Cannot be edited. 1038 Critical DICOM tag (0x0018, 0x0020). Cannot be edited.
1038 """ 1039 """
1039 try: 1040 try:
1040 - data = self.data_image[0x0018][0x0020] 1041 + data = self.data_image[str(0x0018)][str(0x0020)]
1041 except(KeyError): 1042 except(KeyError):
1042 return "" 1043 return ""
1043 1044
@@ -1053,7 +1054,7 @@ class Parser(): @@ -1053,7 +1054,7 @@ class Parser():
1053 DICOM standard tag (0x0008, 0x0080) was used. 1054 DICOM standard tag (0x0008, 0x0080) was used.
1054 """ 1055 """
1055 try: 1056 try:
1056 - data = self.data_image[0x0008][0x0080] 1057 + data = self.data_image[str(0x0008)][str(0x0080)]
1057 except(KeyError): 1058 except(KeyError):
1058 return "" 1059 return ""
1059 1060
@@ -1071,7 +1072,7 @@ class Parser(): @@ -1071,7 +1072,7 @@ class Parser():
1071 DICOM standard tag (0x0008, 0x0081) was used. 1072 DICOM standard tag (0x0008, 0x0081) was used.
1072 """ 1073 """
1073 try: 1074 try:
1074 - data = self.data_image[0x0008][0x0081] 1075 + data = self.data_image[str(0x0008)][str(0x0081)]
1075 except(KeyError): 1076 except(KeyError):
1076 return "" 1077 return ""
1077 1078
@@ -1088,7 +1089,7 @@ class Parser(): @@ -1088,7 +1089,7 @@ class Parser():
1088 Critical DICOM tag (0x0020, 0x000D). Cannot be edited. 1089 Critical DICOM tag (0x0020, 0x000D). Cannot be edited.
1089 """ 1090 """
1090 try: 1091 try:
1091 - data = self.data_image[0x0020][0x000D] 1092 + data = self.data_image[str(0x0020)][str(0x000D)]
1092 except(KeyError): 1093 except(KeyError):
1093 return "" 1094 return ""
1094 1095
@@ -1104,7 +1105,7 @@ class Parser(): @@ -1104,7 +1105,7 @@ class Parser():
1104 DICOM standard tag (0x0010,0x2180) was used. 1105 DICOM standard tag (0x0010,0x2180) was used.
1105 """ 1106 """
1106 try: 1107 try:
1107 - data = self.data_image[0x0010][0x2180] 1108 + data = self.data_image[str(0x0010)][str(0x2180)]
1108 except(KeyError): 1109 except(KeyError):
1109 return "" 1110 return ""
1110 1111
@@ -1142,7 +1143,7 @@ class Parser(): @@ -1142,7 +1143,7 @@ class Parser():
1142 #sf.SetFile(self.gdcm_reader.GetFile()) 1143 #sf.SetFile(self.gdcm_reader.GetFile())
1143 #res = sf.ToStringPair(tag) 1144 #res = sf.ToStringPair(tag)
1144 try: 1145 try:
1145 - data = self.data_image[0x0028][0x0100] 1146 + data = self.data_image[str(0x0028)][str(0x0100)]
1146 except(KeyError): 1147 except(KeyError):
1147 return "" 1148 return ""
1148 1149
@@ -1161,7 +1162,7 @@ class Parser(): @@ -1161,7 +1162,7 @@ class Parser():
1161 """ 1162 """
1162 # TODO: internationalize data 1163 # TODO: internationalize data
1163 try: 1164 try:
1164 - data = self.data_image[0x0010][0x0030] 1165 + data = self.data_image[str(0x0010)][str(0x0030)]
1165 except(KeyError): 1166 except(KeyError):
1166 return "" 1167 return ""
1167 1168
@@ -1178,7 +1179,7 @@ class Parser(): @@ -1178,7 +1179,7 @@ class Parser():
1178 DICOM standard tag (0x0020,0x0010) was used. 1179 DICOM standard tag (0x0020,0x0010) was used.
1179 """ 1180 """
1180 try: 1181 try:
1181 - data = self.data_image[0x0020][0x0010] 1182 + data = self.data_image[str(0x0020)][str(0x0010)]
1182 except(KeyError): 1183 except(KeyError):
1183 return "" 1184 return ""
1184 1185
@@ -1195,7 +1196,7 @@ class Parser(): @@ -1195,7 +1196,7 @@ class Parser():
1195 DICOM standard tag (0x0018,0x1120) was used. 1196 DICOM standard tag (0x0018,0x1120) was used.
1196 """ 1197 """
1197 try: 1198 try:
1198 - data = self.data_image[0x0018][0x1120] 1199 + data = self.data_image[str(0x0018)][str(0x1120)]
1199 except(KeyError): 1200 except(KeyError):
1200 return 0.0 1201 return 0.0
1201 1202
@@ -1214,7 +1215,7 @@ class Parser(): @@ -1214,7 +1215,7 @@ class Parser():
1214 DICOM standard tag (0x0010,0x0040) was used. 1215 DICOM standard tag (0x0010,0x0040) was used.
1215 """ 1216 """
1216 try: 1217 try:
1217 - data = self.data_image[0x0010][0x0040] 1218 + data = self.data_image[str(0x0010)][str(0x0040)]
1218 except(KeyError): 1219 except(KeyError):
1219 return "" 1220 return ""
1220 1221
@@ -1231,7 +1232,7 @@ class Parser(): @@ -1231,7 +1232,7 @@ class Parser():
1231 DICOM standard tag (0x0010, 0x1010) was used. 1232 DICOM standard tag (0x0010, 0x1010) was used.
1232 """ 1233 """
1233 try: 1234 try:
1234 - data = self.data_image[0x0010][0x1010] 1235 + data = self.data_image[str(0x0010)][str(0x1010)]
1235 except(KeyError): 1236 except(KeyError):
1236 return "" 1237 return ""
1237 1238
@@ -1251,7 +1252,7 @@ class Parser(): @@ -1251,7 +1252,7 @@ class Parser():
1251 DICOM standard tag (0x0010,0x0010) was used. 1252 DICOM standard tag (0x0010,0x0010) was used.
1252 """ 1253 """
1253 try: 1254 try:
1254 - data = self.data_image[0x0010][0x0010] 1255 + data = self.data_image[str(0x0010)][str(0x0010)]
1255 except(KeyError): 1256 except(KeyError):
1256 return "" 1257 return ""
1257 1258
@@ -1271,7 +1272,7 @@ class Parser(): @@ -1271,7 +1272,7 @@ class Parser():
1271 DICOM standard tag (0x0010,0x0020) was used. 1272 DICOM standard tag (0x0010,0x0020) was used.
1272 """ 1273 """
1273 try: 1274 try:
1274 - data = self.data_image[0x0010][0x0020] 1275 + data = self.data_image[str(0x0010)][str(0x0020)]
1275 except(KeyError): 1276 except(KeyError):
1276 return "" 1277 return ""
1277 1278
@@ -1291,7 +1292,7 @@ class Parser(): @@ -1291,7 +1292,7 @@ class Parser():
1291 DICOM standard tag (0x0018,0x1151) was used. 1292 DICOM standard tag (0x0018,0x1151) was used.
1292 """ 1293 """
1293 try: 1294 try:
1294 - data = self.data_image[0x0018][0x1151] 1295 + data = self.data_image[str(0x0018)][str(0x1151)]
1295 except(KeyError): 1296 except(KeyError):
1296 return "" 1297 return ""
1297 1298
@@ -1308,7 +1309,7 @@ class Parser(): @@ -1308,7 +1309,7 @@ class Parser():
1308 DICOM standard tag (0x0018, 0x1152) was used. 1309 DICOM standard tag (0x0018, 0x1152) was used.
1309 """ 1310 """
1310 try: 1311 try:
1311 - data = self.data_image[0x0018][0x1152] 1312 + data = self.data_image[str(0x0018)][str(0x1152)]
1312 except(KeyError): 1313 except(KeyError):
1313 return "" 1314 return ""
1314 1315
@@ -1325,7 +1326,7 @@ class Parser(): @@ -1325,7 +1326,7 @@ class Parser():
1325 DICOM standard tag (0x0018,0x0060) was used. 1326 DICOM standard tag (0x0018,0x0060) was used.
1326 """ 1327 """
1327 try: 1328 try:
1328 - data = self.data_image[0x0018][0x0060] 1329 + data = self.data_image[str(0x0018)][str(0x0060)]
1329 except(KeyError): 1330 except(KeyError):
1330 return "" 1331 return ""
1331 1332
@@ -1342,7 +1343,7 @@ class Parser(): @@ -1342,7 +1343,7 @@ class Parser():
1342 DICOM standard tag (0x0018,0x0050) was used. 1343 DICOM standard tag (0x0018,0x0050) was used.
1343 """ 1344 """
1344 try: 1345 try:
1345 - data = self.data_image[0x0018][0x0050] 1346 + data = self.data_image[str(0x0018)][str(0x0050)]
1346 except(KeyError): 1347 except(KeyError):
1347 return 0 1348 return 0
1348 if (data): 1349 if (data):
@@ -1360,7 +1361,7 @@ class Parser(): @@ -1360,7 +1361,7 @@ class Parser():
1360 DICOM standard tag (0x0018,0x1210) was used. 1361 DICOM standard tag (0x0018,0x1210) was used.
1361 """ 1362 """
1362 try: 1363 try:
1363 - data = self.data_image[0x0018][0x1210] 1364 + data = self.data_image[str(0x0018)][str(0x1210)]
1364 except(KeyError): 1365 except(KeyError):
1365 return "" 1366 return ""
1366 1367
@@ -1377,7 +1378,7 @@ class Parser(): @@ -1377,7 +1378,7 @@ class Parser():
1377 DICOM standard tag (0x0008,0x0080) was used. 1378 DICOM standard tag (0x0008,0x0080) was used.
1378 """ 1379 """
1379 try: 1380 try:
1380 - data = self.data_image[0x0008][0x0080] 1381 + data = self.data_image[str(0x0008)][str(0x0080)]
1381 except(KeyError): 1382 except(KeyError):
1382 return "" 1383 return ""
1383 1384
@@ -1394,7 +1395,7 @@ class Parser(): @@ -1394,7 +1395,7 @@ class Parser():
1394 DICOM standard tag (0x0008, 0x1010) was used. 1395 DICOM standard tag (0x0008, 0x1010) was used.
1395 """ 1396 """
1396 try: 1397 try:
1397 - data = self.data_image[0x0008][0x1010] 1398 + data = self.data_image[str(0x0008)][str(0x1010)]
1398 except(KeyError): 1399 except(KeyError):
1399 return "" 1400 return ""
1400 1401
@@ -1411,7 +1412,7 @@ class Parser(): @@ -1411,7 +1412,7 @@ class Parser():
1411 DICOM standard tag (0x0008,0x1090) was used. 1412 DICOM standard tag (0x0008,0x1090) was used.
1412 """ 1413 """
1413 try: 1414 try:
1414 - data = self.data_image[0x0008][0x1090] 1415 + data = self.data_image[str(0x0008)][str(0x1090)]
1415 except(KeyError): 1416 except(KeyError):
1416 return "" 1417 return ""
1417 1418
@@ -1427,7 +1428,7 @@ class Parser(): @@ -1427,7 +1428,7 @@ class Parser():
1427 DICOM standard tag (0x0008, 0x1010) was used. 1428 DICOM standard tag (0x0008, 0x1010) was used.
1428 """ 1429 """
1429 try: 1430 try:
1430 - data = self.data_image[0x0008][0x1010] 1431 + data = self.data_image[str(0x0008)][str(0x1010)]
1431 except(KeyError): 1432 except(KeyError):
1432 return "" 1433 return ""
1433 1434
@@ -1445,7 +1446,7 @@ class Parser(): @@ -1445,7 +1446,7 @@ class Parser():
1445 DICOM standard tag (0x0008,0x0060) was used. 1446 DICOM standard tag (0x0008,0x0060) was used.
1446 """ 1447 """
1447 try: 1448 try:
1448 - data = self.data_image[0x0008][0x0060] 1449 + data = self.data_image[str(0x0008)][str(0x0060)]
1449 except(KeyError): 1450 except(KeyError):
1450 return "" 1451 return ""
1451 1452
@@ -1462,7 +1463,7 @@ class Parser(): @@ -1462,7 +1463,7 @@ class Parser():
1462 DICOM standard tag (0x0020,0x0013) was used. 1463 DICOM standard tag (0x0020,0x0013) was used.
1463 """ 1464 """
1464 try: 1465 try:
1465 - data = self.data_image[0x0020][0x0013] 1466 + data = self.data_image[str(0x0020)][str(0x0013)]
1466 except(KeyError): 1467 except(KeyError):
1467 return "" 1468 return ""
1468 1469
@@ -1478,7 +1479,7 @@ class Parser(): @@ -1478,7 +1479,7 @@ class Parser():
1478 DICOM standard tag (0x0008,0x1030) was used. 1479 DICOM standard tag (0x0008,0x1030) was used.
1479 """ 1480 """
1480 try: 1481 try:
1481 - data = self.data_image[0x0008][0x1030] 1482 + data = self.data_image[str(0x0008)][str(0x1030)]
1482 if (data): 1483 if (data):
1483 encoding = self.GetEncoding() 1484 encoding = self.GetEncoding()
1484 return data.decode(encoding) 1485 return data.decode(encoding)
@@ -1509,7 +1510,7 @@ class Parser(): @@ -1509,7 +1510,7 @@ class Parser():
1509 DICOM standard tag (0x0008, 0x103E) was used. 1510 DICOM standard tag (0x0008, 0x103E) was used.
1510 """ 1511 """
1511 try: 1512 try:
1512 - data = self.data_image[0x0008][0x103E] 1513 + data = self.data_image[str(0x0008)][str(0x103E)]
1513 if data == "None": 1514 if data == "None":
1514 return _("unnamed") 1515 return _("unnamed")
1515 if (data): 1516 if (data):
@@ -1525,7 +1526,7 @@ class Parser(): @@ -1525,7 +1526,7 @@ class Parser():
1525 DICOM standard tag (0x0008,0x0033) was used. 1526 DICOM standard tag (0x0008,0x0033) was used.
1526 """ 1527 """
1527 try: 1528 try:
1528 - data = self.data_image[0x0008][0x0033] 1529 + data = self.data_image[str(0x0008)][str(0x0033)]
1529 except(KeyError): 1530 except(KeyError):
1530 return "" 1531 return ""
1531 1532
@@ -1539,7 +1540,7 @@ class Parser(): @@ -1539,7 +1540,7 @@ class Parser():
1539 DICOM standard tag (0x0008,0x032) was used. 1540 DICOM standard tag (0x0008,0x032) was used.
1540 """ 1541 """
1541 try: 1542 try:
1542 - data = self.data_image[0x0008][0x0032] 1543 + data = self.data_image[str(0x0008)][str(0x0032)]
1543 except(KeyError): 1544 except(KeyError):
1544 return "" 1545 return ""
1545 1546
@@ -1553,7 +1554,7 @@ class Parser(): @@ -1553,7 +1554,7 @@ class Parser():
1553 DICOM standard tag (0x0020, 0x0011) was used. 1554 DICOM standard tag (0x0020, 0x0011) was used.
1554 """ 1555 """
1555 try: 1556 try:
1556 - data = self.data_image[0x0020][0x0011] 1557 + data = self.data_image[str(0x0020)][str(0x0011)]
1557 except(KeyError): 1558 except(KeyError):
1558 return "" 1559 return ""
1559 1560
@@ -1567,20 +1568,11 @@ class Parser(): @@ -1567,20 +1568,11 @@ class Parser():
1567 DICOM standard tag (0x0008, 0x0005) was used. 1568 DICOM standard tag (0x0008, 0x0005) was used.
1568 """ 1569 """
1569 try: 1570 try:
1570 - encoding = self.data_image[0x0008][0x0005] 1571 + encoding_value = self.data_image[str(0x0008)][str(0x0005)]
  1572 + return const.DICOM_ENCODING_TO_PYTHON[encoding_value]
1571 except(KeyError): 1573 except(KeyError):
1572 return 'ISO_IR_100' 1574 return 'ISO_IR_100'
1573 1575
1574 - if encoding is None or encoding == "None" or not encoding.strip():  
1575 - return 'ISO_IR 100'  
1576 - else:  
1577 - #Problem with 0051 anonymized  
1578 - if (encoding.split(":"))[0] == "Loaded":  
1579 - return 'ISO_IR 100'  
1580 - else:  
1581 - return encoding  
1582 - return 'ISO_IR 100'  
1583 -  
1584 1576
1585 class DicomWriter: 1577 class DicomWriter:
1586 1578
invesalius/reader/dicom_reader.py
@@ -100,7 +100,6 @@ class LoadDicom: @@ -100,7 +100,6 @@ class LoadDicom:
100 def run(self): 100 def run(self):
101 101
102 grouper = self.grouper 102 grouper = self.grouper
103 -  
104 reader = gdcm.ImageReader() 103 reader = gdcm.ImageReader()
105 reader.SetFileName(self.filepath) 104 reader.SetFileName(self.filepath)
106 if (reader.Read()): 105 if (reader.Read()):
@@ -120,11 +119,13 @@ class LoadDicom: @@ -120,11 +119,13 @@ class LoadDicom:
120 tag = gdcm.Tag(0x0008, 0x0005) 119 tag = gdcm.Tag(0x0008, 0x0005)
121 ds = reader.GetFile().GetDataSet() 120 ds = reader.GetFile().GetDataSet()
122 if ds.FindDataElement(tag): 121 if ds.FindDataElement(tag):
123 - encoding = str(ds.GetDataElement(tag).GetValue())  
124 - if encoding is None or encoding == "None" or encoding.startswith("Loaded"): 122 + encoding_value = str(ds.GetDataElement(tag).GetValue())
  123 +
  124 + if encoding_value.startswith("Loaded"):
125 encoding = "ISO_IR 100" 125 encoding = "ISO_IR 100"
126 - else:  
127 - encoding = "ISO_IR_100" 126 + else:
  127 + encoding = const.DICOM_ENCODING_TO_PYTHON[encoding_value]
  128 +
128 # Iterate through the Header 129 # Iterate through the Header
129 iterator = header.GetDES().begin() 130 iterator = header.GetDES().begin()
130 while (not iterator.equal(header.GetDES().end())): 131 while (not iterator.equal(header.GetDES().end())):
@@ -134,8 +135,8 @@ class LoadDicom: @@ -134,8 +135,8 @@ class LoadDicom:
134 data = stf.ToStringPair(tag) 135 data = stf.ToStringPair(tag)
135 stag = tag.PrintAsPipeSeparatedString() 136 stag = tag.PrintAsPipeSeparatedString()
136 137
137 - group = tag.GetGroup()  
138 - field = tag.GetElement() 138 + group = str(tag.GetGroup())
  139 + field = str(tag.GetElement())
139 140
140 tag_labels[stag] = data[0] 141 tag_labels[stag] = data[0]
141 142
@@ -158,8 +159,8 @@ class LoadDicom: @@ -158,8 +159,8 @@ class LoadDicom:
158 data = stf.ToStringPair(tag) 159 data = stf.ToStringPair(tag)
159 stag = tag.PrintAsPipeSeparatedString() 160 stag = tag.PrintAsPipeSeparatedString()
160 161
161 - group = tag.GetGroup()  
162 - field = tag.GetElement() 162 + group = str(tag.GetGroup())
  163 + field = str(tag.GetElement())
163 164
164 tag_labels[stag] = data[0] 165 tag_labels[stag] = data[0]
165 166
@@ -179,9 +180,9 @@ class LoadDicom: @@ -179,9 +180,9 @@ class LoadDicom:
179 rvtk.Update() 180 rvtk.Update()
180 181
181 try: 182 try:
182 - data = data_dict[0x028][0x1050] 183 + data = data_dict[str(0x028)][str(0x1050)]
183 level = [float(value) for value in data.split('\\')][0] 184 level = [float(value) for value in data.split('\\')][0]
184 - data = data_dict[0x028][0x1051] 185 + data = data_dict[str(0x028)][str(0x1051)]
185 window = [float(value) for value in data.split('\\')][0] 186 window = [float(value) for value in data.split('\\')][0]
186 except(KeyError): 187 except(KeyError):
187 level = 300.0 188 level = 300.0
@@ -229,7 +230,7 @@ class LoadDicom: @@ -229,7 +230,7 @@ class LoadDicom:
229 #---------- Verify is DICOMDir ------------------------------- 230 #---------- Verify is DICOMDir -------------------------------
230 is_dicom_dir = 1 231 is_dicom_dir = 1
231 try: 232 try:
232 - if (data_dict[0x002][0x002] != "1.2.840.10008.1.3.10"): #DICOMDIR 233 + if (data_dict[str(0x002)][str(0x002)] != "1.2.840.10008.1.3.10"): #DICOMDIR
233 is_dicom_dir = 0 234 is_dicom_dir = 0
234 except(KeyError): 235 except(KeyError):
235 is_dicom_dir = 0 236 is_dicom_dir = 0
@@ -244,13 +245,16 @@ class LoadDicom: @@ -244,13 +245,16 @@ class LoadDicom:
244 grouper.AddFile(dcm) 245 grouper.AddFile(dcm)
245 246
246 #self.l.release() 247 #self.l.release()
247 -  
248 - #========== used in test =======================================  
249 - #main_dict = dict(  
250 - # data = dict_file,  
251 - # labels = tag_labels)  
252 -  
253 - #plistlib.writePlist(main_dict, ".//teste.plist")""" 248 +
  249 +
  250 + #========== used in test =======================================
  251 + #print dict_file
  252 + #main_dict = dict(
  253 + # data = dict_file,
  254 + # labels = tag_labels)
  255 + #print main_dict
  256 + #print "\n"
  257 + #plistlib.writePlist(main_dict, ".//teste.plist")
254 258
255 259
256 def yGetDicomGroups(directory, recursive=True, gui=True): 260 def yGetDicomGroups(directory, recursive=True, gui=True):
@@ -338,7 +342,7 @@ class ProgressDicomReader: @@ -338,7 +342,7 @@ class ProgressDicomReader:
338 fow.SetFileName(log_path) 342 fow.SetFileName(log_path)
339 ow = vtk.vtkOutputWindow() 343 ow = vtk.vtkOutputWindow()
340 ow.SetInstance(fow) 344 ow.SetInstance(fow)
341 - 345 +
342 y = yGetDicomGroups(path, recursive) 346 y = yGetDicomGroups(path, recursive)
343 for value_progress in y: 347 for value_progress in y:
344 if not self.running: 348 if not self.running:
@@ -354,3 +358,4 @@ class ProgressDicomReader: @@ -354,3 +358,4 @@ class ProgressDicomReader:
354 self.UpdateLoadFileProgress(None) 358 self.UpdateLoadFileProgress(None)
355 self.stoped = False 359 self.stoped = False
356 360
  361 +