Чтение файлов DICOM-RT для создания трехмерной двоичной матрицы? - PullRequest
3 голосов
/ 14 марта 2011

В настоящее время я работаю с файлами DICOM-RT (которые содержат DICOM вместе с данными о доставке дозы и файлами набора структуры). В основном меня интересует файл «структурный набор» (то есть RTSS.dcm), который содержит набор точек контура для интересующей области интереса. В частности, точки контура окружают объем опухоли. Например, опухоль будет иметь набор из 5 контуров, каждый из которых будет набором точек, которые окружают этот срез опухоли.

Я пытаюсь использовать MatLab, чтобы использовать эти точки контура для построения объема опухоли в бинарной трехмерной матрице (0 = неопухоль, 1 = опухоль), и мне нужна помощь.

Один из возможных подходов - заполнить каждый набор контуров в виде двоичного среза, а затем интерполировать объем между срезами. До сих пор я использовал функцию fill или patch для создания двоичных сечений каждого среза контура, но мне трудно понять, как интерполировать эти двоичные срезы в Объем 3D. Кажется, что ни одна из встроенных функций не подходит для этой конкретной проблемы (хотя, может быть, я просто неправильно их использую?). Простая линейная интерполяция также не представляется подходящей, поскольку края одного контура должны сливаться со смежным контуром во всех направлениях.

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

Есть ли у кого-нибудь опыт использования методов интерполяции трехмерных срезов ИЛИ тесселяции, которые могут здесь применяться? Или, может быть, существуют какие-либо соответствующие инструментарии? Я застрял ...: (

Я открыт для подходов и на других языках: я немного знаком с C # и Python, хотя я предполагал, что MatLab будет немного проще обрабатывать операции с матрицами.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 05 ноября 2011

Я не уверен, из какой программы вы экспортируете файлы структуры dicom-rt, но я считаю, что нашел для вас более элегантное решение, уже описанное в программном обеспечении с открытым исходным кодом (GDCM, CMake, ITK) встатья журнала Insight.

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

Этот метод проверен для наборов структур dicom-rt из Eclipse и Masterplan.Надеюсь, это поможет.

http://www.midasjournal.org/download/viewpdf/701/4

1 голос
/ 17 марта 2011

Я думаю, что нашел ответ в другом посте ( здесь ). Вместо того, чтобы пытаться интерполировать «отсутствующие срезы» между определенными контурами, обработка точек контура как облака точек и нахождение выпуклой оболочки может быть более эффективным способом сделать это. Этот метод создал бинарный трехмерный том, за которым я следовал.

Вот код, который я использовал, надеюсь, он будет полезен для тех, кому нужно работать с файлами DICOM-RT:


    function mask = DicomRT2BinaryVol(file)
    points = abs(getContourPoints(file));

    %%NOTE: The getContourPoints function simply reads the file using
    %%'dicominfo' method and organizes the contour points into an n-by-3
    %%matrix, each column being the X,Y,Z coordinates.

    DT = DelaunayTri(points);
    [X,Y,Z] = meshgrid(1:50,1:50,1:50);
    simplexIndex = pointLocation(DT, X(:), Y(:), Z(:));
    mask = ~isnan(simplexIndex);
    mask = reshape(mask,size(X));
    end

Этот метод является слегка измененной версией метода, опубликованного @gnovice в ссылке выше.

0 голосов
/ 15 марта 2011

iTk - отличная библиотека для такого рода вещей: http://www.itk.org/ НТН

...