apply

Обработка блоков большого изображения

Описание

пример

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.

The 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.

Struct
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. The 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 является struct.

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

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

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

Задайте необязательные разделенные разделенными запятой парами 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-by- numcols-by- channels-by- 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 включает struct как последний вход в функцию обработки, fun. У struct есть эти поля, которые описывают пространственную ссылочную информацию о блоке.

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

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

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

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

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

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

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

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

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

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

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

Значение

Значение

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

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

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

Дополните категориальный массив с заданным классом в свойстве Classes bigimage.

'replicate'

Дополните путем повторения элементов границы массива.

'symmetric'

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

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

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

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

Задайте PadPartialBlocks на true когда BatchSize больше 1.

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

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

Когда вы задаете UseParallel как true, затем MATLAB® автоматически открывает параллельный пул на основе параметров параллели по умолчанию. apply обрабатывает bigimage блокирует доступные рабочие. The 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