In [1]:
# Compatibility with Python 3
from __future__ import print_function  # print('me') instead of print 'me'
from __future__ import division  # 1/2 == 0.5, not 0
In [2]:
# Show figures inside the notebook
%matplotlib inline
In [3]:
import numpy as np  # the Python array package
import matplotlib.pyplot as plt  # the Python plotting package
In [4]:
import os
In [5]:
dcm_dir = '/Users/mb312/data/gre_field_mapping_4'
dcm_fnames = sorted(os.listdir(dcm_dir))
dcm_fnames
Out[5]:
['IM-0004-0001.dcm',
 'IM-0004-0002.dcm',
 'IM-0004-0003.dcm',
 'IM-0004-0004.dcm',
 'IM-0004-0005.dcm',
 'IM-0004-0006.dcm',
 'IM-0004-0007.dcm',
 'IM-0004-0008.dcm',
 'IM-0004-0009.dcm',
 'IM-0004-0010.dcm',
 'IM-0004-0011.dcm',
 'IM-0004-0012.dcm',
 'IM-0004-0013.dcm',
 'IM-0004-0014.dcm',
 'IM-0004-0015.dcm',
 'IM-0004-0016.dcm',
 'IM-0004-0017.dcm',
 'IM-0004-0018.dcm',
 'IM-0004-0019.dcm',
 'IM-0004-0020.dcm',
 'IM-0004-0021.dcm',
 'IM-0004-0022.dcm',
 'IM-0004-0023.dcm',
 'IM-0004-0024.dcm',
 'IM-0004-0025.dcm',
 'IM-0004-0026.dcm',
 'IM-0004-0027.dcm',
 'IM-0004-0028.dcm',
 'IM-0004-0029.dcm',
 'IM-0004-0030.dcm',
 'IM-0004-0031.dcm',
 'IM-0004-0032.dcm',
 'IM-0004-0033.dcm',
 'IM-0004-0034.dcm',
 'IM-0004-0035.dcm',
 'IM-0004-0036.dcm',
 'IM-0004-0037.dcm',
 'IM-0019-0001.dcm',
 'IM-0019-0002.dcm',
 'IM-0019-0003.dcm',
 'IM-0019-0004.dcm',
 'IM-0019-0005.dcm',
 'IM-0019-0006.dcm',
 'IM-0019-0007.dcm',
 'IM-0019-0008.dcm',
 'IM-0019-0009.dcm',
 'IM-0019-0010.dcm',
 'IM-0019-0011.dcm',
 'IM-0019-0012.dcm',
 'IM-0019-0013.dcm',
 'IM-0019-0014.dcm',
 'IM-0019-0015.dcm',
 'IM-0019-0016.dcm',
 'IM-0019-0017.dcm',
 'IM-0019-0018.dcm',
 'IM-0019-0019.dcm',
 'IM-0019-0020.dcm',
 'IM-0019-0021.dcm',
 'IM-0019-0022.dcm',
 'IM-0019-0023.dcm',
 'IM-0019-0024.dcm',
 'IM-0019-0025.dcm',
 'IM-0019-0026.dcm',
 'IM-0019-0027.dcm',
 'IM-0019-0028.dcm',
 'IM-0019-0029.dcm',
 'IM-0019-0030.dcm',
 'IM-0019-0031.dcm',
 'IM-0019-0032.dcm',
 'IM-0019-0033.dcm',
 'IM-0019-0034.dcm',
 'IM-0019-0035.dcm',
 'IM-0019-0036.dcm',
 'IM-0019-0037.dcm']
In [6]:
dcm_paths = [os.path.join(dcm_dir, fname) for fname in dcm_fnames]
In [7]:
import dicom
In [8]:
dcms = [dicom.read_file(path) for path in dcm_paths]
for dcm in dcms:
    print(os.path.basename(dcm.filename), dcm.ImagePositionPatient)
