Чтение файлов DICOM-RT для создания бинарной 3D-матрицы?

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

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

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

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

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

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

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


person superwillis    schedule 14.03.2011    source источник
comment
Я немного запутался. Проблема в том, что ваши контуры охватывают опухоль только на некоторых срезах? Значит, вам нужно интерполировать срезы контуров в 3D, чтобы покрыть весь объем опухоли?   -  person Ghaul    schedule 15.03.2011
comment
да. Контуры - это просто набор точек (а не фактические контурные линии), но они определяются только через каждые 2 мм (в направлении среза). Чтобы собрать изотропную трехмерную двоичную матрицу, мне нужно интерполировать срезы между каждым определенным набором контуров.   -  person superwillis    schedule 15.03.2011
comment
Другой способ сформулировать вопрос: учитывая набор умеренно распределенных точек, лежащих на поверхности опухоли, как мне создать из них поверхность и заполнить ее, чтобы получился трехмерный объем бинарной матрицы?   -  person superwillis    schedule 15.03.2011
comment
Это может помочь: mathworks.com/matlabcentral/fileexchange/   -  person Benjamin    schedule 15.03.2011
comment
Спасибо, хотя на самом деле я ищу что-нибудь для работы с файлами DICOM-RT. Matlab может нормально читать dicom, но файлы DICOM-RT также содержат файлы наборов структур, которые содержат сегментированные точки контура опухоли, которые накладываются поверх обычных изображений DICOM. Я ищу способ смоделировать эти контурные точки, а не сами изображения dicom.   -  person superwillis    schedule 16.03.2011


Ответы (3)


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

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

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

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

person emt409    schedule 04.11.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 по ссылке выше.

person superwillis    schedule 16.03.2011

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

person Perry Horwich    schedule 15.03.2011