Евгений Борисов
понедельник, 17 ноября 2014 г.
В этой статье мы поговорим о базовых методах обработки изображений.
Области применения и цели для применения методов обработки изображений могут быть самые разные.
Для многих задач обработки изображений цвет не играет важной роли. Cамый простой способ кодирования точки изображения это бинарный (0,1), т.е. точка может находиться в двух состояниях чёрная или белая.
Более сложный способ кодирования это градации серого (grayscale), состояние точки определяется параметром яркости, который принимает значения от 0 до 255, таким образом одна точка может кодироваться одним байтом.
![]() Рис.1: чёрно-белая картинка |
![]() Рис.2: картинка в градациях серого |
Преобразовать картинку из градации серого в бинарную можно простым пороговым преобразованием.
Этот способ годиться для равномерно освещённых сцен, в противном случае выбрать удачный порог яркости T для всей картинки может оказаться затруднительно. Для решения этой задачи можно использовать адаптивный порог. Для каждой точки рассматривается её окрестность и порог выбирается только для этой окрестности, например как среднюю яркость окрестности.
![]() Рис.3: неравномерно освещённая картинка |
![]() Рис.4: простое пороговое преобразование неравномерно освещённой картинки |
![]() Рис.5: адаптивное пороговое преобразование неравномерно освещённой картинки |
Результат порогового преобразования может содержать шум. Для борьбы с этими проблемами применяют операции математической морфологии. Каждая точка исходного изображения рассматривается с некоторой окрестностью. Форма и размер этой окрестности задаются т.н. структурным элементом, в простейшем случае это квадрат размера 3x3 точки. Для обработки изображений применяют две основные операции сужение и расширение, а также их комбинации.
![]() Рис.6: исходная картинка |
![]() Рис.7: расширение |
![]() Рис.8: сужение |
![]() Рис.9: закрытие |
![]() Рис.10: раскрытие |
Применение фильтра к изображению это изменение значения каждого пикселя в зависимости от его окрестности, размер окрестности это параметр, который называют размером фильтра.
Cвёрточный фильтр или свёртка это следующее преобразование.
где f - изображение, g - ядро.
Т.е. берём точку с окрестностью, поэлементно умножаем эту матрицу на ядро, результат суммируется и записывается как новое значение данной точки. Процедура повторяется для всех точек изображения.
Фильтры обладают рядом полезных свойств, например комбинации фильтров, применяемых к изображению, коммутативны и ассоциативны[1].
Далее приведены примеры фильтров
![]() Рис.11: исходная картинка |
![]() Рис.12: сглаженная картинка |
Для анализа изображений можно применять методы работы с контурами. Выделив края и найдя контуры изображения мы сразу отбрасываем лишнюю информацию. Этот подход имеет свои недостатки, например он чувствителен к шуму, но иногда с его помощью можно получить хороший результат.
Края на картинке это области резкого изменения яркости. Для выделения краёв обычно используется метод Canny[1]. Этот метод выполняет свертку изображения с ядром [1 -1] (производная от фильтра Гаусса), определяет градиент яркости, утоньшает и связывает получившиеся края.
![]() Рис.13: исходная картинка |
![]() Рис.14: результат применения Canny |
В отличии от чёрно-белых изображений, точка цветного изображения обычно кодируется тремя параметрами (трихроматическая теория), таким образом картинка представляется как три однотипные матрицы.
Параметры, которые называют каналами изображения, можно выбирать разными способами. наиболее известный - RGB (красный, зелёный, синий), каждый из трёх параметров RGB кодируется одним байтом, т.е. от 0 до 255.
Помимо RGB существуют и другие способы кодирования, например HSV (Hue, Saturation, Value) — тон, насыщенность, яркость.
Цветовая модель HSV может оказаться более удобной для обработки чем RGB.
Для улучшения изображения существуют следующие простые методы.
Autolevels позволяет улучшить контрастность, этот метод не работает если на картинке одновременно присутствуют белые (255) и чёрные (0) пиксели, в этом случае можно применять нелинейную (gamma) коррекцию.
![]() Рис.16: исходная картинка |
![]() Рис.17: результат Autolevels |
где n = 3 - количество каналов изображения, mj - среднее значение канала j, m - среднее значение по всем каналам
![]() Рис.18: исходная картинка |
![]() Рис.19: результат grayworld |
![]() Рис.20: исходная картинка |
![]() Рис.21: результат gamma-коррекции |
Очищенное изображение восстанавливается по следующей формуле.
![]() Рис.22: исходная картинка |
![]() Рис.23: результат retinex |
Исходные тексты программ [ здесь ].
[1] Антон Конушин Введение в компьютерное зрение – http://www.lektorium.tv/course/22847