Данная статья рассказывает не только о наиболее распространённых фильтрах обработки изображений, но в понятной форме описывает алгоритмы их работы. Статья ориентирована, прежде всего, на программистов, занимающихся обработкой изображений.

Матрица свёртки

Фильтров использующих матрицу свёртки много, ниже будут описаны основные из них.

Матрица свёртки – это матрица коэффициентов, которая «умножается» на значение пикселей изображения для получения требуемого результата.

Ниже представлено применение матрицы свёртки:

div – это коэффициент нормирования, для того чтобы средняя интенсивность оставалась не изменой.

В примере матрица имеет размер 3x3, хотя размер может быть и больше.

Фильтр размытия

Наиболее часто используемым фильтром, основанным на матрице свёртки, является фильтр размытия.

Обычно матрица заполняется по нормальному (гауссовому) закону. Ниже приведена матрица размытия 5x5 заполненная по закону Гауссовского распределения.

Коэффициенты уже являются нормированными, так что div для этой матрицы равен одному.

От размера матрицы зависит сила размытия.

Стоит упомянуть о граничных условиях (эта проблема актуальна для всех матричных фильтров). У верхнего левого пикселя не существует «соседа» с права от него, следовательно, нам не на что умножать коэффициент матрицы.

Существует 2 решения этой проблемы:

I. Применение фильтра, только к «окну» изображения, которое имеет координаты левого верхнего угла , а для правого нижнего . kernelSize – размер матрицы; width, height – размер изображения.

Это не лучший способ, так как фильтр не применяется ко всему изображению. Качество при этом довольно сильно страдает, если размер фильтра велик.

II. Второй метод (дополнение) требует создания промежуточного изображения. Идея в том, чтобы создавать временное изображение с размерами (width + 2 kernelSize / 2, height + 2 kernelSize / 2). В центр изображения копируется входная картинка, а края заполняются крайними пикселями изображения. Размытие применяется к промежуточному буферу, а потом из него извлекается результат.

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

Фильтр размытия по Гауссу имеет сложность O(hi wi n *n), где hi, wi – размеры изображения, n – размер матрицы (ядра фильтра). Данный алгоритм можно оптимизировать с приемлемым качеством.

Квадратное ядро (матрицу) можно заменить двумя одномерными: горизонтальным и вертикальным. Для размера ядра 5 они будут иметь вид:

Фильтр применяется в 2 прохода: сначала горизонтальный, а потом к результату вертикальный (или на оборот).

Сложность данного алгоритма будет O(hi wi n) + O(hi wi n) = 2 O(hi wi * n), что для размера ядра больше двух, быстрее, чем традиционный метод с квадратной матрицей.

Фильтр улучшения чёткости

Для улучшения четкости необходимо использовать следующую матрицу:

Эта матрица увеличивает разницу значений на границах. Div для этой матрицы равен 1.

В программе GIMP есть фильтр «Матрица свёртки», который упрощает поиск необходимого Вам матричного преобразования.

Более подробную информацию о фильтрах основанных на матрице свёртки вы можете найти в статье «Графические фильтры на основе матрицы скручивания» .

Медианный фильтр

Медианный фильтр обычно используется для уменьшения шума или «сглаживания» изображения.

Фильтр работает с матрицами различного размера, но в отличие от матрицы свёртки, размер матрицы влияет только на количество рассматриваемых пикселей.

Алгоритм медианного фильтра следующий: Для текущего пикселя, пиксели, которые «попадают» в матрицу, сортируются, и выбирается средние значение из отсортированного массива. Это значение и является выходным для текущего пикселя. Ниже представлена работа медианного фильтра для размера ядра равного трём.

Фильтры эрозия и наращивание

Фильтры наращивание и эрозия служат для получения морфологического расширения или сужения соответственно. Проще говоря, для изображений это значит выбор пикселя с максимальной или минимальной интенсивностью из окрестности.

Результат линейной фильтрации для данного окна (для данного центрального пиксела) описывается следующей простой формулой:

