Нелинейная фильтрация с помощью интерполяционных таблиц
выполняет или 3х3 нелинейную операцию фильтрации окружения 2 на 2 на двухуровневом или полутоновом изображении J
= bwlookup(BW
,lut
)I
и возвращает результаты в выходном изображении J
. Обработка окружения решает, что целочисленное значение индекса раньше получало доступ к значениям в интерполяционной таблице lut
. Выбранный lut
значение становится пиксельным значением в выходном изображении J
в целенаправленном положении.
Опционально можно выполнить фильтрацию с помощью графического процессора (требует Parallel Computing Toolbox™).
Создайте векторный lut
таким образом, что операция фильтрации помещает 1
в целевом пиксельном местоположении во входном изображении только, когда все четыре пикселя в окружении 2 на 2 BW установлены в 1
.
lutfun = @(x)(sum(x(:))==4); lut = makelut(lutfun,2)
lut = 16×1
0
0
0
0
0
0
0
0
0
0
⋮
Загрузите двухуровневое изображение.
BW1 = imread('text.png');
Выполните обработку окружения 2 на 2 с векторным lut
с 16 элементами .
BW2 = bwlookup(BW1,lut);
Покажите масштабируемый до и после изображений.
figure; h1 = subplot(1,2,1); imshow(BW1), axis off; title('Original Image') h2 = subplot(1,2,2); imshow(BW2); axis off; title('Eroded Image') % 16X zoom to see effects of erosion on text set(h1,'Ylim',[1 64],'Xlim',[1 64]); set(h2,'Ylim',[1 64],'Xlim',[1 64]);
BW
— Введите изображениеВведите изображение, преобразованное нелинейной операцией фильтрации окружения, заданной как двухуровневое изображение. Для числового входа любые ненулевые пиксели считаются 1
TRUE
).
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
lut
— Интерполяционная таблица значений выходного пикселя Интерполяционная таблица значений выходного пикселя, заданных как 16-или вектор с 512 элементами. Размер lut
определяет, какая из двух операций окружения выполняется.
Если lut
содержит 16 элементов данных, затем матрица окружения 2 на 2.
Если lut
содержит 512 элементов данных, затем матрица окружения имеет размер 3х3.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
J
— Выходное изображениеВыходное изображение, возвращенное как полутоновое или двухуровневое изображение, чье распределение пиксельных значений определяется содержимым интерполяционной таблицы, lut
. Выходное изображение J
одного размера с входным изображением I
и совпадающий тип данных как lut
.
Первый шаг в каждой итерации операции фильтрации выполняется bwlookup
влечет за собой вычисление index
в векторный lut
на основе бинарного узора заливки матрицы окружения на изображении I
. Значение в lut
полученный доступ в index
, lut(index)
, вставляется в выходное изображение J
в целевом пиксельном местоположении. Это приводит к изображению J
будучи совпадающим типом данных как векторным lut
.
С тех пор существует 1 к 1 соответствие в целевых пиксельных местоположениях, изображение J
одного размера с изображением I
. Если целевое пиксельное местоположение находится на ребре изображения I
и если какая-либо часть или 3х3 матрицы окружения 2 на 2 расширяет вне ребра изображений, то эти нерасположения изображения дополнены 0 для того, чтобы выполнить операцию фильтрации.
Следующие рисунки показывают отображение от двоичного файла 0 и 1 шаблон в матрицах окружения к его бинарному представлению. Добавление 1 к бинарному представлению дает к index
который используется, чтобы получить доступ к lut
.
Для окружений 2 на 2, length(lut)
16. Существует четыре пикселя в каждом окружении и два возможных состояния для каждого пикселя, таким образом, общее количество сочетаний равняется 24 = 16.
Чтобы проиллюстрировать, этот пример показывает, как узор заливки в матрице 2 на 2 определяет который запись в lut
помещается в целевое пиксельное местоположение.
Создайте случайный lut
с 16 элементами вектор, содержащий
uint8
данные.
scurr = rng; % save current random number generator seed state rng('default') % always generate same set of random numbers lut = uint8( round( 255*rand(16,1) ) ) % generate lut rng(scurr); % restore
lut = 208 231 32 233 161 25 71 139 244 246 40 248 244 124 204 36
Создайте изображение 2 на 2 и примите для этого примера, что целевое пиксельное местоположение является местоположением I(1,1)
.
I = [1 0; 0 1]
I = 1 0 0 1
Путем обращения к цвету, закодированному, сопоставляя фигуру выше, бинарное представление для этого окружения 2 на 2 может быть вычислено как показано во фрагменте кода ниже. Логическая единица в I(1,1)
соответствует синий в фигуре, которая сопоставляет с Младшим значащим битом (LSB) в положении 0 в 4-битном бинарном представлении (20 = 1). Логическая единица в I(2,2)
является красным, который сопоставляет со Старшим значащим битом (MSB) в положении 3 в 4-битном бинарном представлении (23 = 8).
% I(1,1): blue square; sets bit position 0 on right % I(2,2): red square; sets bit position 3 on left binNot = '1 0 0 1'; % binary representation of 2x2 neighborhood matrix X = bin2dec( binNot ); % convert from binary to decimal index = X + 1 % add 1 to compute index value for uint8 vector lut A11 = lut(index) % value at A(1,1)
index = 10 A11 = 246
Вышеупомянутое вычисление предсказывает, что выходное изображение A должно содержать значение 246 в целенаправленном положении A(1,1)
.
A = bwlookup(I,lut) % perform filtering
A = 246 32 161 231
A(1,1)
действительно на самом деле равняется 246.
Для 3х3 окружений, length(lut)
512. Существует девять пикселей в каждом окружении и два возможных состояния для каждого пикселя, таким образом, общее количество сочетаний равняется 29 = 512.
Процесс для вычисления бинарного представления 3х3 обработки окружения эквивалентен для окружений 2 на 2.
Указания и ограничения по применению:
bwlookup
поддерживает генерацию кода С (требует MATLAB® Coder™). Обратите внимание на то, что, если вы выбираете типовой MATLAB Host Computer
целевая платформа, bwlookup
генерирует код, который пользуется предварительно скомпилированной, специфичной для платформы разделяемой библиотекой. Использование разделяемой библиотеки сохраняет оптимизацию производительности, но ограничивает целевые платформы, для которых может быть сгенерирован код. Для получения дополнительной информации смотрите, что Генерация кода пользуется Разделяемой Библиотекой.
При генерации кода задайте входное изображение класса logical
.
Указания и ограничения по применению:
При генерации кода задайте входное изображение класса logical
.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите Обработку изображений на графическом процессоре.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.