exponenta event banner

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

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

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

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

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

В этом примере используется одно изображение из набора данных Camelyon16. Этот набор данных содержит 400 изображений всего слайда (WSI) лимфатических узлов, хранящихся в виде файлов 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

См. также

|

Связанные темы