Search code examples
pythonopencvimage-processingpydicommedical-imaging

Resize a DICOM image in python


I am trying to resize DICOM images of different dimensions into a common dimension size for training my neural network. I thought that cv2 could solve my problem. But I am getting a 'datatype not understood error' in my jupyter notebook

I am trying to create a tensorflow neural network that could predict the class of the image. Thus, I need images of a common dimension size for the first layer training

Here is the function I have created:

IMG_PX_SIZE = 224
def resize(img_dcm):
    return cv2.resize(np.array(img_dcm.pixel_array, (IMG_PX_SIZE,IMG_PX_SIZE)))

This is how I read the dcm files and pass it to the function:

img = pydi.dcmread(PATH)
image = resize(img)

I expected it to output a 224*224 sized image. But I am getting the following error:

<ipython-input-66-3cf283042491> in resize(img_dcm)
      1 IMG_PX_SIZE = 224
      2 def resize(img_dcm):
----> 3     return cv2.resize(np.array(image.pixel_array, (IMG_PX_SIZE,IMG_PX_SIZE)))

TypeError: data type not understood

Solution

  • Here's an alternative way to resize the images using Scikit-Image:

    In [105]: from pydicom.data import get_testdata_files
    
    # read a sample image
    In [106]: filename = get_testdata_files('MR_small.dcm')[0]
         ...: ds = pydicom.dcmread(filename)
    
    In [107]: data = ds.pixel_array
    
    In [108]: type(data)
    Out[108]: numpy.ndarray
    
    In [109]: data.shape
    Out[109]: (64, 64)
    
    In [111]: from skimage.transform import resize
    In [114]: IMG_PX_SIZE = 32
    
    # resize to new size
    In [115]: resized_img = resize(data, (IMG_PX_SIZE, IMG_PX_SIZE), anti_aliasing=True)
    
    In [116]: resized_img.shape
    Out[116]: (32, 32)