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

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

Пространственная ссылка в bigimage

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

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

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

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

imageDir = fullfile(tempdir,'Camelyon16');
if ~exist(imageDir,'dir')
    mkdir(imageDir);
end

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

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

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

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

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

finestLevel = bim.FinestResolutionLevel;
finestLevelInfo = bim.SpatialReferencing(finestLevel)
finestLevelInfo = 

  imref2d with properties:

           XWorldLimits: [0.5000 6.1441e+04]
           YWorldLimits: [0.5000 5.3761e+04]
              ImageSize: [53760 61440]
    PixelExtentInWorldX: 1
    PixelExtentInWorldY: 1
    ImageExtentInWorldX: 61440
    ImageExtentInWorldY: 53760
       XIntrinsicLimits: [0.5000 6.1441e+04]
       YIntrinsicLimits: [0.5000 5.3761e+04]

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

coarsestLevel = bim.CoarsestResolutionLevel;
disp(bim.SpatialReferencing(coarsestLevel))
  imref2d with properties:

           XWorldLimits: [0.5000 6.1441e+04]
           YWorldLimits: [0.5000 5.3761e+04]
              ImageSize: [512 512]
    PixelExtentInWorldX: 120
    PixelExtentInWorldY: 105
    ImageExtentInWorldX: 61440
    ImageExtentInWorldY: 53760
       XIntrinsicLimits: [0.5000 512.5000]
       YIntrinsicLimits: [0.5000 512.5000]

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

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

t = table((1:8)',bim.LevelSizes(:,1),bim.LevelSizes(:,2), ...
    bim.LevelSizes(:,1)./bim.LevelSizes(:,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   

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

Отобразите bigimage при помощи 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 поле метаданных на самом прекрасном уровне разрешения bigimage.

binfo = imfinfo(bim.DataSource);
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.SpatialReferencing(8).ImageSize.*pixelDims;

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

bim.SpatialReferencing(8).XWorldLimits = [0.5 worldExtents(2)];
bim.SpatialReferencing(8).YWorldLimits = [0.5 worldExtents(1)];

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

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

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

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

|

Похожие темы