bwlookup

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

Синтаксис

Описание

пример

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 | logical

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

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

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

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

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

свернуть все

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