Графические фильтры на основе матрицы скручивания. Цифровые фильтры изображений

Бытовая техника 04.05.2019
Бытовая техника

Обзор методов фильтрации и сегментации цифровых изображений

Источник: Стругайло В.В. Обзор методов фильтрации и сегментации цифровых изображений // Наука и образование. Электронное научно-технические издание. // Московский автомобильно-дорожный государственный технический университет, 2012. — С. 270-281.

Введение

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

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

Фильтрация изображений

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

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

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

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

При осуществлении линейной фильтрации отклик маски задается суммой произведений пикселей в области покрытия фильтра. В качестве линейного сглаживающего фильтра используется усредняющий фильтр выходным значением, которого является среднее значение по окрестности маски фильтра . Подобный фильтр используется для задач удаления зернистости изображения вызванной импульсным шумом . Общая формула отклика g(x, y) усредняющего фильтра, предназначенного для фильтрации изображения f с размерами M×N, имеет вид :

где w(s, t) — элемент ядра свертки изображения, имеющей размеры m×n, s∈[−m/2, m/2], t∈[−n/2, n/2] — координаты ядра свертки по оси абсцисс и ординат; x=0,1,2,..,M−1, y=0,1,2,..,N−1 — координаты исходного изображения f.

В форме удобной для программного представления подобный фильтр можно представить в виде:

где — элемент матрицы изображения после фильтрации; — элемент массива ядра свертки изображения, имеющий размеры m×n; — элемент матрицы исходного изображения.

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

Среднее значение яркости вычисляется для центрального пикселя маски W i,j , содержащей значения яркости исходного изображения в покрытой маской локальной области изображения по формуле:

Дисперсия маски равна:

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

Сглаживание шума оценивается через среднее квадратичное отклонение:

На рисунке 1 приведены результаты фильтрации при наложении импульсного шума на цифровое изображение. На рисунке 2 представлены результаты фильтрации наложенного на цифровое изображение гауссовского белого шума.

Рисунок 1 — Результаты фильтрации импульсного шума на изображении


Рисунок 2 — Результаты фильтрации белого шума на изображении

Методы сегментации изображений

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

Сегментация решает в общем смысле две основные задачи :

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

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

Разделение изображения на части базируется на идеях, основанных на резких перепадах яркости. Изменение формы описания элементов изображения основывается на разделении изображения на однородные области с учетом заранее выбранных критериев .

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

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

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

Гистограммные методы основаны на выборе минимальных и максимальных значений или интервалов между экстремумами .

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

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

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

