Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rescale slope and rescale intercept

Tags:

dicom

I have few questions about the rescale slope and rescale intercept in CT DICOM:

  1. Are they used to transfer original data from the scanner to Hounsfield data set, in which water is 0 and air is -1000?
  2. I am in the image display group. How can I know the rescale slope and the rescale intercept values?
  3. What's the exact meaning of the rescale slope and the rescale intercept? How are they determined?
like image 294
5YrsLaterDBA Avatar asked Apr 17 '12 15:04

5YrsLaterDBA


2 Answers

The rescale slope and rescale intercept allow to transform the pixel values to HU or other units, as specified in the tag 0028,1054.

For CT images, the unit should be HU (Hounsfield) and the default value is indeed HU when the tag 0028,1054 is not present. However, the tag may be present and may specify a different unit (OD=optical density, US=unspecified).

The rescale slope and intercept are determined by the manufacturer of the hardware.

If the transformation from original pixel values to Hounsfield or Optical density is not linear, then a LUT is applied.

Check the part 3 of the standard C.11 for more detailed information, and also this answer Window width and center calculation of DICOM image

like image 100
Paolo Brandoli Avatar answered Nov 03 '22 12:11

Paolo Brandoli


This is my implementation:

def window_ct(dcm, w, c, ymin, ymax):
    """Windows a CT slice.
    http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.11.2.html

    Args:
        dcm (pydicom.dataset.FileDataset):
        w: Window Width parameter.
        c: Window Center parameter.
        ymin: Minimum output value.
        ymax: Maximum output value.

    Returns:
        Windowed slice.
    """
    # convert to HU
    b = dcm.RescaleIntercept
    m = dcm.RescaleSlope
    x = m * dcm.pixel_array + b

    # windowing C.11.2.1.2.1 Default LINEAR Function
    #
    y = np.zeros_like(x)
    y[x <= (c - 0.5 - (w - 1) / 2)] = ymin
    y[x > (c - 0.5 + (w - 1) / 2)] = ymax
    y[(x > (c - 0.5 - (w - 1) / 2)) & (x <= (c - 0.5 + (w - 1) / 2))] = \
        ((x[(x > (c - 0.5 - (w - 1) / 2)) & (x <= (c - 0.5 + (w - 1) / 2))] - (c - 0.5)) / (w - 1) + 0.5) * (
                ymax - ymin) + ymin

    return y
like image 30
torayeff Avatar answered Nov 03 '22 12:11

torayeff