bwlookup

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

Синтаксис

J = bwlookup(BW,lut)

Описание

пример

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

Входные параметры

свернуть все

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

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

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

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

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

свернуть все

Выходное изображение, возвращенное как полутоновое или двухуровневое изображение, чье распределение пиксельных значений определяется содержимым интерполяционной таблицы, 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

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

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

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

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

    A = bwlookup(I,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