IM-0004-0001.dcm ['-102.14466766421', '-121.97006028753', '2.6212637369443']
IM-0004-0002.dcm ['-102.01918009821', '-121.82874101263', '5.6153044645597']
IM-0004-0003.dcm ['-101.89369253222', '-121.68742173773', '8.6093455796053']
IM-0004-0004.dcm ['-101.76820508543', '-121.54610246283', '11.603386635046']
IM-0004-0005.dcm ['-101.64271751944', '-121.40478318793', '14.59742760108']
IM-0004-0006.dcm ['-101.51723007265', '-121.26346391302', '17.591469043951']
IM-0004-0007.dcm ['-101.39174262587', '-121.12214463812', '20.585509533148']
IM-0004-0008.dcm ['-101.26625505987', '-120.98082536322', '23.579550976019']
IM-0004-0009.dcm ['-101.14076761309', '-120.83950608832', '26.573591465216']
IM-0004-0010.dcm ['-101.0152800471', '-120.69818681341', '29.567632908087']
IM-0004-0011.dcm ['-100.88979260031', '-120.55686753851', '32.561674350958']
IM-0004-0012.dcm ['-100.76430509392', '-120.41554826361', '35.555715793829']
IM-0004-0013.dcm ['-100.63881758753', '-120.27422898871', '38.549755329352']
IM-0004-0014.dcm ['-100.51333008114', '-120.1329097138', '41.543796772223']
IM-0004-0015.dcm ['-100.38784257475', '-119.9915904389', '44.537838215094']
IM-0004-0016.dcm ['-100.26235506836', '-119.850271164', '47.531879657965']
IM-0004-0017.dcm ['-100.13686757687', '-119.7089518891', '50.525921100836']
IM-0004-0018.dcm ['-100.01138007793', '-119.5676326142', '53.519962543707']
IM-0004-0019.dcm ['-99.885892578995', '-119.42631333929', '56.514003986578']
IM-0004-0020.dcm ['-99.760405087507', '-119.28499215704', '59.508041614752']
IM-0004-0021.dcm ['-99.634917566216', '-119.14367288214', '62.502083057623']
IM-0004-0022.dcm ['-99.509430089629', '-119.00235360724', '65.496124500494']
IM-0004-0023.dcm ['-99.383942583239', '-118.86103433233', '68.490165943365']
IM-0004-0024.dcm ['-99.25845507685', '-118.71971505743', '71.484207386236']
IM-0004-0025.dcm ['-99.13296757046', '-118.57839578253', '74.478248829107']
IM-0004-0026.dcm ['-99.00748006407', '-118.43707650763', '77.472290271979']
IM-0004-0027.dcm ['-98.881992617286', '-118.29575723273', '80.46633171485']
IM-0004-0028.dcm ['-98.756505051291', '-118.15443795782', '83.460373157721']
IM-0004-0029.dcm ['-98.631017604506', '-118.01311868292', '86.454414600592']
IM-0004-0030.dcm ['-98.505530038512', '-117.87179940802', '89.448456043463']
IM-0004-0031.dcm ['-98.380042591727', '-117.73048013312', '92.442497486334']
IM-0004-0032.dcm ['-98.254555144942', '-117.58916085821', '95.436538929205']
IM-0004-0033.dcm ['-98.129067578948', '-117.44784158331', '98.430580372076']
IM-0004-0034.dcm ['-98.003580132163', '-117.30652230841', '101.42461418555']
IM-0004-0035.dcm ['-97.878092566169', '-117.16520303351', '104.41865562842']
IM-0004-0036.dcm ['-97.752605000174', '-117.0238837586', '107.41269707129']
IM-0004-0037.dcm ['-97.627117672599', '-116.8825644837', '110.40673851417']
IM-0019-0001.dcm ['-102.14466766421', '-121.97006028753', '2.6212637369443']
IM-0019-0002.dcm ['-102.01918009821', '-121.82874101263', '5.6153044645597']
IM-0019-0003.dcm ['-101.89369253222', '-121.68742173773', '8.6093455796053']
IM-0019-0004.dcm ['-101.76820508543', '-121.54610246283', '11.603386635046']
IM-0019-0005.dcm ['-101.64271751944', '-121.40478318793', '14.59742760108']
IM-0019-0006.dcm ['-101.51723007265', '-121.26346391302', '17.591469043951']
IM-0019-0007.dcm ['-101.39174262587', '-121.12214463812', '20.585509533148']
IM-0019-0008.dcm ['-101.26625505987', '-120.98082536322', '23.579550976019']
IM-0019-0009.dcm ['-101.14076761309', '-120.83950608832', '26.573591465216']
IM-0019-0010.dcm ['-101.0152800471', '-120.69818681341', '29.567632908087']
IM-0019-0011.dcm ['-100.88979260031', '-120.55686753851', '32.561674350958']
IM-0019-0012.dcm ['-100.76430509392', '-120.41554826361', '35.555715793829']
IM-0019-0013.dcm ['-100.63881758753', '-120.27422898871', '38.549755329352']
IM-0019-0014.dcm ['-100.51333008114', '-120.1329097138', '41.543796772223']
IM-0019-0015.dcm ['-100.38784257475', '-119.9915904389', '44.537838215094']
IM-0019-0016.dcm ['-100.26235506836', '-119.850271164', '47.531879657965']
IM-0019-0017.dcm ['-100.13686757687', '-119.7089518891', '50.525921100836']
IM-0019-0018.dcm ['-100.01138007793', '-119.5676326142', '53.519962543707']
IM-0019-0019.dcm ['-99.885892578995', '-119.42631333929', '56.514003986578']
IM-0019-0020.dcm ['-99.760405087507', '-119.28499215704', '59.508041614752']
IM-0019-0021.dcm ['-99.634917566216', '-119.14367288214', '62.502083057623']
IM-0019-0022.dcm ['-99.509430089629', '-119.00235360724', '65.496124500494']
IM-0019-0023.dcm ['-99.383942583239', '-118.86103433233', '68.490165943365']
IM-0019-0024.dcm ['-99.25845507685', '-118.71971505743', '71.484207386236']
IM-0019-0025.dcm ['-99.13296757046', '-118.57839578253', '74.478248829107']
IM-0019-0026.dcm ['-99.00748006407', '-118.43707650763', '77.472290271979']
IM-0019-0027.dcm ['-98.881992617286', '-118.29575723273', '80.46633171485']
IM-0019-0028.dcm ['-98.756505051291', '-118.15443795782', '83.460373157721']
IM-0019-0029.dcm ['-98.631017604506', '-118.01311868292', '86.454414600592']
IM-0019-0030.dcm ['-98.505530038512', '-117.87179940802', '89.448456043463']
IM-0019-0031.dcm ['-98.380042591727', '-117.73048013312', '92.442497486334']
IM-0019-0032.dcm ['-98.254555144942', '-117.58916085821', '95.436538929205']
IM-0019-0033.dcm ['-98.129067578948', '-117.44784158331', '98.430580372076']
IM-0019-0034.dcm ['-98.003580132163', '-117.30652230841', '101.42461418555']
IM-0019-0035.dcm ['-97.878092566169', '-117.16520303351', '104.41865562842']
IM-0019-0036.dcm ['-97.752605000174', '-117.0238837586', '107.41269707129']
IM-0019-0037.dcm ['-97.627117672599', '-116.8825644837', '110.40673851417']
In [9]:
plt.imshow(dcms[0].pixel_array, cmap='gray')
print(dcms[0].filename)
/Users/mb312/data/gre_field_mapping_4/IM-0004-0001.dcm
In [10]:
plt.imshow(dcms[37].pixel_array, cmap='gray')
print(dcms[37].filename)
/Users/mb312/data/gre_field_mapping_4/IM-0019-0001.dcm
In [11]:
from hashlib import sha1
hash_values = {}
for path in dcm_paths:
    contents = open(path, 'rb').read()
    hash_value = sha1(contents).hexdigest()
    basename = os.path.basename(path)
    if hash_value in hash_values:
        print(basename,
              'has same byte contents as',
              hash_values[hash_value])
    else:
        hash_values[hash_value] = basename
