exponenta event banner

обратиться

Технологические блоки большого изображения

Описание

пример

newbig = apply(bigimg,level,fun) обрабатывает все блоки большого изображения bigimg на заданном уровне разрешения с помощью функции fun и возвращает новое большое изображение newbig содержащий обработанные данные.

newbig = apply(bigimg,level,fun,extraImages) обрабатывает все блоки большого изображения bigimg и один или несколько дополнительных больших изображений extraImages. Использовать этот синтаксис при выполнении функции fun принимает несколько входных данных изображения, таких как изображение и маска.

newbig = apply(___,Name,Value) управляет аспектами обработки, такими как параллельная обработка данных или заполнение блоков на краю изображения, с использованием аргументов пары имя-значение.

[newbig,other1,other2,...] = apply(___) возвращает несколько выходных данных. Использовать этот синтаксис при выполнении функции fun возвращает несколько выходов, включая вывод изображения и без вывода изображения.

Примеры

свернуть все

Создать bigimage использование измененной версии изображения «tumor_091.tif» из набора данных CAMELYON16. Исходное изображение представляет собой тренировочное изображение лимфатического узла, содержащего опухолевую ткань. Исходное изображение имеет восемь уровней разрешения, а лучший уровень имеет разрешение 53760 на 61440. Измененное изображение имеет только три уровня грубого разрешения. Пространственная привязка модифицированного изображения была отрегулирована для обеспечения согласованного отношения сторон и регистрации признаков на каждом уровне.

bim = bigimage('tumor_091R.tif');

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

  • Преобразуйте блок в цветовое пространство L * a * b *.

  • Фильтрация блока с помощью imnlmfilt.

  • Преобразуйте блок обратно в цветовое пространство RGB.

apply функция рекомбинирует выходные блоки для формирования нового bigimage.

bim_enhanced = apply(bim,1, ...
    @(block)lab2rgb(imnlmfilt(rgb2lab(block),'DegreeOfSmoothing',15)));

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

figure
ha1 = subplot(1,2,1);
bigimageshow(bim,'ResolutionLevel',1);
title("Original Image")

Отображение расширенного изображения в правой части окна рисунка.

ha2 = subplot(1,2,2);
bigimageshow(bim_enhanced);
title("Enhanced Image")

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

linkaxes([ha1,ha2]);
xlim([1600,2300])
ylim([1900,2600])

Входные аргументы

свернуть все

Большое изображение, указанное как bigimage объект.

Уровень разрешения, заданный как положительное целое число, которое меньше или равно числу уровней разрешения bigimg.

Дескриптор функции, указанный как дескриптор. Дополнительные сведения см. в разделе Создание дескриптора функции.

Функциональные входы

Функция fun должен принимать в качестве входных данных хотя бы один блок.

При необходимости функция может принимать дополнительные входные данные, которые не являются блоками. Для выполнения обработки с неблочными входами необходимо вызвать apply функции и указать fun как анонимная функция. Дополнительные сведения см. в разделе Анонимные функции.

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

Тип вводаПодпись функцииПример вызова apply
Одиночный блок
function outblock = myfun(inblock)
  ...
end
newbig = apply(bigimg,level,@myfun);
Два блока
function outblock = myfun(inblock1,inblock2)
  ...
end

Укажите второе bigimage после дескриптора функции myfun.

newbig = apply(bigimg,level,@myfun,otherbig);

Один блок и один неблоковый
function outblock = myfun(inblock,nonblock)
  ...
end

В этом примере передается скалярное значение 37 к функции myfun:

c = 37;
mynewbig = apply(mybigimg,level,@(x) myfun(x,c));

Функциональные выходы

Функция fun обычно возвращает один или несколько блоков изображения того же размера, что и входной блок. В этом случае apply рекомбинирует блоки и возвращает bigimage. При указании BorderSize аргумент apply и желание bigimage вывод, затем apply будет обрезать границу из выходных блоков. Блок также можно обрезать непосредственно в пределах fun.

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

В таблице приведены примеры сигнатур функций для различных типов вывода fun. В таблице также показаны примеры синтаксиса для использования при вызове apply.

Тип выводаФункция обработки пробПример вызова apply
Блок того же размера, что и входной блок
function sameSizedBlock = myfun(inblock)
  sameSizedBlock = imgaussfilt(inblock);
end
bigimageOutput = apply(bigimg,level,@myfun);

bigimageOutput является одним разрешением bigimage. В этом примере: bigimageOutput имеет то же количество каналов и тип данных, что и вход bigimg.

Несколько блоков того же размера, что и входной блок
function [sameSizedBlock,maskBlock] = myfun(inblock)
  sameSizedBlock = rgb2lightness(inblock);
  maskBlock = imbinarize(sameSizedBlock);
end
[bigimageOutput1,bigimageOutput2] = apply(bigimgRGB,level,@myfun);

