exponenta event banner

Эффективно обрабатывать заблокированные изображения, используя частичные изображения или более низкие разрешения

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

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

Если установлено приложение 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

См. также

| |