Легкие сегмента от 3-D сканирования грудной клетки

Этот пример показывает, как выполнить 3-D сегментацию с помощью активных контуров (змеи). Можно просмотреть результаты с помощью приложения Volume Viewer.

Подготовьте данные

Эта часть примера загружает человеческие данные о компьютерной томографии грудной клетки в рабочую область MATLAB®. Чтобы запустить этот пример, необходимо загрузить выборочные данные с MathWorks с помощью Add-On Explorer. Смотрите, что Выборочные данные Установки Используют Add-On Explorer.

load chestVolume
whos
  Name        Size                     Bytes  Class    Attributes

  V1        512x512x318            166723584  int16              

Преобразуйте данные о компьютерной томографии от int16 до single, чтобы нормировать значения между [0 1].

V = im2single(V1);
whos 
  Name        Size                     Bytes  Class     Attributes

  V         512x512x318            333447168  single              
  V1        512x512x318            166723584  int16               

Просмотрите сканирования грудной клетки с помощью приложения Volume Viewer. Откройте приложение от панели инструментов Приложений MATLAB. Можно также открыть приложение с помощью volumeViewer команды, задающей объем в качестве аргумента, volumeViewer(V). Volume Viewer задал alphamaps, которые предназначаются, чтобы обеспечить лучшее представление определенных типов данных. Чтобы получить лучшее представление сканирований грудной клетки, выберите предварительную установку кости ct.

Сегментируйте легкие

Эта часть примера показывает, как сегментировать легкие в данных о компьютерной томографии с помощью активного метода контура. Это - алгоритм наращивания областей, который требует начальных точек seed. Пример использует приложение Image Segmenter, чтобы создать эту маску seed путем сегментации два, ортогональные 2D срезы, один в плоскости XY и другом в плоскости XZ. Пример затем вставляет эти две сегментации в 3-D маску. Пример передает эту маску функции activecontour, чтобы создать 3-D сегментацию легких в грудной полости. (Этот пример использует активный метод контура, но вы могли использовать другие методы сегментации, чтобы выполнить ту же цель, такой как, заливка.)

Извлеките центральный срез и в XY и в размерностях XZ.

XY = V(:,:,160);
XZ = squeeze(V(256,:,:));

Просмотрите 2D срезы с помощью функции imshow.

figure, imshow(XY, [],'Border','tight');

figure, imshow(XZ, [],'Border','tight');

Можно выполнить сегментацию в приложении Image Segmenter. Откройте приложение от панели инструментов Приложений MATLAB или используйте команду imageSegmenter, задавая 2D срез в качестве аргумента, imageSegmenter(XY).

Чтобы запустить процесс сегментации, нажмите Threshold, чтобы открыть срез легкого во вкладке Threshold. На вкладке Threshold выберите Ручную Пороговую опцию и переместите Пороговый ползунок, чтобы задать пороговое значение, которое достигает хорошей сегментации легких. Нажмите Create Mask, чтобы принять пороговую обработку и возвратить вкладку Segmentation.

Приложение выполняет следующий код к порогу изображение.

BW = XY > 5.098000e-01;

После этой начальной сегментации легкого необходимо очистить маску с помощью опций в меню Refine Mask.

В приложении можно кликнуть по каждой опции, чтобы инвертировать рисунок маски так, чтобы легкие были на переднем плане (Маска Инвертирования), удалили другие сегментированные элементы помимо легких (Ясные Границы), и дыры заливки в сегментации легкого (Дыры Заливки). Наконец, используйте опцию Морфологии, чтобы сглаживать ребра сегментации легкого. На вкладке Morphology выберите операцию Erode Mask. После выполнения этих шагов выберите Show Binary и сохраните рисунок маски в рабочую область.

Приложение выполняет следующий код, чтобы совершенствовать маску.

BW = imcomplement(BW);
BW = imclearborder(BW);
BW = imfill(BW, 'holes');
radius = 3;
decomposition = 0;
se = strel('disk',radius,decomposition);
BW = imerode(BW, se);
maskedImageXY = XY;
maskedImageXY(~BW) = 0;
imshow(maskedImageXY)

Выполните ту же операцию на срезе XZ. С помощью Изображения загрузки выберите переменную XZ. Используйте пороговую обработку, чтобы выполнить начальную сегментацию легких. Для среза XZ Глобальная Пороговая опция создает соответствующую сегментацию (вызов imbinarize в следующем коде). Как со срезом XY, используйте опции в меню Refine Mask, чтобы создать полируемую сегментацию легких. В операции эрозии на вкладке Morphology задайте радиус 13, чтобы удалить маленькие посторонние объекты.

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

BW = imbinarize(XZ);
BW = imcomplement(BW);
BW = imclearborder(BW);
BW = imfill(BW,'holes');
radius = 13;
decomposition = 0;
se = strel('disk',radius,decomposition);
BW = imerode(BW, se);
maskedImageXZ = XZ;
maskedImageXZ(~BW) = 0;
imshow(maskedImageXZ)

Создайте Легкие Маски и Сегмента Seed Используя activecontour

В этой части примера создайте 3-D маску seed, которую можно использовать с функцией activecontour, чтобы сегментировать легкие.

Создайте логический 3-D объем тот же размер как входной объем и вставьте mask_XY и mask_XZ в соответствующих пространственных местоположениях.

mask = false(size(V));
mask(:,:, 160) = maskedImageXY;
mask(256, :, :) = mask(256, :, :)|reshape(maskedImageXZ, [1, 512, 318]);

Используя эту 3-D маску seed, сегментируйте легкие в 3-D объеме с помощью активного метода контура. Эта операция может занять несколько минут. Чтобы получить качественную сегментацию, используйте histeq, чтобы распространить значения воксела по доступной области значений.

V = histeq(V);

BW  = activecontour(V,mask,100,'Chan-Vese');

segmentedImage = V.*single(BW);

Можно просмотреть сегментированные легкие в приложении Volume Viewer, volumeViewer(segmentedImage). Путем управления alphamap настройками в Редакторе Рендеринга можно получить хорошее представление только легких.

Вычислите объем сегментированных легких

В этой части примера используйте функцию regionprops, чтобы вычислить объем (область) легких.

Вычислите область легких с помощью функции regionprops с опцией 'area'.

volLungsPixels = regionprops3(logical(BW),'volume');

Задайте интервал вокселов в x, y, и z размерности. (Собранный от метаданных файла ранее.)

volLungs1 = volLungsPixels.Volume(1)*0.76*0.76*1.25*1e-6;

volLungs2 = volLungsPixels.Volume(2)*0.76*0.76*1.25*1e-6;

volLungsLiters = volLungs1 + volLungs2
volLungsLiters = 5.7268

Смотрите также

| |