Обработка блоков большого изображения
обрабатывает все блоки больших изображений newbig = apply(bigimg,level,fun,extraImages)bigimg и одно или несколько дополнительных больших изображений extraImages. Используйте этот синтаксис, когда функция fun принимает несколько входы изображения, таких как изображение и маска.
управляет аспектами обработки, такими как параллельная обработка данных или заполнение блоков на краю изображения, используя аргументы пары "имя-значение".newbig = apply(___,Name,Value)
Создайте 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])

bigimg - Большое изображениеbigimage объектБольшое изображение, заданное как bigimage объект.
level - Уровень разрешенияУровень разрешения, заданный как положительное целое число, которое меньше или равно количеству уровней разрешения bigimg.
fun - Указатель на функциюУказатель на функцию, заданный как указатель. Для получения дополнительной информации см. раздел «Создание указателя на функцию».
Функция fun должен принять по крайней мере один блок как вход.
Опционально функция может принимать дополнительные входы, которые не являются блоками. Чтобы выполнить обработку с неблоком входами, необходимо вызвать apply и задайте fun как анонимная функция. Для получения дополнительной информации см. «Анонимные функции».
Таблица показывает сигнатуры выборочных функций для различных типов входов fun. Таблица также показывает пример синтаксиса, который нужно использовать при вызове apply.
| Входной тип | Сигнатура функции | Пример Вызова apply |
|---|---|---|
| Один блок |
function outblock = myfun(inblock) ... end |
newbig = apply(bigimg,level,@myfun); |
| Два блока |
function outblock = myfun(inblock1,inblock2) ... end | Задайте вторую newbig = apply(bigimg,level,@myfun,otherbig); |
| Один блок и один неблочный |
function outblock = myfun(inblock,nonblock) ... end | Этот пример передает скалярное значение 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);
|
| Несколько блоков того же размера, что и входной блок |
function [sameSizedBlock,maskBlock] = myfun(inblock) sameSizedBlock = rgb2lightness(inblock); maskBlock = imbinarize(sameSizedBlock); end | [bigimageOutput1,bigimageOutput2] = apply(bigimgRGB,level,@myfun);
|
| Не-неизображение |
function nonimageOutput = myfun(inblock) nonimageOutput = mean(inblock(:)) end |
cellArrayOutput = apply(bigimg,level,@myfun);
|
| 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);
The |
extraImages - Дополнительные входные большие изображенияbigimage объектыДополнительные входные большие изображения, заданные как вектор bigimage объекты. Каждое большое изображение должно иметь те же пространственные границы, что и bigimg, но блоки не должны иметь одинаковый размер. Большие изображения могут иметь различные значения свойств ClassBaslying и Channels.
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
newbig = apply(bigimg,level,@myfun,'UseParallel',true);'BatchSize' - Количество блоков, поступающих в fun1 (по умолчанию) | положительное целое числоКоличество блоков, поступающих в функцию обработки fun в каждом пакете, заданном как разделенная разделенными запятой парами, состоящая из 'BatchSize' и положительное целое число. Когда BatchSize больше 1, PadPartialBlocks должен быть true.
Когда BatchSize больше 1, apply поставляет блоки как numrows-by- numcols-by- channels-by- BatchSize массив. Для apply для возврата bigimage, fun необходимо вернуть массив того же размера. Для apply чтобы вернуть массив ячеек или таблицу, fun необходимо вернуть массив ячеек длиной BatchSize с одним элементом для каждого блока.
'BlockSize' - Размер блокаРазмер блока, заданный как разделенная разделенными запятой парами, состоящая из 'BlockSize' и вектор 1 на 2 положительных целых чисел вида [numrows numcols]. Если вы задаете 'BlockSize', затем apply передает блоки размера [numrows numcols] в функцию обработки, fun. apply передает все каналы блока в fun.
'BorderSize' - Размер границы[0 0] (по умолчанию) | вектор 1 на 2 неотрицательных целых чиселРазмер границы, заданный как разделенная разделенными запятой парами, состоящая из 'BorderSize' и вектор 1 на 2 неотрицательных целых чисел вида [numrows numcols]. Функция добавляет numrows строки выше и ниже каждого блока и numcols столбцы слева и справа от каждого блока с данными из соседних блоков. Для блоков, которые лежат на краю изображения, данные заполняются согласно PadMethod. По умолчанию никакая граница не добавляется к блокам.
'DisplayWaitbar' - Отобразите панель ожиданияtrue (по умолчанию) | falseОтобразите полосу ожидания, заданную как разделенная разделенными запятой парами, состоящая из 'DisplayWaitbar' и true или false. Когда true, а apply функция отображает панель ожидания для длительных операций. Если вы закрываете панель ожидания, то apply возвращает частичный выход, если он доступен.
Типы данных: logical
'IncludeBlockInfo' - Включите информацию о блокахfalse (по умолчанию) | trueВключите информацию о блоке, заданную как разделенная разделенными запятой парами, состоящая из 'IncludeBlockInfo' и false или true. Когда true, apply включает struct как последний вход в функцию обработки, fun. У struct есть эти поля, которые описывают пространственную ссылочную информацию о блоке.
| Область | Описание |
|---|---|
BlockStartWorld
| Мировые координаты центра верхнего левого пикселя блока, исключая любую границу или заполнение. |
BlockEndWorld | Мировые координаты центра нижнего правого пикселя блока, исключая любую границу или заполнение. |
DataStartWorld | Мировые координаты центра верхнего левого пикселя блока, включая любую границу или заполнение. |
DataEndWorld | Мировые координаты центра правого нижнего пикселя блока, включая любую границу или заполнение. |
Если BatchSize больше 1, тогда значения в struct являются массивами длины BatchSize.
Типы данных: logical
'InclusionThreshold' - Порог включения0.5 (по умолчанию) | число в области значений [0, 1]Порог включения для маскирующих блоков, заданный как разделенная разделенными запятой парами, состоящая из 'InclusionThreshold' и число в области значений [0, 1]. Порог включения указывает минимальную долю ненулевых пикселей в маскирующем блоке, необходимом для обработки блока изображения.
Когда порог включения 0, затем apply обрабатывает блок, когда, по меньшей мере, один пиксель в соответствующем маскирующем блоке является ненулевым.
Когда порог включения 1, затем apply обрабатывает блок только, когда все пиксели в маскирующем блоке ненулевые.
'Mask' - Маска[] (по умолчанию) | одно разрешение bigimage объектМаска, заданная как разделенная разделенными запятой парами, состоящая из 'Mask' и a bigimage объект того же размера, что и bigimg и со значением свойства ClassBaslining logical.
The apply функция обрабатывает только блоки, которые перекрываются ненулевыми блоками маски. Если вы также задаете InclusionThreshold, тогда блок, который будет обрабатываться, должен перекрываться с минимальным процентом ненулевых пикселей в маскирующем блоке. Если блок изображения достаточно перекрывает маскирующий блок, то apply отправляет весь блок изображений в функцию обработки fun, и fun обрабатывает все пиксели внутри блока. fun невозможно получить прямой доступ к маске.
Блок вход может перекрывать несколько блоков маски, когда изображение грубее, чем маска, или когда ребро блока не совпадает с блоками маски. Если блок входа перекрывает несколько маскирующих блоков, то apply выбирает маску, которая перекрывается с центром блока входа.
'OutputFolder' - Расположение для сохранения выходов bigimagesРасположение для сохранения выходов bigimages, заданная как разделенная разделенными запятой парами, состоящая из 'OutputFolder' и false или true. Параллельная обработка требует Parallel Computing Toolbox™.
'PadMethod' - Метод Pad'replicate' | 'symmetric'Метод дополнения неполных краевых блоков, заданный как разделенная разделенными запятой парами, состоящая из 'PadMethod' и одно из этих значений. По умолчанию apply заполняет числовые блоки 0 и категориальные блоки с missing.
Значение | Значение |
|---|---|
числовой скаляр | Заполните числовой массив с элементами постоянного значения. |
| строковый скаляр | Дополните категориальный массив с заданным классом в свойстве Classes |
| Дополните путем повторения элементов границы массива. |
| Массив подушек с зеркальными отражениями самого себя. |
'PadPartialBlocks' - Заполните частичные блокиfalse (по умолчанию) | trueДополните частичные блоки, заданные как разделенная разделенными запятой парами, состоящая из 'PadPartialBlocks' и false или true. Частичные блоки возникают, когда размер изображения не совсем делится на BlockSize. Если они существуют, частичные блоки лежат вдоль правого и нижнего ребра изображения.
Задайте PadPartialBlocks на true когда BatchSize больше 1.
Типы данных: logical
'UseParallel' - Используйте параллельную обработкуfalse (по умолчанию) | trueИспользуйте параллельную обработку, заданную как разделенная разделенными запятой парами, состоящая из 'UseParallel' и false или true. Параллельная обработка требует Parallel Computing Toolbox.
Когда вы задаете UseParallel как true, затем MATLAB® автоматически открывает параллельный пул на основе параметров параллели по умолчанию. apply обрабатывает bigimage блокирует доступные рабочие. The DataSource свойство всех входных bigimages должны быть допустимыми путями для каждого из параллельных рабочих процессов. Если используются относительные пути, убедитесь, что рабочие процессы и клиентский процесс находятся в одной рабочей директории. Если работники не используют ту же файловую систему, что и клиентский процесс, задайте OutputFolder.
Типы данных: logical
newbig - Обработанное большое изображениеbigimage объектОбработанное большое изображение, возвращенное как bigimage объект с одним уровнем разрешения. Количество строк и столбцов newbig равен количеству строк и столбцов входа большого изображения bigimg при заданном разрешении level. Однако newbig может иметь разное количество каналов и другой базовый класс.
other - Дополнительный выходbigimage объект | таблица | массив ячеекДополнительный выход от функции обработки fun, вернулся как одно из следующего. Если fun возвращает несколько выходные аргументы, apply может возвращать то же число или меньше выходных аргументов.
Значение | Вхождение |
|---|---|
|
Возвращенный |
таблица |
|
массив ячеек |
|
apply передает данные в функцию обработки, fun, по одному блоку за раз в наиболее эффективном порядке для прохождения по данным (часто в порядке основных строк). apply обрабатывает каждый блок только один раз.
Неэффективно выполнять многие операции обработки путем выполнения нескольких вызовов в apply поскольку данные должны быть пройдены несколько раз. Чтобы оптимизировать время вычислений, задайте fun таким образом, он выполняет несколько операций обработки. Это минимизирует накладные расходы на чтение и запись и обеспечивает локализацию данных. Можно дополнительно сократить время вычислений на конкретном уровне, используя маски, созданные на более крупных уровнях разрешения, чтобы исключить области изображения из обработки.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.