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

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

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

Если у вас установлены 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');

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

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

% 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');

Ускорите обработку с помощью Parallel Computing Toolbox

Если у вас установлен Parallel Computing Toolbox™, можно распределить обработку между несколькими работниками, чтобы ускорить обработку. Чтобы попробовать обработать изображение параллельно, установите 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

См. также

| |