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

Для иллюстрации в этом примере показано, как пиксельный шаблон в матрице 2 на 2 определяет, какая запись в lut помещается в целевое местоположение пикселя.
Создание случайных 16-элементных lut вектор, содержащий 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 и предположим в этом примере, что целевым местоположением пикселя является местоположение BW(1,1).
BW = [1 0; 0 1]
BW =
1 0
0 1Обращаясь к приведенному выше рисунку отображения с цветовым кодированием, можно вычислить двоичное представление для этой окрестности 2 на 2, как показано в приведенном ниже фрагменте кода. Логический 1 в BW(1,1) соответствует синему на рисунке, который соответствует младшему значащему биту (LSB) в позиции 0 в 4-разрядном двоичном представлении (, 20 = 1). Логический 1 вBW(2,2) красный, который соответствует самому значимому биту (MSB) в позиции 3 в 4-разрядном двоичном представлении (23 = 8).
% BW(1,1): blue square; sets bit position 0 on right % BW(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Вышеприведенное вычисление предсказывает, что выходное изображение А должно содержать значение 246 в целевой позиции. A(1,1).
A = bwlookup(BW,lut) % perform filteringA = 246 32 161 231
A(1,1) фактически равно 246.
Для кварталов 3 на 3, length(lut) составляет 512. В каждой окрестности девять пикселей и два возможных состояния для каждого пикселя, так что общее количество перестановок равно 29 = 512.
Процесс вычисления двоичного представления обработки окрестностей 3 на 3 аналогичен процессу обработки окрестностей 2 на 2.

Примечания и ограничения по использованию:
bwlookup поддерживает генерацию кода C (требуется MATLAB ® Coder™). Обратите внимание, что при выборе родовогоMATLAB Host Computer целевая платформа, bwlookup создает код, использующий предварительно скомпилированную общую библиотеку для конкретной платформы. Использование общей библиотеки сохраняет оптимизацию производительности, но ограничивает целевые платформы, для которых может быть создан код. Дополнительные сведения см. в разделе Создание кода с помощью общей библиотеки.
При создании кода укажите входное изображение класса logical.
Примечания и ограничения по использованию:
При создании кода укажите входное изображение класса logical.
Эта функция полностью поддерживает массивы графических процессоров. Дополнительные сведения см. в разделе Обработка изображений на графическом процессоре.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.