В этом примере показано, как настроить и проверить пространственную информацию о ссылке 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" "
Вычислите относительную пиксельную ширину между уровнем 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