bwlookup

Нелинейная фильтрация с помощью интерполяционных таблиц

Синтаксис

Описание

пример

J = bwlookup(BW,lut) выполняет 2 на 2 или нелинейная операция фильтрации района 3 на 3 на бинарном изображении BW. Обработка по соседству определяет целочисленное значение индекса, используемое для доступа к значениям в интерполяционной таблице lut. Выбранный lut значение становится пикселем в выходном изображении J на целевой позиции.

Примеры

свернуть все

Создайте вектор lut так, что операция фильтрации помещает 1 в целевом пиксельном местоположении в вход изображении только тогда, когда для всех четырех пикселей в окрестности BW 2 на 2 задано значение 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. Вышеописанное вычисление предсказывает, что выходное изображение A должно содержать значение 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
Для просмотра документации необходимо авторизоваться на сайте