Нелинейная фильтрация с помощью интерполяционных таблиц
J = bwlookup(BW,lut)
выполняет или 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 | логический
lut
— Интерполяционная таблица значений выходного пикселя Интерполяционная таблица значений выходного пикселя, заданных как 16-или вектор с 512 элементами. Размер lut
определяет, какая из двух операций окружения выполняется.
Если lut
содержит 16 элементов данных, то матрица окружения 2 на 2.
Если lut
содержит 512 элементов данных, то матрица окружения имеет размер 3х3.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический
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
.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите Обработку изображений на графическом процессоре.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.