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

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

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

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

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

  • Отфильтруйте блок с помощью imnlmfilt.

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

apply функционируйте повторно комбинирует выходные блоки, чтобы сформировать новый bigimage.

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

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

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

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

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

Входные параметры

свернуть все

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

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

Указатель на функцию, заданный как указатель. Для получения дополнительной информации см. Создание указателя на функцию (MATLAB).

Входные параметры функции

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

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

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

InputType Функциональная подписьПример вызова 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.

'OutputType' Демонстрационная функция обработкиПример вызова 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среднее значение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 struct.

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

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

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

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

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

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

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

Типы данных: логический

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

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

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

Заполните метод, заданный как разделенная запятой пара, состоящая из 'PadMethod' и одно из этих значений.

Значение

Значение

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

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

'replicate'

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

'symmetric'

Заполните массив зеркальными отражениями себя.

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

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

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

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

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

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

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

Типы данных: логический

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

свернуть все

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

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

Значение

Вхождение

bigimage объект

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

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

таблица

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

cellArray

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

Алгоритмы

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

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

Введенный в R2019b