Морфологические операции на бинарном объеме
Загрузите 3-D MRI объемные данные и создайте бинарный объем. Используйте volshow
просмотреть объемные данные.
load mristack;
BW1 = mristack > 127;
volshow(BW1);
Чтобы удалить воксели, которые установлены в 1 и которые также окружаются набором вокселей к 0, выполните 'clean'
операция на объемных данных. При определении, который воксели удалить, 'clean'
операция рассматривает 26 соседних вокселей. Используйте volshow
просмотреть результаты.
BW2 = bwmorph3(BW1,'clean');
volshow(BW2);
Для сравнения выполните 'majority'
операция на объемных данных. 'majority'
операция выполняет подобную задачу к 'clean'
операция, но только сохраняет воксели, если больше чем половина (большинство) вокселей в окружении целевого вокселя установлена в 1. При определении, который воксели сохранить, 'majority'
операция также рассматривает 26 соседних вокселей. Используйте volshow
просмотреть результаты.
BW3 = bwmorph3(BW1,'majority');
volshow(BW3);
В этом примере показано, как каждая из морфологических операций поддержана bwmorph3
работает над простыми томами.
Сделайте 9 9 3 кубоидами 0s, который содержит 3 3х3 кубом 1 с в ее центре.
innercube = ones(3,3,3);
cube_center = padarray(innercube,[3 3],0,'both')
cube_center = cube_center(:,:,1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Превращение пикселей долой удалить операцию
Установите центральный воксель внутреннего куба к 0
использование 'remove'
операция. Эта операция устанавливает значение любого 'on'
воксель полностью окружается 'on'
воксели к 'off'
.
remove_center = bwmorph3(cube_center,'remove')
remove_center = 9x9x3 logical array
remove_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
remove_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 0 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
remove_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Установка пикселей к на с операцией заполнения
Установите центральный воксель внутреннего куба к 1
использование 'fill'
операция. Эта операция устанавливает значение любого 'off'
воксель полностью окружается 'on'
воксели к 'on'
.
fill_center = bwmorph3(remove_center,'fill')
fill_center = 9x9x3 logical array
fill_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
fill_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
fill_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Удаление несвязанных пикселей с чистой операцией
Используйте 'clean'
операция, чтобы удалить любые случайные воксели, которые установлены в 1
но не соединяются с компонентом в объеме. Пример создает случайный воксель путем установки случайного вокселя на второй плоскости к 1 и затем использует 'clean'
операция, чтобы удалить его.
cube_center(2,2,2) = 1
cube_center = cube_center(:,:,1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,2) = 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center(:,:,3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cube_cleaned = bwmorph3(cube_center,'clean')
cube_cleaned = 9x9x3 logical array
cube_cleaned(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_cleaned(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_cleaned(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Нахождение большинства
Найдите большинство cube_center
использование 'majority'
операция. Эта операция сохраняет воксель, только если больше чем половина (большинство) вокселей в связанном с 26 окружении вокруг вокселя установлена в 1
.
cube_major = bwmorph3(cube_center,'majority')
cube_major = 9x9x3 logical array
cube_major(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_major(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_major(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Создание формы Подобно скелету
Чтобы проиллюстрировать точки разветвления и опции конечных точек, создайте другую небольшую матрицу, на этот раз с линейной формой, как скелет.
x1 = eye(5); x2 = zeros(5); x2(3,3) = 1; x3 = x2; shape = cat(3,x1,x2,x3)
shape = shape(:,:,1) = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 shape(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 shape(:,:,3) = 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
Нахождение конечных точек
Найдите конечные точки формы с помощью 'endpoints'
операция. Форма имеет три конечных точки, один в каждом конце диагонали в первой плоскости и один в конце линии через центр, на третьей плоскости.
shape_endpts = bwmorph3(shape,'endpoints')
shape_endpts = 5x5x3 logical array
shape_endpts(:,:,1) =
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
shape_endpts(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
shape_endpts(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
Нахождение точек разветвления
Найдите точки разветвления формы с помощью 'branchpoints'
операция. Форма имеет одну точку разветвления, где диагональная линия и горизонтальная линия встречаются.
shape_brpts = bwmorph3(shape,'branchpoints')
shape_brpts = 5x5x3 logical array
shape_brpts(:,:,1) =
0 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 0
shape_brpts(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
shape_brpts(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
V
— Введите объемВведите объем в виде числового или логического массива. Для числового входа любые ненулевые пиксели считаются 1
TRUE
).
bwmorph3
принимает 1D, 2D, или трехмерные массивы. Если вы задаете 1D или 2D входные массивы, то bwmorph3
выполняет морфологическую операцию, как задано для 3-D объема. Если вы хотите 2D поведение, использовать bwmorph
вместо этого.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
operation
— Морфологическая операция, чтобы выполнитьМорфологическая операция, чтобы выполнить в виде одного из следующих векторов символов или строкового скаляра. Для примеров этих операций см. Рисунки Морфологических Операций.
Операция | Описание | Рисунок |
---|---|---|
| Найдите точки разветвления скелета. Точки разветвления являются вокселями на перекрестке, где несколько ветвей встречаются. Чтобы найти точки разветвления, изображение должно быть skeletonized. Чтобы создать изображение skeletonized, использовать |
|
| Удалите изолированные воксели, установив их на 0. Изолированный воксель является отдельным, связанным с 26 вокселем, который установлен в |
|
| Найдите конечные точки скелета. Конечные точки являются вокселями в концах ветвей. Примечание: Чтобы найти конечные точки, изображение должно быть skeletonized. Чтобы создать изображение skeletonized, использовать |
|
| Заполните изолированные внутренние воксели, установив их на |
|
| Сохраните набор вокселя к | См. рисунки морфологических операций. |
| Удалите внутренние воксели, установив его на |
|
Типы данных: char |
string
J
— Объем после морфологических операцийОбъем после морфологических операций, возвращенных как логический массив одного размера с входным объемом V
.
Чтобы выполнить морфологическую эрозию операций или расширение на 3-D объемах, используйте imerode
или imdilate
функции, указывая элемент структурирования ones(3,3,3)
.
Чтобы выполнить морфологическое закрытие, открытие, фильтрация цилиндра или фильтрация нижней шляпы на 3-D объемах, использует imclose
, imopen
, imtophat
, или imbothat
функции, указывая элемент структурирования ones(3,3,3)
.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.