Стандартизация нескольких изображений DICOM - PullRequest
0 голосов
/ 14 марта 2020

Я работаю с несколькими файлами DICOM, большинство из которых сильно отличаются по пикселям. Например, один колеблется от -1024 до 2815, а другой - от 0 до 2378. Есть ли способ стандартизировать их все в одном диапазоне. Также отметим, что я использую python и библиотеку pydicom. Заранее спасибо.

1 Ответ

4 голосов
/ 14 марта 2020

Если вы имеете дело с одним и тем же IOD для всех ваших данных (например, CT Image), и данные изображения уже находятся в HU (и чтобы быть уверенным в этом, вы можете использовать функцию apply_modality_lut () в pydicom):

from pydicom import dcmread
from pydicom.pixel_data_handlers.util import apply_modality_lut

ds = dcmread('filename.dcm')
arr = ds.pixel_array  # Raw unitless pixel data 
hu = apply_modality_lut(arr, ds)  # Pixel data has been converted to HU (for CT)

Тогда ваши данные уже находятся в заданном c количестве (а именно HU). Чтобы преобразовать в заданный c диапазон , достаточно просто решить, что делать со значениями за пределами выбранного диапазона:

import numpy as np
# Clip values outside the range to the min/max of the range
clipped_hu = np.clip(hu, -1024, 1024)

Конечно, это означает, что любые обрезанные пиксели больше не должны рассматриваться точное представление ваших входных данных.

Rescale vs Windowing

Я собираюсь добавить немного пояснения о разнице между масштабированием данных DICOM и его обработкой.

Представьте, что у вас есть две линейки, одна в сантиметрах, а другая в дюймах. Вы применяете операцию масштабирования DICOM к обоим - в pydicom вы используете apply_modality_lut() - и вы получите две линейки в см. Теперь вы можете использовать свои линейки для измерения материала, и вы получите одинаковые значения от обоих, аккуратно!

Теперь вы берете свои линейки и применяете одну и ту же операцию DICOM для окон к обоим. Работа с окнами немного менее удобна для аналогий, по сути, вы берете небольшое окно ваших линейок (скажем, сечение от 10 до 12 см) и растягиваете его до той же длины, что и вся линейка ранее. Ваши линейки больше не в сантиметрах и не могут использоваться для измерения материала, но, возможно, расширив этот раздел, вы увидите некоторые детали, которые раньше не были очевидны ( как опухоль ). Еще одна приятная вещь, связанная с применением одинаковых операций масштабирования + управления окнами к обоим, заключается в том, что вы все равно можете осмысленно сравнить свои два линейки с друг с другом , поскольку они оба растянуты на одинаковую величину.

Таким образом, операция масштабирования - это преобразование необработанных данных в количество, чтобы обеспечить прямое взаимное сравнение, в то время как операция оконного управления - это что-то для визуализации. Если вы хотите узнать область с высокой плотностью сканирования КТ, вы бы использовали операцию масштабирования без окон. Если вы хотите увидеть то, что видел рентгенолог при написании их отчета, вам следует применить операции как изменения масштаба, так и работы с окнами.

...