Масштабирование масштабирования и масштабирование перехвата

У меня есть несколько вопросов по поводу изменения масштаба наклона и пересчета изменения масштаба в CT DICOM:

  1. Используются ли они для передачи исходных данных со сканера в набор данных Хаунсфилда, в котором вода равна 0, а воздух - -1000?
  2. Я в группе отображения изображений. Как узнать наклон изменения масштаба и значения перехвата пересчета?
  3. Каково точное значение уклона масштабирования и пересечения масштабирования? Как они определяются?

Ответ 1

Сброс масштабирования и перекрестный перехват позволяют преобразовать значения пикселей в HU или другие единицы, как указано в теге 0028,1054.

Для изображений КТ блок должен быть HU (Hounsfield), а значение по умолчанию действительно HU, когда тег 0028,1054 отсутствует. Тем не менее, тег может присутствовать и может указывать другой блок (OD = оптическая плотность, US = неуказанный).

Наклон масштабирования и перехват определяются изготовителем аппаратного обеспечения.

Если преобразование из исходных значений пикселей в Hounsfield или оптическую плотность не является линейным, тогда применяется LUT.

Более подробную информацию см. в части 3 стандарта C.11, а также этот ответ Ширина окна и централизованное вычисление изображения DICOM

Ответ 2

Это моя реализация:

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