Этот пример показывает, как быстро обработать заблокированное изображение с помощью двух стратегий, которые позволяют вычислять на небольших репрезентативных выборках изображения с высоким разрешением.
Обработка заблокированных изображений может занять много времени, что делает итеративную разработку алгоритмов непомерно дорогой. Существует два распространенных способа сокращения цикла обратной связи: итерация на изображении с более низким разрешением или итерация на частичной области заблокированного изображения. Этот пример демонстрирует оба этих подхода для создания маски сегментации для заблокированного изображения.
Если у вас установлены 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™, можно распределить обработку между несколькими работниками, чтобы ускорить обработку. Чтобы попробовать обработать изображение параллельно, установите 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