Существует множество методов решающих задачи сегментации, как и подходов к их классификации. Для сравнения методов сегментации цифровых изображений, были смоделированы методы, представляемые в виде масок. Принцип работы таких методов основан на разности яркости элементов и фона изображения . Математическое обоснование методов заключается в вычислении производных, представленных для цифровых изображений в виде дискретных приближений градиента. В качестве градиентных методов выделяют операторы, представляющие собой матричные маски :

  • перекрестный оператор Робертса (Roberts" Crossoperator);
  • операторПревитта (Prewitt method, Compass Edge Detector);
  • операторСобела (Sobel operator).

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

Оператор Робертса использует четыре значения яркости на изображении и имеет следующий вид:

где — элемент матрицы исходного изображения.

Оператор Собела использует восемь отсчетов яркости в области анализируемого элемента:

Матрицы оператора Собела имеют вид :

где: E — матрица исходного изображения.

В программном представлении изображения :

Оператор Превитта подобен оператору Собела и отличается от него маской. Матрицы оператора Собела имеют вид :

В качестве методов основанных на производной второго порядка выделяют оператор Лапласиана . Данный оператор обнаруживает границы в местах смены знака производной функции яркости. Но оператор лапласиана очень чувствителен к шуму. Кроме того, использование модуля лапласиана приводит к удвоению контуров, что дает нежелательный эффект и усложняет сегментацию . С целью уменьшить влияние шума часто используют лапласиан в сочетании со сглаживанием, например, по методу Гаусса. Такое сочетание называют оператором лапласиан гауссиана (LaplacianofGaussian — LoG) .

Маска оператора Лапласиана гауссиана создается по формуле:

где σ — среднеквадратичное отклонение распределения Гаусса. Маска фильтра имеет вид:

где a — параметр в диапазоне .

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

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

Рисунок 3 — Результаты сегментации изображения

Заключение

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

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

Список использованной литературы

1. Гонсалес Р., Вудс Р. Цифровая обработка изображений. — М.: Техносфера, 2006. — 1072 с.
2. Грузман И.С., Киричук В.С., Косых В.П., Перетягин Г.И., Спектор А.А. Цифровая обработка изображений в информационных системах: Учеб. пособие. — Новосибирск.: Изд-во НГТУ, 2003. — 352 с.
3. Сато Ю. Обработка сигналов. Первое знакомство. 2-е издание. — М.: Додэка XXI, 2009. — 176 с.
4. Оппенгейм А. Шафер Р. Цифровая обработка сигналов. 2-е издание. — М.: Техносфера, 2007. — 856 с.
5. Лайонс Ричард. Цифровая обработка сигналов: 2 изд. — М.: ООО Бином-Пресс, 2006. — 656 с.
6. Сергиенко А.Б. Цифровая обработка сигналов. — СПб.: Питер, 2007. — 752 с.
7. Фисенко В.Т., Фисенко Т.Ю., Компьютерная обработка и распознавание изображений: учеб. пособие. — СПб: СПбГУ ИТМО, 2008. — 192 с.
8. Яне Б. Цифровая обработка изображений. — М.: Техносфера, 2007. — 584 с.
9. Шапиро Л., Стокман Дж. Компьютерное зрение. — М.: БИНОМ. Лаборатория знаний, 2006. — 752 с.

Зашумление изображения. Модели шумов

Выше мы уже писали о том, что под задачей "фильтрации изображений" в широком смысле иногда понимают любые процедуры обработки изображений, при которых на вход процедуры подается (одно) растровое изображение, и на выходе также формируется растровое изображение. Такие процедуры типа (один растровый вход, один растровый выход) называют\linebreak $\it{фильтрами}$.

Однако чаще под "фильтрацией" в более узком смысле понимают так называемую $\textit{помеховую фильтрацию}$, или фильтрацию изображений от "шума". При этом неявно предполагается, что первоначально где-то существовало некое "исходное" идеально чистое (незашумленное) изображение, из которого затем путем $\it{зашумления}$ (определенного вида искажения), было получено то реальное изображение, которое мы наблюдаем. Задача помеховой фильтрации, таким образом, сводится к тому, чтобы путем некоторой обработки наблюдаемого реального изображения как можно лучше "очистить его от шума", то есть получить изображение, наиболее близкое по своим характеристикам к исходному "незашумленному" изображению.

На самом деле необходимо понимать, что "зашумление" - это всего лишь очень упрощенная идеализированная модель возникновения искажений в цифровых изображениях реальных объектов. Вообще же говоря, искажения изображения, получаемого путем видеосъемки реального трехмерного объекта в природной обстановке, могут носить весьма сложный характер, зависящий от условий съемки (освещенность, туман, блики, тени, дождь, снег и т. п.), характеристик оптической системы (дисторсии, расфокусировки, замутненность линз и зеркал и т. п.), характеристик электронной регистрирующей аппаратуры, характеристик канала передачи, характеристик устройств оцифровки и еще многих и многих факторов. Приближенные к реальности математические модели формирования цифровых изображений содержат сотни сложных нелинейных уравнений и множество табличных поправок. При этом закон формирования значения яркости каждого пиксела изображения, как правило, не является независимым от формирования соседних пикселов, яркостные параметры изображения зависят от геометрических, и так далее. При попытке математически "скорректировать" подобную сложную модель регистрации изображения говорят уже не о фильтрации от шума, а о $\it{реставрации}$ или $\it{реконструкции}$ изображений.

К сожалению, методы реставрации изображений слишком сложны в вычислительном смысле, чтобы на практике использоваться в системах машинного зрения, работающих в реальном масштабе времени. Кроме того, они требуют точного знания математической модели и всех параметров системы видеорегистрации, что на практике также практически невозможно. Поэтому в реальных системах машинного зрения, как правило, используются более простые, но тем не менее достаточно эффективные процедуры помеховой фильтрации, разработанные для борьбы с гораздо более простыми искажениями в виде $\it{независимого зашумления пикселов}$ изображения.

Наиболее общей моделью независимого зашумления пикселов является $\it{шум замещения}$. Пусть дано исходное ("незашумленное") полутоновое изображение Im$$, каждый пиксел которого может принимать значения в диапазоне $$. Общая модель шума замещения предполагает, что после зашумления каждый пиксел изображения, имевший ранее значение яркости $i$, либо с некоторой известной вероятностью $p(i)$ это значение сохранит, либо данное значение яркости будет случайным образом замещено с вероятностью $q(i,j)$ некоторым другим значением яркости $j$ из того же конечного дискретного диапазона $$. Как видно, для описания такой общей модели случайного замещения нам потребуется задать таблицу $\it{переходных вероятностей}$ размера $I_{\textrm{max}}^{2}$, что составляет весьма значительное количество в случае обычного $8$-битового полутонового изображения (размер таблицы - $256\times 256$ элементов). Такое описание явно является некомпактным и поэтому редко используется на практике для полутоновых изображений. В то же время, для бинарных изображений, в которых $I_{\rm {max}} = 2$, такое описание является наиболее удобным, простым и естественным. Чуть ниже мы еще рассмотрим модель шума замещения на бинарных изображениях - так называемую модель шума "соль и перец".

Для полутоновых изображений, как правило, рассматривают другую, более частную модель зашумления - $\it{аддитивный шум}$, которая предполагает, что зашумленное изображение порождается по закону

$$ {\rm Im}^{\prime} = {\rm Im} + R(x,y), $$

где ${\rm Im}^{\prime} $ - пиксел зашумленного изображения, ${\rm Im} $ - пиксел исходного изображения, а $R(x,y)$ - случайная $\textit{аддитивная шумовая компонента}$. Кроме того, в большинстве приложений зависимость шума от координат пиксела считается несущественной. Наконец, исходя из известного в статистике $\it{закона больших чисел}$, закон распределения аддитивной шумовой компоненты предпочитают описывать удобным параметрическим семейством $\it{нормальных}$ ($\it{гауссовских}$) распределений с нулевым средним. Таким образом, $\textit{гауссовский аддитивный шум}$ описывается выражением

$$ {\rm Im}^{\prime} = {\rm Im} + N(0,\sigma), $$

где $N(a,\sigma)$ - нормальное распределение, $a$ - математическое ожидание нормально распределенного сигнала, $\sigma $ - средний квадрат отклонения (СКО) нормально распределенной величины. Именно такая модель зашумления чаще всего рассматривается в задачах фильтрации полутоновых изображений.

На рис. 2 - 8 показаны примеры искусственного зашумления исходного полутонового изображения лейкоцитов (рис. 1) специально сгенерированным аддитивным гауссовским шумом с различными значениями СКО. Как видно, чем больше параметр зашумления $\sigma $, тем более искаженным выглядит изображение. При больших значениях $\sigma $ (рис. 7, 8) даже человеческий глаз уже с трудом различает общие очертания крупноразмерных объектов изображения (в данном случае - лейкоцитов), более мелкие и менее контрастные объекты становятся практически неразличимы.

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

Оконная фильтрация изображений в пространственной области

Исходя из задачи восстановления исходных значений яркости незашумленного изображения, а также из того, что шумовая компонента каждого пиксела является заранее не известной случайной величиной, следует, что для решения данной задачи необходимо использовать ту или иную процедуру $\textit{статистического оценивания}$. Это может быть Байесовское оценивание, оценивание по методу наибольшего правдоподобия или любой другой метод, известный из курса математической статистики. Однако все эти методы требуют использовать для оценки искомой величины не одно единственное измерение (ведь оно также может быть зашумлено), а большую или меньшую $\textit{статистическую выборку, }$всегда включающую несколько отсчетов, характеризующих данную величину. В связи с этим и основная идея помеховой фильтрации изображений заключается в том, что для оценки исходного значения каждого пиксела изображения используется не только значение самого данного пиксела (как в ранее рассмотренных градационных преобразованиях), но и значения еще нескольких близких к нему пикселов, попадающих в так называемое "$\it{окно}$" или $\it{апертуру}$ фильтра. При этом "близость" пикселов к оцениваемому понимается в буквальном геометрическом смысле.

Наиболее простыми для вычислительной реализации являются традиционно используемые $\textit{прямоугольные окна}$ (апертуры) фильтрации, определяемые простым условием типа "$\textit{все пикселы данного окна отстоят от тестируемого центрального пиксела на более чем на WinX/2 по горизонатали и WinY/2 по вертикали}$", где WinX и WinY - горизонтальный и вертикальный размер окна фильтрации соответственно. Возможны и другие, более сложные способы формирования окон фильтрации - круглой, треугольной или любой другой произвольной формы.

Типовая процедура оконной фильтрации предполагает, что окно фильтрации последовательно движется по $\textit{входному изображению}$ (например, алгоритм может обходить изображение "в порядке чтения": сверху вниз по строкам, слева направо в каждой строке), при этом в каждом положении окна происходит анализ всех пикселов, принадлежащих в данный момент окну, и на основе такого анализа центральному пикселу окна на $\textit{выходном изображении}$ присваивается то или иное финальное значение. Сформированное таким образом выходное изображение также называется $\textit{результатом фильтрации}$.

Процедуры оконной фильтрации могут различаться:

  1. размером и формой окна (апертуры);
  2. типом собираемых в окне локальных статистик;
  3. способом принятия решения на основе собранных статистик.

В любом случае, речь идет об использовании для оценивания значения центрального пиксела апертуры информации о значениях его соседей по изображению. В статистическом смысле это означает, что мы неявно опираемся на предположение о том, что на исходном незашумленном изображении значения яркостей всех этих соседних пикселов были одинаковыми или очень близкими, и наблюдаемые различия в их яркостях на зашумленном изображении определяются только присутствием шумовой компоненты, которую и необходимо исключить. Между тем, как мы уже видели, исследуя профили изображения, содержательное изображение вовсе не представляет собой одну сплошную "плоскость". В тех областях, которые визуально кажутся нам областями одинаковой или медленно меняющейся яркости, значения соседних пикселов действительно различаются незначительно. В то же время, на границах таких областей наблюдаются порой весьма резкие перепады яркости - разница значений составляет от десятков до сотен градаций интенсивности даже между непосредственно соседствующими пикселами. Таким образом, мы видим, что на границах однородных областей оконные фильтры не могут работать эффективно, напротив, здесь они с большой вероятностью будут ошибаться, что визуально приведет к эффекту $\textit{искажения формы контуров}$. Более того, если на исходном изображении присутствуют контрастные объекты (области), размер которых существенно меньше размера окна фильтрации, фильтр может просто "не заметить" такой объект, отфильтровать его как шум, что приведет к $\textit{исчезновению мелкоразмерных объектов}$ на результирующем выходном изображении.

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

Качество фильтрации

Таким образом, конструируя и исследуя оконные процедуры фильтрации изображений, мы всегда должны оценивать наблюдаемое $\textit{качество фильтрации}$ по двум следующим основным позициям:

  1. способность фильтра удалять (отфильтровывать) с изображения шум;
  2. способность фильтра сохранять на изображении мелкоразмерные детали и форму контуров.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

где f (x , y ) – входное изображение,

g (x , y ) – выходное (обработанное) изображение,

h – оператор функции f , определенный в некоторой области (x , y ).

Операции такого вида относятся к общему классу операций над соседними элементами . Эти операции являются основным инструментарием принизкоуровневой обработке изображений илиобработке изображений в пространственной области .

Основным подходом при определении окрестности точки (x , y ) является использование квадратной или прямоугольной области части изображения с центром в точке (x , y ). Центр этой части изображения перемещается от пикселя к пикселю начиная, например, с левого верхнего угла. При этом для получения g (x , y ) оператор применяется для каждого положения (x , y ). Хотя используются иногда и другие формы окрестности (например, круг), квадратные формы более предпочтительны из-за простоты их реализации.

Один из наиболее применяемых методов пространственной области основан на использовании фильтров (масок свертки, шаблонов, окон). Обычно маска фильтра представляет собой небольшую (например, размерность 3*3) двумерную систему, коэффициенты которой выбираются таким образом, чтобы обнаружить заданное свойство изображения (рис. 1.5, а).

Рис. 1.5: а – маска фильтра; б – коэффициенты маски фильтра

Если величины w 1 ,w 2 ,…,w 9 представляют собой коэффициенты, маски пикселя (x , y ) и его восьми соседей (рис.1.5, б), то алгоритм можно представить как выполнение следующей операции на окрестности 3*3 точки (x , y ) :

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

Приведем краткое описание наиболее распространенных методов фильтрации.

Низкочастотный фильтр – ослабляет высокочастотные компоненты и усиливает роль низкочастотных. Частота в применении к изображениям отражает количество имеющихся в изображении деталей. Резкие перепады яркости, помехи и шумы являются примером высокочастотных элементов в изображении. Сглаживание изображения реализуется с помощью следующих ядер:

,

,

.

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

,

,

.

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

В обработке участвуют четыре пикселя, расположенные следующим образом (рис. 1.6).

Рис. 1.6. Пиксели, участвующие в обработке оператором Робертса

Отклик оператора Робертса:

Ядра свертки в данном случае будут выглядеть таким образом:

,

.

Свертка для каждого ядра вычисляется отдельно. В качестве отклика данного фильтра выступает величина

, (1.17)

где P и Q – отклик ядер H 1 и H 2 .

Иногда в качестве оператора Робертса берется величина
.

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

Исходя из этих сверток вычисляется величина и направление краев. Свертка для каждого ядра вычисляется отдельно. В качестве отклика данного фильтра выступает величина

, (1.19)

где P и Q – отклик ядер H 1 и H 2 .

Иногда в качестве оператора Собеля берется величина
.

Оператор Превитта. Аналогично оператору Собеля действует оператор Превитта. Детектор границ Превитта является подходящим способом для оценки величины и ориентации границы. В то время как детектор с дифференциальным градиентом нуждается в трудоёмком вычислении оценки ориентации по величинам в вертикальном и горизонтальном направлениях, детектор границ Превитта даёт направление прямо из ядра с максимальным результатом. Метод усиления края с помощью оператора Превитта рассматривает два различных ядра свертки:

Результат работы оператора Превитта есть

, (1.21)

где P и Q – отклик ядер H 1 и H 2 .

Оператор Лапласа. Дискретный оператор Лапласа часто используется в обработке изображений, например в задаче выделения границ или в приложениях оценки движения. Дискретный лапласиан определяется как сумма вторых производных и вычисляется как сумма перепадов на соседях центрального пикселя. Метод усиления края по Лапласу рассматривает целый ряд различных ядер свертки. Приведем некоторые их них:

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

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

Фильтр «гармоническое среднее» . Гармоническое среднее ряда
вычисляется по формуле

. (1.23)

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

Min – фильтр. В процессе фильтрации значение текущего пикселя заменяется на минимальное значение соседних пикселей. Так, например, для ядра размерности 3 будем иметь:

Max – фильтр. В процессе фильтрации значение текущего пикселя заменяется на максимальное значение соседних пикселей (по аналогии с предыдущим фильтром).

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

Медианный фильтр. Усредненное фильтрование использует значения элементов, содержащихся в области примыкания, для определения нового значения. Фильтр располагает элементы области примыкания в отсортированном порядке и отбирает среднее значение. Так, например, для ядра размерности 3 медианное значение будет пятым:

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

Эффект тиснения. С помощью операции свертки можно реализовать преобразование, дающее эффект тиснения на изображении.

(1.24)

Бинарное «псевдополутоновое» изображение. Исходное изображение обрабатывается при помощи маски D2 или D4: если значение пикселя меньше пропорционального значения соответствующего ему элемента маски, то он обнуляется, иначе ему присваивается 255. Маска накладывается на изображение без перекрытия. Маски D2 и D4:

,

.

При использовании пространственных процессов могут возникнуть следующие вопросы, связанные с особенностями обработки пикселей:

    Устранение краевых эффектов;

    Значение отклика выходит за пределы .

Для первого вопроса возможны следующие пути решения:

    Исключить из преобразования граничные пиксели изображения

в этом случае выходное изображение будет иметь меньшие размеры, либо закрасить граничные пиксели, например черным цветом;

    Не включать соответствующий пиксель в суммирование, равномерно распределив его вес среди других пикселей окрестности;

    Дополнить (достроить) исходное изображение, добавив необходимое количество пикселей по границе. Количество достраиваемых строки столбцов, как правило, зависит от размера ядра. Здесь возможны два варианта:

    • Доопределить значения пикселей за границами изображения при помощи экстраполяции. Например, считать постоянным значение интенсивности вблизи границы или считать постоянным градиент интенсивности вблизи границы;

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

Для решения проблем, связанных с выходом значения за пределы , возможны следующие действия:

    Масштабировать полученные значения при положительных откликах фильтра;

    При отрицательном отклике фильтра брать либо абсолютное значение (по модулю), либо приводить к нулю.

Также в данном разделе стоит привести возможную «классификацию» шума на изображении:

    Шум «соль и перец» – случайные белые и черные пиксели;

    Импульсный шум – случайные белые пиксели;

    Гауссов шум – колебания интенсивности, распределенные по нормальному закону.

В статье пойдет речь об использовании convolution matrix (матрицы скручивания или матрицы свертки), с помощью которой можно создавать и накладывать на изображения фильтры, такие как blur, sharpen и многие другие.

Cтатья будет интересна не только веб-программистам, но и всем кто так или иначе занимается программной обработкой изображений, поскольку функции для работы с матрицей скручивания имеются во многих языках (точно известно о php и flash). Так же, статья будет интересна дизайнерам, использующим Adobe Photoshop, поскольку в нем имеется соответствующий фильтр (Filter-Other-Custom).

Примеры будут на языке PHP с использованием библиотеки GD. Теория, практика, примеры (осторожно, много картинок!)

Теория

Говоря не математическим языком, convolution - это преобразование одной матрицы с помощью другой, которая называется ядром ("kernel"). При обработке изображений в качестве исходных выступают матрицы RGB-каналов пикселей в прямоугольных координатах.

В качестве ядра обычно используется матрица размером 3x3, но возможно и больше (5x5, 7x7 и т.д.). Ядро содержит степени влияния ("ценности") окружающих значений элемента на сам элемент.

Преобразования происходит следующим образом. Каждый элемент исходной матрицы умножается центральное значение матрицы ядра. Кроме этого на соответствующие значения умножаются окружающие его элементы (при размере ядра 3x3 их будет 8), после чего результаты суммируются и принимаются как преобразованное значение.

Вот простой графический пример:

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

Что получислось в результате преобразования. Ценности всех окружающих пикселей, включая собственное значение равно нулю, кроме верхнего среднего, где она равна единице. Таким образом, результат:

(40*0)+(42*1)+(46*0)+(46*0)+(50*0)+(55*0)+(52*0)+(56*0)+(58*0) = 42

Как видно, данное преобразование смещает изображение вниз на 1 пиксель.

Таким образом, convolution в данном случае - это преобразование изображения, в результате которого на каждый пиксель результата влияет окружающая его область. Степень влияния этой области задается с помощью "ядра" или матрицы скручивания.

Значения div и offset

При обработке изображений одним только преобразованием не отделаешься, нужна еще нормализация. Что делать, если получившееся значение больше 255 или меньше 0? Цветов-то таких нет. Более того, что выход за границы цвета явление достаточно частое.

Для нормализации результата используются дополнительные переменные: div (делитель) и offset (коэффициент). Они работают очень просто: результат преобразования делится на div и к нему прибавляется offset.

Не трудно догадаться, что по умолчанию div = 1, offset = 0 (div = 0 выставлять нельзя!).

При преобразованиях в качестве div обычно принимается сумма всех элементов матрицы скручивания. Это условие позволяет не допустить цветовых искажений, если они не нужны.

Действительно, если преобразуемая область содержит один и тот же цвет, то результат получится как сумма элементов ядра умноженное на этот цвет. Соответственно, что бы оставить цвет без изменений, надо разделить результат преобразования на эту самую сумму.

Простой пример: фильтр "негатив".

В качестве исходного мы возьмем следующее изображение:

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

Согласно матрице, получается, что в результате преобразования все цвета будут иметь отрицательную величину. Чтобы цвета были негативными, нужно задать offset = 256, таким образом цвета всех пикселей вычитаются из 256, что является негативным изображением:

Как это делается на PHP

В библиотеке GD на PHP существует функция imageconvolution, которая содержит 4 параметра. Первый - это идентификатор изображения. Второй - это матрица в виде массива из 3-х массивов с 3-мя переменными. Третий и четвертый - это div и offset.

Вот код, который делает изображение негативным:

    $img = imagecreatefromjpeg ("images/pattern.jpg" ) ;

    $matrix = array (

    array ( 0 , 0 , 0 ) ,

    array ( 0 , - 1 , 0 ) ,

    array ( 0 , 0 , 0 )

    imageconvolution ($img , $matrix , 1 , 256 ) ;

    imagejpeg ($img , "images/pattern_negative.jpg" , 100 ) ;

Сразу стоит сказать об одной очень неприятной особенности GD: при преобразованиях с помощью imageconvolution "рушится" альфа-канал. Этот баг был описан уже давно, но насколько я знаю, его так и не исправили. Во flash этого нет, более того там имееются еще дополнительные параметры, которые отвечают за обработку краёв изображений, когда часть пикселей выпадает. В php края просто не обрабатываются.

Blur, sharpen, emboss

Вот стандартный набор матриц эффектов:

Обратите внимание, для blur коэффициент div = 9. Для такой матрицы только такой коэффициент не ведет к искажению цветов. Еще надо сказать, что вариантов blur-а несколько, они незначительно отличаются силой эффекта.

И вот какие получаются изображения:

Sharpen:

"Аккуратные" эффекты

Как видно из прошлого примера с blur, эффект накладывается на изображение, но достаточно сильно. А можно ли уменьшить силу эффекта на изображение? Оказывается, можно. Но для этого надо изменять не степень влияния окружающих пикселей, как можно показаться на первый взгляд, а количество влияющих пикселей:

Тогда получим эффекты, которые будут выглядеть намного аккуратнее:

Light-blur:

Light-sharpen:

Light-emboss:

Здесь стоит задаться вопросом, а как увеличивать силу эффекта? К сожалению, только многократным его наложением, поскольку как ни крути, а все равно обрабатывается область 3x3 пикселя. Естественно, это очень ресурсоемко, для получения размытия до пятен с помощью размытия по Гауссу иногда приходится накладывать фильтр 100-200 раз. Это занимает очень продолжительное время и очень много ресурсов.

В заключение

Хочу сказать, что вы сами можете создать какой-нибудь интересный эффект. Для этого достаточно поэкспериментировать с матрицей скручивания.

Матрица скручивания может быть успешна применена при:

  • создании "маленьких" картинок, напр. генерации аватаров и предпросмотров (особенно тут хорошо выглядит light-blur).
  • для создания "теней" (если бы еще с альфа-каналом:)
  • при создании CAPTHCA (текст + сильный Sharpen или Emboss)
  • и др. :-)

Создание симпатичной тени

    * Создает красивую тень

    * Внимание! Операция ресурсоемкая!

    * @param res $image - исходная картинка

    * @param int $shadow_width - толщина тени (1..10, выше не рекомендуется)

    * @param int $shadow_deep - глубина цвета тени (1..20, чем выше, тем чернее)

    * @param string $bg_color - цвет фона в формате #7def34

    function imageaddshadow (& $image , $shadow_width = 4 , $shadow_deep = 7 , $bg_color = false )

    $w = imagesx ($image ) ;

    $h = imagesy ($image ) ;

    $iw = $w + 4 * $shadow_width ;

    $ih = $h + 4 * $shadow_width ;

    $img = imagecreatetruecolor ($iw , $ih ) ;

    $shadow_deep = 255 - $shadow_deep * 12 ;

    $shadow = imagecolorallocate ($img , $shadow_deep , $shadow_deep , $shadow_deep ) ;

    if (! $bg_color ) {

    // Белый цвет по умолчанию

    $bg = imagecolorallocate ($img , 255 , 255 , 255 ) ;

    else {

    list ($r , $g , $b ) = array_map ("hexdec" , str_split (ltrim ($bg_color , "#" ) , 2 ) ) ;

    $bg = imagecolorallocate ($img , $r + 1 , $g + 1 , $b + 1 ) ;

    // Заливаем область цветом фона

    imagefilledrectangle ($img , 0 , 0 , $iw , $ih , $bg ) ;

    // Создаем тень

    imagefilledrectangle ($img ,

    1 + $shadow_width ,

    1 + $shadow_width ,



Рекомендуем почитать

Наверх