Как получить кривую от пересечения облака точек и произвольной плоскости?

У меня есть различные облака точек, определяющие RT-STRUCT, называемые ROI из файлов DICOM. Файлы DICOM формируются томографическими сканерами. Каждая область интереса образована облаком точек и представляет собой некоторый трехмерный объект.

Цель состоит в том, чтобы получить двухмерную кривую, которая образована плоскостью, разрезая точку облака области интереса. Проблема в том, что я не могу просто использовать точки, которые пересекала плоскость. Что мне, вероятно, нужно, так это пересечь трехмерную вогнутую оболочку какой-либо плоскостью и получить результирующий контур пересечения.

Есть ли библиотеки, которые уже реализовали эти операции? Я нашел библиотеку PCL и, вероятно, она решит мою проблему, но я не могу понять, как этого добиться с помощью PCL. Вдобавок я также могу использовать Matlab - мы используем его во время выполнения из C ++.

Кто-нибудь уже сталкивался с этой проблемой?

P.S. Как я уже упоминал выше, мне нужно использовать решение из моего кода C ++ - поэтому это должна быть какая-то библиотека или решение Matlab, которое я буду использовать через Matlab Runtime.

P.P.S. Очень важна точность такого рода расчетов - она ​​будет использована в медицинском ПО, предназначенном для работы с опухолями головного мозга, поэтому вы можете представить себе последствия ошибки (:


person Roman Kruglov    schedule 10.12.2011    source источник
comment
Я теряюсь с этим вопросом :( RT_STRUCT? ROI? DICOM? Plain == plane? Откуда исходит 3D-вогнутая оболочка? Является ли это частью ROI? Я думал, что ROI состоит только из точек?   -  person CygnusX1    schedule 10.12.2011
comment
@ CygnusX1 Простите насчет самолета .. Это просто опечатка. Я очень торопился и просто не заметил этого. Что касается DICOM и прочего, то это всего лишь ориентировочная информация. Я подумал, что, может быть, кто-то, кто работал с этим материалом, может наткнуться на что-то подобное.   -  person Roman Kruglov    schedule 12.12.2011


Ответы (2)


Сначала вам нужно сформировать поверхность из набора точек.

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

Затем, когда у вас есть треугольники, просто вычислить контурную линию, которую их пересекает плоскость.

См. Ссылки в Создание сетки из точек с координатами x, y и координаты z

person Martin Beckett    schedule 10.12.2011

Возможно, вы могли бы просто отбросить точки, далекие от плоскости, и спроецировать оставшиеся на плоскость. Вам все равно нужно будет восстановить кривую на плоскости, но для этого есть несколько хороших методов. См., Например, http://www.cse.ohio-state.edu/~tamaldey/curverecon.htm и http://valis.cs.uiuc.edu/~sariel/research/CG/applets/Crust/Crust.html.

person lhf    schedule 10.02.2012
comment
Это может сработать, но могут быть точки, составляющие часть поверхности, почти параллельную плоскости обзора и лежащую на небольшом расстоянии от нее. Так что в этом случае у нас не получится контура. - person Roman Kruglov; 10.02.2012