imfilter

N-D фильтрация многомерных изображений

Описание

пример

B = imfilter(A,h) фильтрует многомерный массив A с многомерным фильтром h и возвращает результат в B.

пример

B = imfilter(A,h,options,...) выполняет многомерную фильтрацию согласно одному или нескольким заданным опциям.

Примеры

свернуть все

Прочтите цветное изображение в рабочую область и отобразите его.

originalRGB = imread('peppers.png');
imshow(originalRGB)

Figure contains an axes. The axes contains an object of type image.

Создайте фильтр размытия движения с помощью fspecial функция.

h = fspecial('motion', 50, 45);

Примените фильтр к оригинальному изображению, чтобы создать изображение с размытием движения. Обратите внимание, что imfilter является более эффективной памятью, чем некоторые другие функции фильтрации, поскольку она выводит массив совпадающего типа данных, что и входной массив изображений. В этом примере выход является массивом uint8.

filteredRGB = imfilter(originalRGB, h);
figure, imshow(filteredRGB)

Figure contains an axes. The axes contains an object of type image.

Снова отфильтровайте изображение, на этот раз задав опцию репликации границы.

boundaryReplicateRGB = imfilter(originalRGB, h, 'replicate');
figure, imshow(boundaryReplicateRGB)

Figure contains an axes. The axes contains an object of type image.

По умолчанию imfilter использует корреляцию, потому что функции создания фильтра тулбокса производят ядра корреляции. Используйте необязательный параметр для свертки.

Создайте выборку.

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Создайте фильтр.

h = [-1 0 1];

Фильтр с помощью корреляции, по умолчанию.

imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

Фильтруйте с помощью свертки, задавая imfilter с необязательным параметром.

imfilter(A,h,'conv')
ans = 5×5

   -24    16    16   -14     8
    -5    16    -9    -9    14
    -6    -9   -14    -9    20
   -12    -9    -9    16    21
   -18   -14    16    16     2

В этом примере выход imfilter имеет отрицательные значения, когда вход имеет класс double. Чтобы избежать отрицательных значений, преобразуйте изображение в различные типы данных перед вызовом imfilter. Для примера, когда тип входа uint8, imfilter обрезает выходные значения до 0. Также может быть целесообразно преобразовать изображение в целый тип со знаком.

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Фильтрация изображения с помощью imfilter.

h = [-1 0 1];
imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

Заметьте, что результат имеет отрицательные значения. Чтобы избежать отрицательных значений в выходном изображении, преобразуйте вход изображение в uint8 перед выполнением фильтрации. С момента входа в imfilter является классом uint8, выходы также имеют класс uint8, и imfilter обрезает отрицательные значения до 0.

A = uint8(magic(5));
imfilter(A,h)
ans = 5x5 uint8 matrix

   24    0    0   14    0
    5    0    9    9    0
    6    9   14    9    0
   12    9    9    0    0
   18   14    0    0    0

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

свернуть все

Фильтруемое изображение, заданное как числовой массив размерности.

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

Многомерный фильтр, заданный как N-D массив типа данных double.

Типы данных: double

Опции, которые управляют операцией фильтрации, заданные как вектор символов, строковый скаляр или числовой скаляр. В следующей таблице перечислены все поддерживаемые опции.

Опции границ

Опция

Описание

Опции заполнения

числовой скаляр, X

Входным значениям массива за пределами массива присваивается значение X. Когда опция заполнения не задана, значение по умолчанию является 0.

'symmetric'

Входные значения массива за пределами массива вычисляются зеркальным отражением массива через границу массива.

'replicate'

Входные значения массива за пределами массива приняты равными ближайшему значению границы массива.

'circular'

Входные значения массива за пределами массива вычисляются неявно, предполагая, что входной массив является периодическим.

Выход

'same'

Массив выхода имеет тот же размер, что и массив входа. Это поведение по умолчанию, когда не заданы опции выхода.

'full'

Массив выхода является полным отфильтрованным результатом, и так больше, чем массив входа.

Корреляция и свертка Опций

'corr'

imfilter выполняет многомерную фильтрацию с помощью корреляции, что аналогично тому, как filter2 выполняет фильтрацию. Когда не задана корреляция или опция свертки, imfilter использует корреляцию.

'conv'

imfilter выполняет многомерную фильтрацию с помощью свертки.

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

свернуть все

Отфильтрованное изображение, возвращенное в виде числового массива того же размера и класса, что и входа изображение A.

Совет

  • Эта функция может использовать преимущества аппаратной оптимизации для типов данных uint8, uint16, int16, single, и double чтобы запустить быстрее.

Алгоритмы

  • The imfilter функция вычисляет значение каждого выходного пикселя, используя арифметику с двойной точностью и плавающей точностью. Если результат превышает область значений типов данных, то imfilter обрезает результат до допустимой области значений типа данных. Если это целочисленный тип данных, то imfilter округляет дробные значения.

  • Если вы задаете равномерное ядро h, тогда центр ядра floor((size(h) + 1)/2).

    Для примера - центр фильтра с 4 элементами [0.25 0.75 -0.75 -0.25] является вторым элементом, 0.75. Этот фильтр дает те же результаты, что и фильтрация с 5-элементным фильтром [0 0.25 0.75 -0.75 -0.25].

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

..
Представлено до R2006a