1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#-----------------------------------------------------------------------------
# We need to test the reading of all dicom images in the gdcmData directory
# First parse this directory and extract all images
set(GDCM_DATA_IMAGE_FILENAMES_GLOB_EXPR
"${GDCM_DATA_ROOT}/*.acr"
"${GDCM_DATA_ROOT}/*.nema"
"${GDCM_DATA_ROOT}/*.dcm"
)
set(GDCM_DATA_DICOMDIR_FILENAMES_GLOB_EXPR
# Those files do not have any extension, special regex:
"${GDCM_DATA_ROOT}/dicomdir*"
)
# Case sensitive system:
if(UNIX)
set(GDCM_DATA_IMAGE_FILENAMES_GLOB_EXPR
${GDCM_DATA_IMAGE_FILENAMES_GLOB_EXPR}
"${GDCM_DATA_ROOT}/*.DCM"
)
set(GDCM_DATA_DICOMDIR_FILENAMES_GLOB_EXPR
${GDCM_DATA_DICOMDIR_FILENAMES_GLOB_EXPR}
"${GDCM_DATA_ROOT}/DICOMDIR*"
)
endif()
# GLOB expression !
file(GLOB GDCM_DATA_IMAGE_FILENAMES_GLOB
${GDCM_DATA_IMAGE_FILENAMES_GLOB_EXPR}
)
# Same for DICOMDIR:
file(GLOB GDCM_DATA_DICOMDIR_FILENAMES_GLOB
${GDCM_DATA_DICOMDIR_FILENAMES_GLOB_EXPR}
)
set(GDCM_DATA_FILENAMES_GLOB
${GDCM_DATA_IMAGE_FILENAMES_GLOB}
${GDCM_DATA_DICOMDIR_FILENAMES_GLOB}
)
# List of images that are technically difficult to read
# Hopefully we will soon be able to read them
set(BLACK_LIST_READER
# grrrrrr do not handle swapping correctly (implicit dataset are such a pain)
LIBIDO-16-ACR_NEMA-Volume.dcm
# Papyrus:
PET-cardio-Multiframe-Papyrus.dcm
# No way to read this image:
ELSCINT1_LOSSLESS_RICE.dcm
# SignedShortLossless has never really been supported anyway:
SignedShortLosslessBug.dcm
# Would need to process ALL Pixel Data element when decompressing:
PET-GE-dicomwrite-PixelDataSQUNv3.dcm
# Toshiba US Private Data Storage 1.2.392.200036.9116.7.8.1.1.1
TOSHIBA_MDW_HEADER.dcm
# TODO, nasty:
PhilipsLosslessRice.dcm
# This file is incorrect
IM-0001-0066.dcm
# Problem with RLE
SIEMENS_GBS_III-16-ACR_NEMA_1.acr
SIEMENS_GBS_III-16-ACR_NEMA_1-ULis2Bytes.dcm
# TestImageChangeTransferSyntax1
MR-MONO2-12-angio-an1.acr
# Openjpeg / Part 2:
lena512_rot90.j2k.dcm
# Remove this one for now:
LengthOfItemLarger.dcm
# https://github.com/team-charls/charls/issues/16
JPEG_LS_InvalidEscapeSequence_COM_padding.dcm
# MITRA_CORNELL
MITRA_CORNELL.dcm
# FIXME
PET-GE-dicomwrite-PixelDataSQUN.dcm
)
if(NOT GDCM_USE_PVRG)
set(BLACK_LIST_READER
# The following should really fails according to JPEG spec, IJG is failing and even when forcing
# decompression using IJG output is different from PVRG...
# Apparently pvrg likes it this way...
# PHILIPS_Gyroscan-12-Jpeg_Extended_Process_2_4.dcm
${BLACK_LIST_READER}
PHILIPS_Gyroscan-12-Jpeg_Extended_Process_2_4.dcm
)
endif()
if(GDCM_WORDS_BIGENDIAN)
set(BLACK_LIST_READER
${BLACK_LIST_READER}
MR_Philips_Intera_PrivateSequenceExplicitVR_in_SQ_2001_e05f_item_wrong_lgt_use_NOSHADOWSEQ.dcm
MR_Philips_Intera_SwitchIndianess_noLgtSQItem_in_trueLgtSeq.dcm
PHILIPS_Intera-16-MONO2-Uncompress.dcm
SIEMENS_MAGNETOM-12-MONO2-GDCM12-VRUN.dcm
PICKER-16-MONO2-No_DicomV3_Preamble.dcm
)
endif()
if(NOT GDCM_SUPPORT_BROKEN_IMPLEMENTATION)
set(BLACK_LIST_READER
${BLACK_LIST_READER}
GE_GENESIS-16-MONO2-WrongLengthItem.dcm # can't read odd length
PHILIPS_GDCM12xBug2.dcm # odd length
KODAK-12-MONO1-Odd_Terminated_Sequence.dcmq # odd length
PrivateGEImplicitVRBigEndianTransferSyntax16Bits.dcm # odd length
PHILIPS_Gyroscan-8-MONO2-Odd_Sequence.dcm # odd length
BugGDCM2_UndefItemWrongVL.dcm # odd length
THERALYS-12-MONO2-Uncompressed-Even_Length_Tag.dcm
CT-SIEMENS-MissingPixelDataInIconSQ.dcm # odd length
00191113.dcm
MR_Philips_Intera_PrivateSequenceImplicitVR.dcm
PICKER-16-MONO2-Nested_icon.dcm
PHILIPS_GDCM12xBug.dcm # odd length
MR_Philips-Intera_BreaksNOSHADOW.dcm
NM_Kakadu44_SOTmarkerincons.dcm
MARCONI_MxTWin-12-MONO2-JpegLossless-ZeroLengthSQ.dcm
)
endif()
set(GDCM_DATA_FILENAMES)
set(GDCM_BLACK_LIST_READER_DATA_FILENAMES)
foreach(filename ${GDCM_DATA_FILENAMES_GLOB})
get_filename_component(filename_name ${filename} NAME)
string(REGEX MATCH ${filename_name} bad_dicom ${BLACK_LIST_READER})
if(NOT bad_dicom)
set(GDCM_DATA_FILENAMES "${GDCM_DATA_FILENAMES}\n\"${filename}\",")
else()
set(GDCM_BLACK_LIST_READER_DATA_FILENAMES "${GDCM_BLACK_LIST_READER_DATA_FILENAMES}\n\"${filename}\",")
endif()
endforeach()
# Populate GDCM_DATA_FILENAMES:
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/gdcmDataFileNames.cxx.in"
"${CMAKE_CURRENT_BINARY_DIR}/gdcmDataFileNames.cxx"
)
|