$$ \begin{gather} \tag{1} \mbox{Im}" = \sum\limits_{i= -\textrm{hWinX}}^{\textrm{hWinX}}~\sum\limits_{j= -\textrm{hWinY}}^{\textrm{hWinY}} {\mbox{Im}\cdot \mbox{Mask}}, \end{gather} $$

где $\mbox{hWinX} = [\mbox{WinX}/2]$, $\mbox{hWinY} = [\mbox{WinY}/2]$ - полуширина и полувысота окна фильтрации соответственно (в случае окна $3\times 3$ обе величины равны 1).

Результат применения операции (1) ко всем пикселам изображения Im$$ называется $\it{сверткой}$ изображения Im с маской Mask.

Скользящее среднее в окне.

Простейшим видом линейной оконной фильтрации в пространственной области является \it{скользящее среднее} в окне. Результатом такой фильтрации является значение математического ожидания, вычисленное по всем пикселам окна. Математически это эквивалентно свертке с маской, все элементы которой равны $1/n$, где $n$ - число элементов маски. Например, маска скользящего среднего размера $3\times 3$ имеет вид

$$ \frac{1}{9}\times \begin{vmatrix} 1&1&1\cr 1&1&1\cr 1&1&1 \end{vmatrix}. $$

Рассмотрим пример фильтрации зашумленного полутонового изображения фильтром "скользяшее среднее". Изображения зашумлены гауссовским аддитивным шумом (рис. 2 - 8).

На рис. 1 - 6 приводятся примеры фильтрации полутонового изображения с различными степенями зашумления средним фильтром с размером окна $3\times 3$. Как видно из примера, фильтр "скользящее среднее" обладает меньшей способностью к подавлению шумовой компоненты по сравнению с ранее рассмотренным медианным фильтром $3\times 3$.

Рассмотрим скользящее среднее с большими размерами окна фильтрации. На рис. 23 - 28 приводится пример медианной фильтрации с различными размерами апертуры.

Как видно из рис. - 12, с увеличением размера окна растет способность медианного фильтра подавлять шумовую компоненту. Однако при этом нарастает и эффект кажущейся "расфокусировки" изображения (рис. 11, 12) за счет размытия краев видимых объектов. Этого специфически присущего линейным фильтрам эффекта размытия мы также не наблюдали в случае нелинейной ранговой фильтрации.

Гауссовская фильтрация.

В предыдущем разделе мы рассмотрели "вырожденный" случай линейной фильтрации с однородной маской. Между тем, сама идея свертки изображения с весовой матрицей аналогична ранее рассмотренной идее введения весовой матрицы во взвешенных процентильных фильтрах. Повысить устойчивость результатов фильтрации на краях областей можно, если придать более близким точкам окрестности большее влияние на окончательный результат, чем дальним. Примером реализации этой идеи для окна размера $3\times 3$ является маска

$$ \frac{1}{16}\times \begin{vmatrix} 1&2&1\cr 2&4&2\cr 1&2&1 \end{vmatrix}. $$

Такая маска называется гауссовой; соответственно, и использующий ее линейный фильтр также называется $\it{гауссовым}$. Используя дискретные приближения двумерной гауссовой функции, можно получить и другие гауссовы ядра большего размера. Обратите внимание на то, что $\it{сглаживающие}$ или $\it{фильтрующие}$ маски линейных фильтров должны иметь сумму всех элементов, равную $1$. Данное $\it{условие нормировки}$ гарантирует адекватный отклик фильтра на постоянный сигнал (постоянное изображение Im$ = \const$).

На рис. 13 - 15 приведен пример гауссовой линейной фильтрации зашумленного изображения.

Цифровые фильтры позволяют накладывать на изображение различные эффекты, например: размытие, резкость, деформацию, шум и т. д.

Цифровой фильтр представляет собой алгоритм обработки изображения. Большая группа цифровых фильтров имеет один и тот же алгоритм, но эффект, накладываемый фильтром на изображение, зависит от коэффициентов, используемых в алгоритме.

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

Линейные фильтры