bigimageOutput1 является одним разрешением bigimage. В этом примере, если bigimgRGB содержит цветное изображение, затем bigimageOutput1 имеет количество каналов, отличное от входного bigimgRGB.

bigimageOutput2 является одним разрешением bigimage который имеет другое количество каналов и другой тип данных, чем bigimgRGB.

Не-изображение
function nonimageOutput = myfun(inblock)
  nonimageOutput = mean(inblock(:))
end

cellArrayOutput = apply(bigimg,level,@myfun);

cellArrayOutput - массив ячеек, элементы которого не являются выводом изображения каждого блока. cellArrayOutput имеет один дополнительный столбец, указывающий начало координат (x, y) каждого блока в виде вектора 1 на 2.

Структура
function structOutput = myfun(inblock)
  structOutput.num = numel(inblock);
  structOutput.mean = mean(inblock(:));
  structOutput.max = max(inblock(:));
end

tableOutput = apply(mybigimg,level,@myfun);
tableOutput - таблица с четырьмя переменными: num, mean, max, и BlockOrigin. BlockOrigin переменная задает начало координат (x, y) каждого блока в виде вектора 1 на 2.

Несколько выходов
function [out1,out2,out3,out4,out5] = myfun(inblock)
  % non-image output
  out1 = min(inblock(:));
  % image output of same size as input block
  out2 = imgaussfilt(out2);
  out3 = imbinarize(inblock);
  % struct output
  out4.originalMean = mean(inblock(:));
  out4.filteredMean = mean(out2(:));
  out4.fractionTrue = sum(out3(:))/numel(out3);
  % non-image output
  out5 = out4.fractionTrue;
end

[c1,b2,b3,t4] = apply(mybigimg,level,@myfun);

c1 является массивом ячеек, поскольку первый выход myfun не является изображением. b2 и b3 являются bigimages, потому что второй и третий выходы myfun являются блоками изображения того же размера, что и блок ввода. t4 является таблицей, поскольку четвертый вывод myfun является структурой.

apply функция игнорирует пятый выходной аргумент myfcn потому что только четыре выходных аргумента указаны в вызове apply.

Дополнительные входные большие изображения, указанные как вектор bigimage объекты. Каждое большое изображение должно иметь те же пространственные границы, что и bigimg, но блоки не должны иметь одинаковый размер. Большие изображения могут иметь различные значения свойств ClassBaselning и Channel.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: newbig = apply(bigimg,level,@myfun,'UseParallel',true);

Количество блоков, подаваемых в функцию обработки fun в каждой партии, указанной как разделенная запятыми пара, состоящая из 'BatchSize' и положительное целое число. Когда BatchSize больше 1, PadPartialBlocks должно быть true.

Когда BatchSize больше 1, apply поставляет блоки как numrowsоколо-numcolsоколо-channelsоколо-BatchSize массив. Для apply для возврата bigimage, fun должен возвращать массив того же размера. Для apply для возврата массива ячеек или таблицы, fun должен возвращать массив ячеек длиной BatchSize с одним элементом для каждого блока.

Размер блока, указанный как разделенная запятыми пара, состоящая из 'BlockSize' и вектор 1 на 2 положительных целых чисел вида [numrows numcols]. При указании 'BlockSize', то apply пропускает блоки размера [numrows numcols] к функции обработки, fun. apply передает все каналы блока в fun.

Размер границы, указанный как разделенная запятыми пара, состоящая из 'BorderSize' и вектор 1 на 2 неотрицательных целых чисел вида [numrows numcols]. Функция добавляет numrows строки над и под каждым блоком и numcols слева и справа от каждого блока с данными из соседних блоков. Для блоков, расположенных на краю изображения, данные заполняются в соответствии с PadMethod. По умолчанию к блокам не добавляется граница.

Панель ожидания дисплея, заданная как разделенная запятыми пара, состоящая из 'DisplayWaitbar' и true или false. Когда true, apply отображает строку ожидания для длительных операций. Если закрыть панель ожидания, то apply возвращает частичный вывод, если он доступен.

Типы данных: logical

Включить информацию о блоках, указанную как разделенная запятыми пара, состоящая из 'IncludeBlockInfo' и false или true. Когда true, apply включает в себя структуру в качестве последнего ввода в функцию обработки, fun. Структура имеет эти поля, которые описывают информацию пространственной ссылки о блоке.

ОбластьОписание
BlockStartWorld Мировые координаты центра верхнего левого пикселя блока, исключая любую границу или заполнение.
BlockEndWorldМировые координаты центра нижнего правого пикселя блока, исключая любую границу или заполнение.
DataStartWorldМировые координаты центра верхнего левого пикселя блока, включая любую границу или заполнение.
DataEndWorldМировые координаты центра нижнего правого пикселя блока, включая любую границу или заполнение.

Если BatchSize больше 1, то значения в структуре являются массивами длины BatchSize.

Типы данных: logical

