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

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

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

Загрузите человеческие данные о компьютерной томографии грудной клетки в рабочую область. Чтобы запустить этот пример, необходимо загрузить выборочные данные с 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');

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 настройками в Редакторе Рендеринга можно получить хорошее представление только легких.

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

Используйте функцию regionprops3 с 'volume' опция, чтобы вычислить объем легких.

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

Задайте интервал вокселов в x, y, и z размерности, который был собран от исходных метаданных файла. Метаданные не включены с данными изображения, которые вы загружаете с Add-On Explorer.

spacingx = 0.76;
spacingy = 0.76;
spacingz = 1.26*1e-6;
unitvol = spacingx*spacingy*spacingz;

volLungs1 = volLungsPixels.Volume(1)*unitvol;
volLungs2 = volLungsPixels.Volume(2)*unitvol;
volLungsLiters = volLungs1 + volLungs2
volLungsLiters = 5.7726

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

| |