Линейные фильтры представляют собой семейство фильтров, имеющих очень простое математическое описание. Вместе с тем они позволяют добиться самых разнообразных эффектов. Будем считать, что задано исходное полутоновое изображение A , и обозначим интенсивности его пикселей A (x , y ). Линейный фильтр определяется вещественнозначной функцией F , заданной на растре. Данная функция называется ядром фильтра, а сама фильтрация производится при помощи операции дискретной свертки (взвешенного суммирования):

Результатом служит изображение B . В приведенной формуле не определены пределы суммирования. Обычно ядро фильтра отлично от нуля только в некоторой окрестности N точки (0, 0). За пределами этой окрестности F (i , j ) или в точности равно нулю, или очень близко к нему, так что можно им пренебречь. Поэтому суммирование производится по (i , j ) Є N , и значение каждого пикселя B (x , y ) определяется пикселями изображения A , которые лежат в окне N , центрированном в точке (x , y ) (обозначим это множество N (x , y )). Ядро фильтра, заданное на прямоугольной окрестности N , может рассматриваться как матрица m ×n , где длины сторон являются нечетными числами. При задании ядра матрицей M kl , ее следует центрировать:

Также нуждается в дополнительном прояснении ситуация, когда пиксель (x , y ) находится в окрестности краев изображения. В этом случае A (x +i , y +j ) может соответствовать пикселю A , лежащему за границами изображения A . Данную проблему можно разрешить несколькими способами:



§ не проводить фильтрацию для таких пикселей, обрезав изображение B по краям или закрасив их, к примеру, черным цветом;

§ не включать соответствующий пиксель в суммирование, распределив его вес F (i , j ) равномерно среди других пикселей окрестности N (x , y );

§ доопределить значения пикселей за границами изображения при помощи экстраполяции;

§ доопределить значения пикселей за границами изображения, при помощи зеркального отражения.

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

Сглаживающие фильтры

Результатом применения сглаживающего фильтра является размытие изображения, устранение резких цветовых переходов. Простейший прямоугольный сглаживающий фильтр радиуса r задается при помощи матрицы размера (2r + 1) × (2r + 1), все значения которой равны:

,

а сумма по всем элементам матрицы равна, таким образом, единице. При фильтрации с данным ядром значение пикселя заменяется на усредненное значение пикселей в квадрате со стороной 2r +1 вокруг него. Пример фильтрации при помощи прямоугольного фильтра приведен на рис. 4.19.

а)
б)

Рис. 4.19. Пример использования сглаживающего фильтра

В этом случае на исходное изображение (рис. 4.19, а) наложен прямоугольный фильтр размером 3 на 3 пикселя. Ядро фильтра в этом случае выглядит следующим образом:


.

Результат фильтрации приведен на изображении справа (рис. 4.19, б). Отметим, что сумма всех элементов ядра фильтра дает в результате единицу. Потому можно сказать, что при использовании такого фильтра в целом яркость всего изображения не меняется. Однако, в следствии усреднения значений цветов пикселей, контрастность изображения уменьшается, что и видно на рис. 4.19.

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

Шум – дефект на изображении, вносимый фотосенсорами и электроникой устройств, или возникающий при использовании аналоговых устройств. Шум на изображении проявляется в виде случайным образом расположенных элементов растра (точек), имеющих размеры близкие к размеру пикселя. Шум отличается от изображения более светлым или тёмным оттенком серого и цвета и/или по цвету. Причиной появления шумов на изображении является: зернистость плёнки, грязь, пыль, царапины, отслоение фотографической эмульсии. Если рассматривать цифровые устройства то причиной возникновения цифрового шума является: тепловой шум матрицы, шум переноса заряда, шум квантования АЦП, усиление сигналов в цифровом фотоаппарате, грязь, пыль на сенсоре.

Применение линейной фильтрации с прямоугольным ядром имеет существенный недостаток: пиксели на расстоянии r от обрабатываемого оказывают на результат тот же эффект, что и соседние. Более эффективное шумоподавление можно осуществить, если влияние пикселей друг на друга будет уменьшаться с расстоянием. Этим свойством обладает гауссовский фильтр с ядром:


Гауссовский фильтр имеет ненулевое ядро бесконечного размера. Однако ядро фильтра очень быстро убывает к нулю при удалении от точки (0, 0), и потому на практике можно ограничиться сверткой с окном небольшого размера вокруг (0, 0) (например, взяв радиус окна равным 3σ ).

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

