Обработка блоков большого изображения
обрабатывает все блоки больших изображений 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'
- Количество блоков, поступающих в fun
1
(по умолчанию) | положительное целое числоКоличество блоков, поступающих в функцию обработки 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'
- Расположение для сохранения выходов bigimage
sРасположение для сохранения выходов bigimage
s, заданная как разделенная разделенными запятой парами, состоящая из '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
свойство всех входных bigimage
s должны быть допустимыми путями для каждого из параллельных рабочих процессов. Если используются относительные пути, убедитесь, что рабочие процессы и клиентский процесс находятся в одной рабочей директории. Если работники не используют ту же файловую систему, что и клиентский процесс, задайте OutputFolder
.
Типы данных: logical
newbig
- Обработанное большое изображениеbigimage
объектОбработанное большое изображение, возвращенное как bigimage
объект с одним уровнем разрешения. Количество строк и столбцов newbig
равен количеству строк и столбцов входа большого изображения bigimg
при заданном разрешении level
. Однако newbig
может иметь разное количество каналов и другой базовый класс.
other
- Дополнительный выходbigimage
объект | таблица | массив ячеекДополнительный выход от функции обработки fun
, вернулся как одно из следующего. Если fun
возвращает несколько выходные аргументы, apply
может возвращать то же число или меньше выходных аргументов.
Значение | Вхождение |
---|---|
|
Возвращенный |
таблица |
|
массив ячеек |
|
apply
передает данные в функцию обработки, fun
, по одному блоку за раз в наиболее эффективном порядке для прохождения по данным (часто в порядке основных строк). apply
обрабатывает каждый блок только один раз.
Неэффективно выполнять многие операции обработки путем выполнения нескольких вызовов в apply
поскольку данные должны быть пройдены несколько раз. Чтобы оптимизировать время вычислений, задайте fun
таким образом, он выполняет несколько операций обработки. Это минимизирует накладные расходы на чтение и запись и обеспечивает локализацию данных. Можно дополнительно сократить время вычислений на конкретном уровне, используя маски, созданные на более крупных уровнях разрешения, чтобы исключить области изображения из обработки.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.