Порог включения для маскирующих блоков, указанный как разделенная запятыми пара, состоящая из 'InclusionThreshold' и число в диапазоне [0, 1]. Порог включения указывает минимальную долю ненулевых пикселей в маскирующем блоке, необходимую для обработки блока изображения.

  • Когда порог включения равен 0, то apply обрабатывает блок, когда, по меньшей мере, один пиксель в соответствующем маскирующем блоке является ненулевым.

  • Когда порог включения равен 1, то apply обрабатывает блок только тогда, когда все пикселы в маскирующем блоке ненулевые.

Маска, заданная как разделенная запятыми пара, состоящая из 'Mask' и bigimage объект того же размера, что и bigimg и со значением свойства ClassBondering, равным logical.

apply функция обрабатывает только блоки, перекрывающиеся с ненулевыми блоками маски. Если также указать InclusionThreshold, то обрабатываемый блок должен перекрываться с минимальным процентом ненулевых пикселей в маскирующем блоке. Если блок изображения в достаточной степени перекрывает маскирующий блок, то apply отправляет весь блок изображения в функцию обработки fun, и fun обрабатывает все пикселы в блоке. fun не удается получить доступ непосредственно к маске.

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

Местоположение для сохранения выходных данных bigimages, указанный как пара, разделенная запятыми, состоящая из 'OutputFolder' и false или true. Параллельная обработка требует Toolbox™ параллельных вычислений.

Метод подушки неполных блоков кромок, определяемый как разделенная запятыми пара, состоящая из 'PadMethod' и одно из этих значений. По умолчанию apply подушечки числовые блоки с 0 и категориальные блоки с missing.

Стоимость

Значение

числовой скаляр

Матричный числовой массив с элементами постоянного значения.

строковый скаляр

Категориальный массив Pad с указанным классом в свойстве Classes bigimage.

'replicate'

Прокладка путем повторения граничных элементов массива.

'symmetric'

Массив подушек с зеркальными отражениями самого себя.

Частичные блоки площадки, указанные как разделенная запятыми пара, состоящая из 'PadPartialBlocks' и false или true. Частичные блоки возникают, когда размер изображения не в точности делится на BlockSize. Если они существуют, то частичные блоки располагаются вдоль правого и нижнего края изображения.

  • Когда false, функция обработки fun работает на частичных блоках без заполнения и может возвращать блоки меньше, чем BlockSize.

  • Когда true, apply функциональные площадки частичные блоки с использованием указанного PadMethod. Функция обработки fun работает с полноразмерными блоками и возвращает их.

Набор PadPartialBlocks кому true когда BatchSize больше 1.

Типы данных: logical

Используйте параллельную обработку, указанную как разделенная запятыми пара, состоящая из 'UseParallel' и false или true. Для параллельной обработки требуется панель инструментов Parallel Computing Toolbox.

При указании UseParallel как trueзатем MATLAB ® автоматически открывает параллельный пул на основе настроек по умолчанию .apply обрабатывает bigimage блокирует доступные рабочие. DataSource свойство всех входных данных bigimages должны быть действительными путями для каждого из параллельных работников. Если используются относительные пути, убедитесь, что работники и клиентский процесс находятся в одном рабочем каталоге. Если работники не используют ту же файловую систему, что и клиентский процесс, укажите OutputFolder.

Типы данных: logical

Выходные аргументы

свернуть все

Обработанное большое изображение, возвращенное как bigimage с одним уровнем разрешения. Количество строк и столбцов newbig равно количеству строк и столбцов входного большого изображения bigimg при заданном разрешении level. Однако newbig может иметь различное количество каналов и различный базовый класс.

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

Стоимость

Возникновение

bigimage объект

apply возвращает bigimage когда соответствующий выходной аргумент fun возвращает данные в виде числового или логического массива того же размера, что и входной блок, или дополненного размера входного блока при указании BorderSize аргумент.

Возвращенный bigimage имеет один уровень разрешения, но может иметь разное количество каналов и базовый класс.

стол

apply возвращает table когда соответствующий выходной аргумент fun возвращает данные в виде struct. Таблица содержит дополнительную BlockOrigin переменная, задающая начало координат (x, y) каждого блока в виде вектора 1 на 2 в мировых координатах.

массив ячеек

apply возвращает массив ячеек, когда соответствующий выходной аргумент fun возвращает данные, не являющиеся изображениями. Массив ячеек имеет дополнительный столбец, который задает начало координат (x, y) каждого блока в виде вектора 1 на 2 в мировых координатах.

Совет

  • Настройка BatchSize как больше 1 полезно для оптимальной загрузки графических процессоров при запуске сетей глубокого обучения вывода внутри функции обработки fun.

Алгоритмы

apply передает данные в функцию обработки, fun, один блок за один раз в наиболее эффективном порядке для прохождения данных (часто порядок основной строки). apply обрабатывает каждый блок только один раз.

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

Представлен в R2019b