Данная статья рассказывает не только о наиболее распространённых фильтрах обработки изображений, но в понятной форме описывает алгоритмы их работы. Статья ориентирована, прежде всего, на программистов, занимающихся обработкой изображений.

Матрица свёртки

Фильтров использующих матрицу свёртки много, ниже будут описаны основные из них.

Матрица свёртки – это матрица коэффициентов, которая «умножается» на значение пикселей изображения для получения требуемого результата.
Ниже представлено применение матрицы свёртки:

Div – это коэффициент нормирования, для того чтобы средняя интенсивность оставалась не изменой.

В примере матрица имеет размер 3x3, хотя размер может быть и больше.

Фильтр размытия

Наиболее часто используемым фильтром, основанным на матрице свёртки, является фильтр размытия.

Обычно матрица заполняется по нормальному (гауссовому закону). Ниже приведена матрица размытия 5x5 заполненная по закону Гауссовского распределения.

Коэффициенты уже являются нормированными, так что div для этой матрицы равен одному.

От размера матрицы зависит сила размытия.

Стоит упомянуть о граничных условиях (эта проблема актуальна для всех матричных фильтров). У верхнего левого пикселя не существует «соседа» с права от него, следовательно, нам не на что умножать коэффициент матрицы.

Существует 2 решения этой проблемы:

1. Применение фильтра, только к «окну» изображения, которое имеет координаты левого верхнего угла , а для правого нижнего . kernelSize – размер матрицы; width, height – размер изображения.

Это не лучший способ, так как фильтр не применяется ко всему изображению. Качество при этом довольно сильно страдает, если размер фильтра велик.

2. Второй метод (дополнение) требует создания промежуточного изображения. Идея в том, чтобы создавать временное изображение с размерами (width + 2 * kernelSize / 2, height + 2 * kernelSize / 2). В центр изображения копируется входная картинка, а края заполняются крайними пикселями изображения. Размытие применяется к промежуточному буферу, а потом из него извлекается результат.

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

Фильтр размытия по Гауссу имеет сложность O(hi * wi * n *n), где hi, wi – размеры изображения, n – размер матрицы (ядра фильтра). Данный алгоритм можно оптимизировать с приемлемым качеством.

Квадратное ядро (матрицу) можно заменить двумя одномерными: горизонтальным и вертикальным. Для размера ядра 5 они будут иметь вид:

Фильтр применяется в 2 прохода: сначала горизонтальный, а потом к результату вертикальный (или на оборот).

Сложность данного алгоритма будет O(hi * wi * n) + O(hi * wi * n) = 2 * O(hi * wi * n), что для размера ядра больше двух, быстрее, чем традиционный метод с квадратной матрицей.

Фильтр улучшения чёткости

Для улучшения четкости необходимо использовать следующую матрицу:

Эта матрица увеличивает разницу значений на границах. Div для этой матрицы равен 1.

В программе GIMP есть фильтр «Матрица свёртки», который упрощает поиск необходимого Вам матричного преобразования.

Более подробную информацию о фильтрах основанных на матрице свёртки вы можете найти в статье .

Медианный фильтр

Медианный фильтр обычно используется для уменьшения шума или «сглаживания» изображения.

Фильтр работает с матрицами различного размера, но в отличие от матрицы свёртки, размер матрицы влияет только на количество рассматриваемых пикселей.

Алгоритм медианного фильтра следующий:

Для текущего пикселя, пиксели, которые «попадают» в матрицу, сортируются, и выбирается средние значение из отсортированного массива. Это значение и является выходным для текущего пикселя.

Ниже представлена работа медианного фильтра для размера ядра равного трём.

Фильтры наращивание и эрозия служат для получения морфологического расширения или сужения соответственно. Проще говоря, для изображений это значит выбор пикселя с максимальной или минимальной интенсивностью из окрестности.

В результате наращивания происходит увеличение ярких объектов, а эрозии – увеличение тёмных объектов.

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

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

Заключение

В статье были описаны некоторые из фильтров обработки изображения, описаны их алгоритмы и особенности применения.

