Настройте пространственную ссылку для блокированных изображений

В этом примере показано, как настроить и проверить пространственную информацию о ссылке blockedImage объект.

Пространственная ссылка в блокированных изображениях

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

Загрузите блокированные данные изображения

Этот пример использует одно изображение от набора данных Camelyon16. Этот набор данных содержит 400 изображений целого понижения (WSIs) лимфатических узлов, сохраненных как мультиразрешение файлы TIF, которые являются слишком большими, чтобы загрузиться в память.

Создайте директорию, чтобы сохранить изображение Camelyon16.

imageDir = fullfile('I:\','Camelyon16');
if ~exist(imageDir,'dir')
    mkdir(imageDir);
end

Чтобы загрузить изображение, перейдите к веб-сайту Camelyon17 и щелкните по первой "ссылке" набора данных CAMELYON16. Откройте "обучение" затем директория "опухоли". Загрузите "tumor_091.tif" файл и переместите файл в директорию, заданную imageDir переменная.

Исследуйте пространственную ссылку по умолчанию

Создайте blockedImage объект с пространственной информацией о ссылке по умолчанию. По умолчанию блокированное изображение устанавливает пространственную ссылку каждого уровня иметь те же мировые степени как самый прекрасный слой. Самый прекрасный слой является слоем, который имеет самое высокое разрешение и большинство пикселей.

fileName = fullfile(imageDir,'tumor_091.tif');
bim = blockedImage(fileName);

Отобразите пространственную информацию о ссылке на самом прекрасном уровне. Размер изображения (заданный Size свойство), совпадает со степенями в мировых координатах. Заметьте, что система координат изображений по умолчанию помещает центр первого пикселя в (1,1). Поскольку пиксельные степени являются 1 единицей в ширину в каждой размерности, левый край первого пикселя запускается в (0.5 0.5).

finestLevel = 1;
finestStart = bim.WorldStart(finestLevel,:)
finestEnd = bim.WorldEnd(finestLevel,:)
finestStart =

    0.5000    0.5000    0.5000


finestEnd =

   1.0e+04 *

    5.3761    6.1441    0.0003

Отобразите пространственную информацию о ссылке на самом грубом уровне. Мировые степени совпадают с самым прекрасным уровнем, но крупный размер изображения является только 512 512 пикселями. Эффективно, каждый пиксель на этом крупном уровне соответствует 105 120 блок пикселей в самом прекрасном разрешении.

coarsestLevel = bim.NumLevels;
coarsestStart = bim.WorldStart(coarsestLevel,:)
coarsestEnd = bim.WorldEnd(coarsestLevel,:)
coarsestStart =

    0.5000    0.5000    0.5000


coarsestEnd =

   1.0e+04 *

    5.3761    6.1441    0.0003

Проверьте соотношение сторон

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

t = table((1:8)',bim.Size(:,1),bim.Size(:,2), ...
    bim.Size(:,1)./bim.Size(:,2), ...
    'VariableNames',["Level" "Height" "Width" "Aspect Ratio"]);
disp(t)
    Level    Height    Width    Aspect Ratio
    _____    ______    _____    ____________

      1      53760     61440        0.875   
      2      27136     30720      0.88333   
      3      13824     15360          0.9   
      4       7168      7680      0.93333   
      5       3584      4096        0.875   
      6       2048      2048            1   
      7       1024      1024            1   
      8        512       512            1   

Отобразите слои, чтобы сравнить пространственные степени

Отобразите блокированное изображение при помощи bigimageshow функция. Отобразите самый грубый уровень разрешения.

figure
subplot(1,2,1);
hl = bigimageshow(bim,'ResolutionLevel',coarsestLevel);
title('Coarsest Resolution Level (8)')
%

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

subplot(1,2,2);
hr = bigimageshow(bim);
title('Default Resolution Level')
%

Убедитесь, что оба отображения показывают те же степени.

linkaxes([hl.Parent,hr.Parent]);

Проверяйте пространственную ссылку по умолчанию

Увеличьте масштаб функции.

xlim([45000 50000]);
ylim([12000 17000]);

Измените уровень разрешения изображения на правой стороне окна рисунка. На уровне 6 функции выглядят выровненными с самым грубым уровнем.

hr.ResolutionLevel = 6;
title('Level 6');
snapnow
%

На уровне 1 не выравниваются функции. Поэтому уровень 1 и уровень 8 не охватывают те же мировые степени.

hr.ResolutionLevel = 1;
title('Level 1');
snapnow
%

Получите пространственные степени от блокированных метаданных изображения

Обычно первоисточнику данных кодировали пространственную информацию о ссылке в ее метаданных. Для набора данных Camelyon16 пространственная информация о ссылке хранится как содержание XML в ImageDescription поле метаданных на самом прекрасном уровне разрешения. Содержание XML имеет атрибут DICOM_PIXEL_SPACING для каждого уровня разрешения, который задает пиксельные степени.

Получите ImageDescription поле метаданных на самом прекрасном уровне разрешения blockedImage объект.

binfo = imfinfo(bim.Source);
binfo = binfo(1).ImageDescription;

Ищите содержимое строку "DICOM_PIXEL_SPACING". Существует девять найденных соответствий. Второй экземпляр атрибута соответствует пиксельному интервалу самого прекрасного уровня. Последний экземпляр атрибута соответствует пиксельному интервалу самого грубого уровня.

indx = strfind(binfo,"DICOM_PIXEL_SPACING");

Сохраните пиксельный интервал на самом прекрасном уровне. Чтобы извлечь значение пиксельного интервала из текста XML, визуально смотрите текст после второго экземпляра атрибута "DICOM_PIXEL_SPACING".

disp(binfo(indx(2):indx(2)+100))
pixelSpacing_L1 = 0.000227273;
DICOM_PIXEL_SPACING" Group="0x0028" Element="0x0030" PMSVR="IDoubleArray">"0.000227273" &qu

Точно так же сохраните пиксельный интервал на самом грубом уровне. Чтобы извлечь значение пиксельного интервала из текста XML, визуально смотрите текст после последнего экземпляра атрибута "DICOM_PIXEL_SPACING".

disp(binfo(indx(end):indx(end)+100))
pixelSpacing_L8 = 0.0290909;
DICOM_PIXEL_SPACING" Group="0x0028" Element="0x0030" PMSVR="IDoubleArray">"0.0290909" &quot

Установите пространственные степени

Вычислите относительную пиксельную ширину между уровнем 8 и уровнем 1.

pixelDims = pixelSpacing_L8/pixelSpacing_L1;

Самый прекрасный уровень имеет ссылочную пространственную степень. Вычислите соответствующие степени для уровня 8 относительно степеней уровня 1.

worldExtents = bim.Size(8,1:2).*pixelDims;

Обновите пространственную ссылку уровня 8.

bim.WorldEnd(8,1:2) =  worldExtents(2);

Проверьте выравнивание с пользовательской пространственной ссылкой

Вновь отобразите данные, чтобы подтвердить выравнивание ключевой возможности. Покажите уровень 8 на левой стороне и уровень 1 на правой стороне.

hl.CData = bim;
hl.ResolutionLevel = 8;
snapnow
hr.CData = bim;
hr.ResolutionLevel = 1;
snapnow

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

|

Похожие темы