IM-0019-0001.dcm has same byte contents as IM-0004-0001.dcm
IM-0019-0002.dcm has same byte contents as IM-0004-0002.dcm
IM-0019-0003.dcm has same byte contents as IM-0004-0003.dcm
IM-0019-0004.dcm has same byte contents as IM-0004-0004.dcm
IM-0019-0005.dcm has same byte contents as IM-0004-0005.dcm
IM-0019-0006.dcm has same byte contents as IM-0004-0006.dcm
IM-0019-0007.dcm has same byte contents as IM-0004-0007.dcm
IM-0019-0008.dcm has same byte contents as IM-0004-0008.dcm
IM-0019-0009.dcm has same byte contents as IM-0004-0009.dcm
IM-0019-0010.dcm has same byte contents as IM-0004-0010.dcm
IM-0019-0011.dcm has same byte contents as IM-0004-0011.dcm
IM-0019-0012.dcm has same byte contents as IM-0004-0012.dcm
IM-0019-0013.dcm has same byte contents as IM-0004-0013.dcm
IM-0019-0014.dcm has same byte contents as IM-0004-0014.dcm
IM-0019-0015.dcm has same byte contents as IM-0004-0015.dcm
IM-0019-0016.dcm has same byte contents as IM-0004-0016.dcm
IM-0019-0017.dcm has same byte contents as IM-0004-0017.dcm
IM-0019-0018.dcm has same byte contents as IM-0004-0018.dcm
IM-0019-0019.dcm has same byte contents as IM-0004-0019.dcm
IM-0019-0020.dcm has same byte contents as IM-0004-0020.dcm
IM-0019-0021.dcm has same byte contents as IM-0004-0021.dcm
IM-0019-0022.dcm has same byte contents as IM-0004-0022.dcm
IM-0019-0023.dcm has same byte contents as IM-0004-0023.dcm
IM-0019-0024.dcm has same byte contents as IM-0004-0024.dcm
IM-0019-0025.dcm has same byte contents as IM-0004-0025.dcm
IM-0019-0026.dcm has same byte contents as IM-0004-0026.dcm
IM-0019-0027.dcm has same byte contents as IM-0004-0027.dcm
IM-0019-0028.dcm has same byte contents as IM-0004-0028.dcm
IM-0019-0029.dcm has same byte contents as IM-0004-0029.dcm
IM-0019-0030.dcm has same byte contents as IM-0004-0030.dcm
IM-0019-0031.dcm has same byte contents as IM-0004-0031.dcm
IM-0019-0032.dcm has same byte contents as IM-0004-0032.dcm
IM-0019-0033.dcm has same byte contents as IM-0004-0033.dcm
IM-0019-0034.dcm has same byte contents as IM-0004-0034.dcm
IM-0019-0035.dcm has same byte contents as IM-0004-0035.dcm
IM-0019-0036.dcm has same byte contents as IM-0004-0036.dcm
IM-0019-0037.dcm has same byte contents as IM-0004-0037.dcm