Данная статья рассказывает не только о наиболее распространённых фильтрах обработки изображений, но в понятной форме описывает алгоритмы их работы. Статья ориентирована, прежде всего, на программистов, занимающихся обработкой изображений.

Матрица свёртки

Фильтров использующих матрицу свёртки много, ниже будут описаны основные из них.

Матрица свёртки – это матрица коэффициентов, которая «умножается» на значение пикселей изображения для получения требуемого результата.
Ниже представлено применение матрицы свёртки:

div – это коэффициент нормирования, для того чтобы средняя интенсивность оставалась не изменой.

В примере матрица имеет размер 3x3, хотя размер может быть и больше.

Фильтр размытия

Наиболее часто используемым фильтром, основанным на матрице свёртки, является фильтр размытия.

Обычно матрица заполняется по нормальному (гауссовому закону). Ниже приведена матрица размытия 5x5 заполненная по закону Гауссовского распределения.


Коэффициенты уже являются нормированными, так что div для этой матрицы равен одному.

От размера матрицы зависит сила размытия.


Стоит упомянуть о граничных условиях (эта проблема актуальна для всех матричных фильтров). У верхнего левого пикселя не существует «соседа» с права от него, следовательно, нам не на что умножать коэффициент матрицы.

Существует 2 решения этой проблемы:

1. Применение фильтра, только к «окну» изображения, которое имеет координаты левого верхнего угла , а для правого нижнего . kernelSize – размер матрицы; width, height – размер изображения.

Это не лучший способ, так как фильтр не применяется ко всему изображению. Качество при этом довольно сильно страдает, если размер фильтра велик.

2. Второй метод требует создания промежуточного изображения. Идея в том, чтобы создавать временное изображение с размерами (width + 2 * kernelSize / 2, height + 2 * kernelSize / 2). В центр изображения копируется входная картинка, а края заполняются крайними пикселями изображения. Размытие применяется к промежуточному буферу, а потом из него извлекается результат.


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

Фильтр размытия по Гауссу имеет сложность O(hi * wi * n *n), где hi, wi – размеры изображения, n – размер матрицы (ядра фильтра). Данный алгоритм можно оптимизировать с приемлемым качеством.

Квадратное ядро (матрицу) можно заменить двумя одномерными: горизонтальным и вертикальным. Для размера ядра 5 они будут иметь вид:

Фильтр применяется в 2 прохода: сначала горизонтальный, а потом к результату вертикальный (или на оборот).

Сложность данного алгоритма будет O(hi * wi * n) + O(hi * wi * n) = 2 * O(hi * wi * n), что для размера ядра больше двух, быстрее, чем традиционный метод с квадратной матрицей.

Фильтр улучшения чёткости

Для улучшения четкости необходимо использовать следующую матрицу:

Эта матрица увеличивает разницу значений на границах. Div для этой матрицы равен 1.


В программе GIMP есть фильтр «Матрица свёртки», который упрощает поиск необходимого Вам матричного преобразования.

Более подробную информацию о фильтрах основанных на матрице свёртки вы можете найти в статье «Графические фильтры на основе матрицы скручивания» .

Медианный фильтр

Медианный фильтр обычно используется для уменьшения шума или «сглаживания» изображения.

Фильтр работает с матрицами различного размера, но в отличие от матрицы свёртки, размер матрицы влияет только на количество рассматриваемых пикселей.

Алгоритм медианного фильтра следующий:

Для текущего пикселя, пиксели, которые «попадают» в матрицу, сортируются, и выбирается средние значение из отсортированного массива. Это значение и является выходным для текущего пикселя.

Ниже представлена работа медианного фильтра для размера ядра равного трём.


Фильтры наращивание и эрозия служат для получения морфологического расширения или сужения соответственно. Проще говоря, для изображений это значит выбор пикселя с максимальной или минимальной интенсивностью из окрестности.


В результате наращивания происходит увеличение ярких объектов, а эрозии – увеличение тёмных объектов.

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

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

Заключение

В статье были описаны некоторые из фильтров обработки изображения, описаны их алгоритмы и особенности применения.