exponenta event banner

bwlookup

Нелинейная фильтрация с использованием таблиц подстановки

Синтаксис

Описание

пример

J = bwlookup(BW,lut) выполняет операцию фильтрации нелинейных окрестностей 2 на 2 или 3 на 3 для двоичного изображения 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]);

Figure contains 2 axes. Axes 1 with title Original Image contains an object of type image. Axes 2 with title Eroded Image contains an object of type image.

Входные аргументы

свернуть все

Двоичное изображение, которое должно быть преобразовано операцией нелинейной фильтрации окрестностей, заданной как 2-D логическая матрица или 2-D числовая матрица. Для числового ввода любые ненулевые пикселы считаются 1 (true).

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Таблица поиска выходных значений пикселов, заданная как 16- или 512-элементный вектор. Размер lut определяет, какая из двух операций окрестности выполняется. Вы можете использовать makelut для создания таблицы подстановки.

  • Если lut содержит 16 элементы данных, то матрица окрестности равна 2 на 2.

  • Если lut содержит 512 элементов данных, то матрица окрестности равна 3 на 3.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Выходные аргументы

свернуть все

Выходное изображение, возвращаемое как изображение в градациях серого или двоичное изображение, распределение значений пикселей которого определяется содержимым таблицы поиска. lut. Выходное изображение J имеет тот же размер, что и входное изображение BW и тот же тип данных, что и lut.

Алгоритмы

свернуть все

Первый шаг в каждой итерации операции фильтрации, выполняемой 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

Для кварталов 2 на 2, length(lut) составляет 16. В каждой окрестности четыре пикселя и два возможных состояния для каждого пикселя, так что общее количество перестановок равно 24 = 16.

Для иллюстрации в этом примере показано, как пиксельный шаблон в матрице 2 на 2 определяет, какая запись в lut помещается в целевое местоположение пикселя.

  1. Создание случайных 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 на 2 и предположим в этом примере, что целевым местоположением пикселя является местоположение BW(1,1).

    BW = [1 0; 0 1]
    BW =
    
         1     0
         0     1
  3. Обращаясь к приведенному выше рисунку отображения с цветовым кодированием, можно вычислить двоичное представление для этой окрестности 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
  4. Вышеприведенное вычисление предсказывает, что выходное изображение А должно содержать значение 246 в целевой позиции. A(1,1).

    A = bwlookup(BW,lut)   % perform filtering
    A =
    
      246   32
      161  231

    A(1,1) фактически равно 246.

Поиск по соседству 3 на 3

Для кварталов 3 на 3, length(lut) составляет 512. В каждой окрестности девять пикселей и два возможных состояния для каждого пикселя, так что общее количество перестановок равно 29 = 512.

Процесс вычисления двоичного представления обработки окрестностей 3 на 3 аналогичен процессу обработки окрестностей 2 на 2.

Расширенные возможности

..

См. также

Представлен в R2012b