
pmi432 / LR07 / 2read / из Журавеля / 08.11 Фильтрация с использованием функции imfilter
.pdf
Image Processing Toolbox |
. 1 |
MATLAB.Exponenta
|
Семинары |
Тренинги |
Лицензирование |
Материалы |
Подписка |
Форум |
Регистрация |
Matlab |
Toolboxes
Simulink Запрос цены Пробная версия Запрос демонстрации Blocksets
Полезное
Вход
Анализ изображений \ Image Processing Toolbox
Фильтрация с использованием функции imfilter
Фильтрация изображений, в том числе корреляция и конволюция, могут быть реализованы с помощью функции imfilter. Рассмотрим пример фильтрации изображения скользящей апертурой с размерами 5×5 и одинаковыми весовыми составляющими. Такой фильтр называется усредняющим фильтром.
I = imread('coins.png'); |
|
|
|
|
h = ones(5,5) / 25 |
|
|
|
|
h = |
|
|
|
|
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
0.0400 |
I2 = imfilter(I,h);
imshow(I); % Исходное изображение
figure, imshow(I2); % Изображение после фильтрации
Типы данных
Типы данных в функции imfilter устанавливаются также, как и при использовании других похожих арифметических функций. Результирующее изображение будет представлено в том же формате данных, что и исходное изображение. Функция imfilter вычисляет значения каждого результирующего пикселя в формате удвоенной точности, проводя арифметические операции с плавающей запятой. Если результирующие значения превышают диапазон, который определен для данного типа данных, то функция imfilter может обрезать их до нужного диапазона. Это зависит от формата представления данных. Если данные представлены в формате integer, тогда функция imfilter округляет дробную часть.
Таким образом, при использовании функции imfilter необходимо учитывать формат представления данных изображения. Рассмотрим пример, где в результате применения функции imfilter получены отрицательные значения. Исходные данные были представлены в формате double.
A = magic(5)
A = |
|
|
|
|
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] |
|
|
|
|
h = |
|
|
|
|
-1 |
0 |
1 |
|
|
imfilter(A,h) |
|
|
|
|
ans = |
|
|
|
|
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 |
Отметим, что результат представлен также и отрицательными значениями. Если матрицу A представить не в формате double, а в формате uint8, то получим такой результат:
A = uint8(magic(5)); imfilter(A,h)
ans = |
|
|
|
|
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 |
После того, как исходные данные были представлены в формате uint8, то результирующие данные также представляются в
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |

Image Processing Toolbox |
. 2 |
После того, как исходные данные были представлены в формате uint8, то результирующие данные также представляются в формате uint8, а отрицательные значения будут обрезаны до 0. Таким образом, исходные данные перед применением функции imfilter можно преобразовать и в другие форматы, например, signed integer, single или double.
Опции корреляции и свертки
Функция imfilter может выполнять фильтрацию с использованием корреляции или свертки. По умолчанию используется корреляция, поскольку функции формирования фильтров формируют корреляционные ядра.
Однако, если необходимо выполнить фильтрацию с использованием свертки, нужно указать опцию 'conv' в качестве необязательного аргумента в функции imfilter. Рассмотрим пример.
A = magic(5); |
|
|
|
|
h = [-1 0 1] |
|
|
|
|
imfilter(A,h) |
% фильтрация с использованием корреляции |
|||
ans = |
|
|
|
|
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(A,h,'conv') |
% фильтрация с использованием свертки |
|||
ans = |
|
|
|
|
-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 заполняет недостающие ячейки нулевыми значениями. Пример такого заполнения показан на рисунке внизу.
Заполнение недостающих пикселей нулевыми значениями
Если отфильтровать изображение, заполняя недостающие пиксели нулями, то на результирующем изображении на границе изображения появится темная линия. Это показано на рисунке.
I = imread('eight.tif'); h = ones(5,5) / 25;
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |

Image Processing Toolbox |
. 3 |
I2 = imfilter(I,h);
imshow(I), title('Исходное изображение');
figure, imshow(I2), title('Изображение после фильтрации');
Для устранения артефактов, которые обусловлены тем, что недостающие элементы были заполнены нулями, imfilter применяет альтернативные методы заполнения недостающих элементов. Один из этих методов состоит в том, что недостающие пиксели заполняются значениями крайних пикселей изображения. Этот метод продемонстрирован на изображении внизу.
Заполнение маски крайними пикселями изображения
При реализации фильтрации с использованием заполнения недостающих элементов крайними элементами изображения, необходимо дополнительно в функции imfilter указывать опцию 'replicate'.
I3 = imfilter(I,h,'replicate'); figure, imshow(I3);
Функция imfilter поддерживает также другие способы заполнения недостающих пикселей при обработке крайних элементов изображения. Для этого есть такие опции как 'circular' и 'symmetric'. Для более детальной информации см. описание функции imfilter.
Многомерная фильтрация
Функция imfilter может обрабатывать также многомерные изображения. Различия между фильтрацией двумерных и трехмерных изображений состоят в том, что при обработке трехмерных изображений фильтрации подлежит отдельно каждый цветовой слой, который представляет собой двумерное изображение и может обрабатываться двумерным фильтром.
Рассмотрим пример обработки цветного изображения, где реализована фильтрация каждого цветового слоя:
1. Считывание и визуализация изображения.
rgb = imread('peppers.png');
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |

