В этом примере показано, как быстро обработать заблокированное изображение, используя две стратегии, которые позволяют выполнять вычисления на небольших представительных образцах изображения с высоким разрешением.
Обработка заблокированных изображений может занять много времени, что делает итеративную разработку алгоритмов непомерно дорогой. Существует два общих способа сокращения цикла обратной связи: итерация на изображении с более низким разрешением или итерация на частичной области заблокированного изображения. В этом примере демонстрируются оба этих подхода к созданию маски сегментации для заблокированного изображения.
Если установлено приложение Parallel Computing Toolbox™, можно ускорить обработку с помощью нескольких сотрудников.
Создать blockedImage с использованием измененной версии изображения «tumor_091.tif» из набора данных CAMELYON16. Исходное изображение представляет собой тренировочное изображение лимфатического узла, содержащего опухолевую ткань. Исходное изображение имеет восемь уровней разрешения, а лучший уровень имеет разрешение 53760 на 61440. Измененное изображение имеет только три уровня грубого разрешения. Пространственная привязка модифицированного изображения была отрегулирована для обеспечения согласованного отношения сторон и регистрации признаков на каждом уровне.
bim = blockedImage('tumor_091R.tif');
Отображение заблокированного изображения с помощью bigimageshow функция.
bigimageshow(bim);

Многие заблокированные изображения содержат несколько уровней разрешения, включая версии с грубым более низким разрешением для лучшего изображения с высоким разрешением. В целом, распределение отдельных значений пикселей должно быть примерно одинаковым по всем уровням. Используя это предположение, можно вычислить глобальную статистику на грубом уровне, а затем использовать статистику для обработки более тонких уровней.
Извлеките изображение на самом грубом уровне, а затем преобразуйте его в оттенки серого.
imLowRes = gather(bim); % default is coarsest
imLowResGray = rgb2gray(imLowRes);
Разделите изображение на два класса и отобразите результат.
thresh = graythresh(imLowResGray); imLowResQuant = imbinarize(imLowResGray,thresh); imshow(imLowResQuant)

Проверьте наибольшее изображение. Сведите результат на нет, чтобы получить маску для окрашенной области.
bq = apply(bim, ...
@(bs)~imbinarize(rgb2gray(bs.Data),thresh));
Визуализируйте результат на лучшем уровне.
bigimageshow(bq,'CDataMapping','scaled');

Другой подход при работе с большими изображениями заключается в извлечении меньшего региона с особенностями, представляющими интерес. Можно вычислить статистику из ROI, а затем использовать статистику для обработки всего изображения с высоким разрешением.
% Zoom in on a region of interest.
bigimageshow(bim);
xlim([2400,3300])
ylim([900 1700])

Извлеките показываемую область из наилучшего уровня.
xrange = xlim;
yrange = ylim;
imRegion = getRegion(bim,[900 2400 1],[1700 3300 3],'Level',1);
imshow(imRegion);

Затем результаты отображаются в прототипе с этой областью.
imRegionGray = rgb2gray(imRegion); thresh = graythresh(imRegionGray); imLowResQuant = ~imbinarize(imRegionGray,thresh); imshow(imLowResQuant)

Проверьте полное заблокированное изображение и просмотрите результаты.
bq = apply(bim, ... @(bs)~imbinarize(rgb2gray(bs.Data),thresh)); bigimageshow(bq,'CDataMapping','scaled');

Если установлен Toolbox™ Parallel Computing, можно распределить обработку между несколькими работниками для ускорения обработки. Для параллельной обработки изображения установите runInParallel переменная для true.
runInParallel = false; if runInParallel % Open a pool p = gcp; % Ensure workers are on the same folder as the file to be able to % access it using just the relative path sourceDir = fileparts(which('tumor_091R.tif')); spmd cd(sourceDir) end % Run in parallel bq = apply(bim, ... @(bs)~imbinarize(rgb2gray(bs.Data),thresh),'UseParallel',true); end