Image Processing Toolbox |
. 4 |
rgb = imread('peppers.png'); imshow(rgb);
2. Фильтрация изображения и визуализация результата.
h = ones(5,5)/25;
rgb2 = imfilter(rgb,h); figure, imshow(rgb2)
Взаимосвязь с другими функциями фильтрации
Система MATLAB располагает несколькими двумерными и многомерными функциями фильтрации. Функция filter2 выполняет двумерную линейную фильтрацию, conv2 выполняет свертку двумерных сигналов, а convn – свертку многомерных сигналов. При работе с каждой из этих функций необходимо, чтобы исходные данные были представлены в формате double. Результат также будет представлен в формате double. Эти функции всегда используют заполнение нулями недостающих пикселей при работе на краю изображения и не поддерживают других способов заполнения.
В отличии от названных функций, imfilter не требует преобразования исходных данных в формат double. Также функция imfilter располагает несколькими вариантами заполнения недостающих элементов на краю изображения.
Использование предопределенных типов фильтров
Функция fspecial обладает возможностью формирования нескольких видов предопределенных фильтров, что отражается на форме маски. После создания фильтра с помощью функции fspecial его можно применить для обработки данных изображения с помощью функции imfilter. Рассмотрим пример реализации фильтра типа нечеткого маскирования для обработки полноцветного изображения. Метод нечеткого маскирования эффективно применяется для усиления границ и повышения детализации изображений.
I = imread('moon.tif'); h = fspecial('unsharp') h =
-0.1667 |
-0.6667 |
-0.1667 |
-0.6667 |
4.3333 |
-0.6667 |
-0.1667 |
-0.6667 |
-0.1667 |
I2 = imfilter(I,h);
imshow(I), title('Исходное изображение ')
figure, imshow(I2), title('Обработанное изображение')
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |

Image Processing Toolbox |
. 5 |
Частотные методы преобразований
Частотные методы преобразований используют как одномерные, так и двумерные фильтры с конечной импульсной характеристикой. Эти методы используют матрицу преобразований, элементы которой определяют частотные преобразования.
Функция приложения ftrans2 предназначена для реализации частотных методов обработки изображений. Эта функция формирует маску линейного двумерного фильтра, используя метод преобразования частот для трансформации одномерного фильтра с конечной импульсной характеристикой. (Для более детальной информации см. Jae S. Lim, Two-Dimensional Signal and Image Processing, 1990.
Отметим, что частотные методы преобразований обеспечивают очень хорошие результаты обработки. Рассмотрим пример.
b = remez(10,[0 0.4 0.6 1],[1 1 0 0]); h = ftrans2(b);
[H,w] = freqz(b,1,64,'whole'); colormap(jet(64)) plot(w/pi-1,fftshift(abs(H))) figure, freqz2(h,[32 32])
Одномерный частотный отклик (слева) и соответствующий ему двумерный частотный отклик (справа)
Пример частотного метода
Вчастотных методах маска линейного фильтра формируется на основе желаемой амплитудно-частотной характеристики.
Вприложении функция fsamp2 формирует маску линейного двумерного фильтра на основе желаемой амплитудно-частотной характеристики двумерного фильтра. Сформированная маска предназначена для передачи в соответствующие функции (например, filter2 или conv2), которые выполняют двумерную линейную фильтрацию. Рассмотрим сказанное выше на конкретном примере.
Hd = zeros(11,11); Hd(4:8,4:8) = 1; [f1,f2] = freqspace(11,'meshgrid');
mesh(f1,f2,Hd), axis([-1 1 -1 1 0 1.2]), colormap(jet(64)) h = fsamp2(Hd);
figure, freqz2(h,[32 32]), axis([-1 1 -1 1 0 1.2])
Желательный двумерный частотный отклик (слева) и реальный двумерный частотный отклик (справа)
Локальные (оконные) методы
В приложении Image Processing Toolbox существуют функции, которые формируют маски линейного фильтра по желаемой
амплитудно-частотной характеристике с использованием одномерного или двумерного окна. При формировании матрицы
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |

Image Processing Toolbox |
. 6 |
В приложении Image Processing Toolbox существуют функции, которые формируют маски линейного фильтра по желаемой амплитудно-частотной характеристике с использованием одномерного или двумерного окна. При формировании матрицы желаемой амплитудно-частотной характеристики для получения более точного результата рекомендуется использовать отсчеты частоты, которые возвращаются функцией freqspace.
Рассмотрим это на примере.
Hd = zeros(11,11); Hd(4:8,4:8) = 1; [f1,f2] = freqspace(11,'meshgrid');
mesh(f1,f2,Hd), axis([-1 1 -1 1 0 1.2]), colormap(jet(64)) h = fwind1(Hd,hamming(11));
figure, freqz2(h,[32 32]), axis([-1 1 -1 1 0 1.2])
Желательный двумерный частотный отклик (слева) и реальный двумерный частотный отклик (справа)
Создание желательной амплитудно-частотной характеристики
Функции проектирования фильтров fsamp2, fwind2 и fwind2 создают фильтры на основе матрицы значений желаемой амплитудно-частотной характеристики. Соответствующую желаемую амплитудно-частотную характеристику можно создавать с помощью функции freqspace.
Рассмотрим пример создания кругообразного низкочастотного фильтра со срезом в 0.5. Для этого используют следующий код:
[f1,f2] = freqspace(25,'meshgrid');
Hd = zeros(25,25); d = sqrt(f1.^2 + f2.^2) < 0.5; Hd(d) = 1;
mesh(f1,f2,Hd)
Идеальный кругообразный низкочастотный отклик
Вычисление частотного отклика фильтра
Функция freqz2 вычисляет частотный отклик двумерного фильтра. Если для фильтра с конечной импульсной характеристикой принять, что
h =[0.1667 |
0.6667 |
0.1667 |
|
0.6667 |
-3.3333 |
0.6667 |
|
0.1667 |
0.6667 |
0.1667]; |
|
то рассмотрим вычисление и визуализацию 64×64 точек частотного отклика h.
freqz2(h)
Частотный отклик двумерного фильтра
Для получения частотного отклика H и вектора частот f1 и f2, используем следующий код
[H,f1,f2] = freqz2(h);
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |

Image Processing Toolbox |
. 7 |
[H,f1,f2] = freqz2(h);
Пример.
Рассмотрим пример размытия изображения. Реализуем эту процедуру с помощью двумерного фильтра низких частот (ФНЧ) с конечной импульсной характеристикой (КИХ), который сформирован из одномерного ФНЧ методом преобразования частот.
1.Создадим одномерный КИХ ФНЧ 10 порядка с частотой среза 0.15 b=fir1(10,0.15);
2.Визуализация АЧХ и ФЧХ созданного одномерного фильтра. freqz(b,1,256);
3.Формирование и вывод на экран АЧХ двумерного фильтра.
h=ftrans2(b); figure, freqz2(h);
4.Чтение и визуализация исходного изображения.
i=imread('leo1.bmp');
i=im2double(i); figure, imshow(i);
5.Фильтрация исходного изображения и вывод результата.
i=filter2(h,i); figure, imshow(i);
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |

Image Processing Toolbox |
. 8 |
Некоторые виды преобразований в обработке изображений
В большинстве случаев, математически изображение представляют в виде функции от двух пространственных переменных ƒ (x,y) . Значение функции в точке (x,y) эквивалентно уровню интенсивности в этой точке.
Далее рассмотрим некоторые преобразования, которые применяются в обработке изображений
1.Преобразование Фурье;
2.Дискретные косинусные преобразования
3.Преобразования Радона
4.Проекционные преобразования
Также рассмотрим некоторые термины, которые будут применятся при различного рода преобразованиях.
Термин |
Определение |
Дискретные |
Это вид преобразований, при которых исходные и результирующие данные представляются в виде |
преобразования |
дискретных значений. Дискретные преобразования, которые реализованы в MATLAB и, в частности в |
|
Image Processing Toolbox, включают дискретное преобразование Фурье и дискретные косинусные |
|
преобразования. |
Частотная область |
Область, в которой изображение представлено в виде суммы периодических сигналов с разными |
|
частотами. |
Пространственная |
Область, в которой изображение представлено в виде точек в пространстве, каждой из которых |
область |
соответствует некоторое значение интенсивности. |
Преобразование |
Альтернативное математическое представление изображений. Например, при преобразованиях Фурье |
|
изображение представляется в виде суммы комплексных экспоненциальных переменных амплитуды, |
|
частоты и фазы. Этот тип преобразований наиболее часто используется при анализе, улучшении и сжатии |
|
изображений. |
I Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2002 г.) II Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2004 г.)
III Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (октябрь 2007 г.) IV Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2009 г.)
V Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB» (май 2011 г.)
На первую страницу \ Сотрудничество \ MathWorks \ Softline \ Контакты \ Вакансии |
||
Информация на сайте была обновлена 21.04.12 |
Copyright 2001–2012 Softline Co |
|
Наши баннеры |
||
|
подарки – подарочные сертификаты
http://matlab.exponenta.ru/imageprocess/book5/8_2.php |
08.11.2012 17:41:24 |