Обработка изображений • Компьютерная графика Computer graphics • Компьютерное (машинное) зрение Computer (machine) vision • Обработка изображений Image processing Вежневец Владимир vvp@graphicon.ru Обработка изображений Семейство методов и задач, где входной и выходной информацией являются изображения. Примеры: Улучшение качества изображения В том числе устранение шума в изображениях А так же усиления полезной и подавления нежелательной (в контексте конкретной задачи) информации Сжатие изображений Спецэффекты Изображение Изображение оптическое – картина, получаемая в результате прохождения через оптическую систему лучей, распространяющихся от объекта, и воспроизводящая его контуры и детали. Физический энциклопедический словарь. Компьютерное представление изображения: Функция интенсивности (яркости) канала I g ( x, y), {x [ x0 , x1 ], y [ y0 , y1 ]} Используется дискретное представление I g (i, j ),{i 1, n, j 1, m} «Улучшение» изображения Изменение контраста изображения Компенсация: Ограниченного диапазона яркостей датчика (камеры) “Плохой” функции передачи датчика (камеры) f ( x) y x – характеристика яркости света y – яркость пиксела изображения Изменение контраста изображения Что нас может не устраивать в полученном изображении: • Узкий или смещенный диапазон яркостей пикселей • Концентрация яркостей вокруг определенных значений, неравномерное заполнение диапазона яркостей Способ коррекции - к изображению применяется преобразование яркостей, компенсирующий нежелательный эффект: 1 f ( y) x y – яркость пиксела на исходном изображении, x – яркость пиксела после коррекции. Линейная коррекция Компенсация узкого диапазона яркостей – линейное растяжение: f 1 ( y ) ( y ymin ) * (255 0) ( ymax ymin ) График функции f -1(y) Линейная коррекция Компенсация узкого диапазона яркостей – линейное растяжение: Линейная коррекция Линейное растяжение – «как autolevels в Photoshop» Нелинейная коррекция Нелинейная компенсация недостаточной контрастности Часто применяемые функции: • Гамма-коррекция • Изначальная цель – коррекция для правильного отображения на мониторе. x c y • Логарифмическая • Цель – сжатие динамического диапазона при визуализации данных x c log( 1 y ) Гамма-коррекция Гамма-коррекция • Изначальная цель – коррекция для правильного отображения на мониторе. Так называют преобразование вида: x c y Графики функции f -1(y) Нелинейная коррекция График функции f -1(y) Сравнение линейной и нелинейной коррекции Компенсация разности освещения Идея: Формирование изображения: I (i, j ) l (i, j ) f (i, j ) Плавные изменения яркости относятся к освещению, резкие - к объектам. объект f (i, j ) освещение l (i, j ) Изображение освещенного объекта I (i , j ) Выравнивание освещения Алгоритм Получить приближенное изображение освещения путем низкочастотной фильтрации l (i, j ) I (i, j ) G Восстановить изображение по формуле I (i, j ) f (i, j ) l (i, j ) Выравнивание освещения Пример Цветовая коррекция изображений Изменение цветового баланса Компенсация: Неверного цветовосприятия камеры Цветного освещения «Серый мир» Предположение: Сумма всех цветов на изображении естественной сцены дает серый цвет; Метод: Посчитать средние яркости по всем каналам: R 1 N R( x, y); G 1 N G( x, y); B 1 B( x, y ); N Avg R G B ; 3 Масштабировать яркости пикселей по следующим коэффициентам: R R Avg Avg Avg ; G G ; B B ; R G B «Серый мир» - примеры «Серый мир» - примеры «Серый мир» - примеры «Идеальный отражатель» Предположение: Наиболее яркие области изображения относятся к бликам на поверхностях, модель отражения которых такова, что цвет блика = цвету освещения; (дихроматическая модель) Метод Обнаружить максимумы по каждому из каналов: Rmax , Gmax , Bmax Масштабировать яркости пикселов: R* 255 ; Rmax B* 255 ; Bmax G* 255 ; Gmax Цветовая коррекция изображений Растяжение контрастности (“autolevels”) Идея – растянуть интенсивности по каждому из каналов на весь диапазон; Метод: Найти минимум, максимум по каждому из каналов: Rmin , Rmax , Gmin , Gmax , Bmin , Bmax Преобразовать интенсивности: ( R Rmin ) * (255 0) (255 0) ; (G Gmin ) * ; ( Rmax Rmin ) (Gmax Gmin ) ( B Bmin ) * (255 0) ; ( Bmax Bmin ) Растяжение контрастности (“autolevels”) Растяжение контрастности (“autolevels”) Коррекция с опорным цветом Предположение Источник: Пользователь указывает цвет вручную; Априорные знания – «облака – белые» Хорошая фотография этой же сцены Метод Преобразовать по каждому из каналов цвета по формуле: R* Rdst ; Rsrc G* Gdst ; Gsrc B* Bdst ; Bsrc Коррекция с опорным цветом Примеры: Борьба с шумом изображения Подавление и устранение шума Причины возникновения шума: Несовершенство измерительных приборов Хранение и передача изображений с потерей данных Информация содержащаяся в изображении Изображение Полезная информация Шум/артефакты Подавление и устранение шума Устранение шума в бинарных изображениях Бинарное изображение – изображение, пиксели которого принимают всего два значения (0 и 1). Широко известный способ - устранение шума с помощью операций математической морфологии: Сужение (erosion) Расширение (dilation) Закрытие (closing) Раскрытие (opening) Операции математической морфологии Расширение A (+) B = {t R2: t = a + b, a A, b B} A (+) B B Операции математической морфологии Сужение A (-) B = (AC (+) B)С, где AC – дополнение A A B A(-)B Свойства морфологических операций Коммутативный закон A (+) B = B (+) A A (-) B < > B (-) A Ассоциативный закон A (+) (B (+) C) = (A (+) B) (+) C A (-) (B (-) C) = (A (-) B) (-) C Дискретные операции морфологии A B A(+)B Алгоритм морфологического сужения void Erosion(BIT* src[], bool* mask[], BIT* dst[]) { // W, H – размеры исходного и результирующего изображений // MW, MH – размеры структурного множества for(y = MH/2; y < H – MH/2; y++) { for(x = MW/2; x < W – MW/2; x++) { BIT min = MAXBIT; for(j = -MH/2; j <= MH/2; j++) { for(i = -MW/2; i <= MW/2; i++) if((mask[i][j]) && (src[x + i][y + j] < min)) { min = src[x + i][y + j]; } } dst[x][y] = min; } } } Алгоритм морфологического расширения void Dilation(BIT* src[], bool* mask[], BIT* dst[]) { // W, H – размеры исходного и результирующего изображений // MW, MH – размеры структурного множества for(y = MH/2; y < H – MH/2; y++) { for(x = MW/2; x < W – MW/2; x++) { BIT max = 0; for(j = -MH/2; j <= MH/2; j++) { for(i = -MW/2; i <= MW/2; i++) if((mask[i][j]) && (src[x + i][y + j] > max)) { max = src[x + i][y + j]; } } dst[x][y] = max; } } } Операции раскрытия и закрытия Морфологическое раскрытие (opening) open(A, B) = (A (-) B) (+) B Морфологическое закрытие (closing) close(A, B) = (A (+) B) (-) B Образовательные материалы по мат. морфологии доступны по адресу: http://projects.graphicon.ru/publiclib/catalog/214 Важное замечание Множество A обычно является объектом обработки, а множество B (назваемое структурным элементом) – инструментом. Результат морфологических операций во многом определяется применяемым структурным элементом. Выбирая различный стуктурный элемент можно решать разные задачи обработки изображений: • • • • Шумоподавление Выделение границ объекта Выделение скелета объекта Выделение сломанных зубьев на изображении шестерни Устранение шума в бинарных изображениях Пример бинарного изображению с сильным шумом Применения сужения к бинарному изображению с сильным шумом 0 1 0 1 [1] 1 0 1 0 1 1 1 1 [1] 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 [1] 1 1 1 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 Применения открытия к бинарному изображению с сильным шумом 0 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 0 Устранение шума в бинарных изображениях Пример бинарного изображению с дефектами распознаваемых объектов Применения закрытия к бинарному изображению с дефектами объектов 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 0 Не лучший пример для морфологии Не во всех случаях математическая морфология так легко убирает дефекты, как хотелось бы… Применения операции открытия 0 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 0 Подавление и устранение шума Устранение шума в полутоновых и цветных изображениях Усреднение (box filter) Медианный фильтр Фильтр Гаусса (gaussian blurring) Устранение шума в полутоновых и цветных изображениях Пример: изображение с равномерным шумом. I (i, j ) gr (i, j ) Err (i, j) Err(i,j) – нормально распределенная случайная величина. Операция «свертка» (convolution) Свертка двумерной функции f по функции g в непрерывном и дискретном случае. f ( x λ)( y μ) g (λ,μ)ddμ f g ( x, y ) λ,μ n1 f g (i, j ) m1 f (i l )( j k ) g (l , k ) l n0 k m0 Часто, свертка изображения по какой-либо функции называется применением фильтра к изображению. Усреднение (box filter) Операция усреднения значения каждого пикселя – cвертка по константной функции: n m 1 I (i, j ) I (i l )( j k ) 4nm l n k m Результат применения: Подавление и устранение шума Устранение шума в полутоновых, цветных и бинарных изображениях с помощью медианного фильтра - выбор медианы среди значений яркости пикселей в некоторой окрестности. Определение медианы: Ai , i 1,n; - отсортированный набор чисел, An / 2 медиана набора. Медианный фильтр радиусом r – выбор медианы среди пикселей в окрестности [-r,r]. Медианный фильтр Результат применения медианного фильтра с радиусом 5 пикселей. Результат применения медианного фильтра с радиусом в 7 пикселей к изображению с шумом и артефактами в виде тонких светлых окружностей. Очистка изображения с помощью медианного фильтра Фильтр с окрестностью 3x3 Фильтр Гаусса (gaussian blurring) Свертка по функции: I (i, j ) n m I (i l )( j k ) l n k m d l2 k2 Параметр σ задает степень размытия. На графике функция с σ 5. 1 e 2πσ d2 2σ2 Маленкая экскурсия к Фурье + Низкие частоты Высокие частоты Фильтр Гаусса (gaussian blurring) Результаты свертки по функции Гаусса и по константной функции (усреднения). Фильтр Гаусса с Sigma = 4 Усреднение по 49 пикселям (7x7) Исходное изображение Важное свойство фильтра Гаусса – он по сути является низкочастотным фильтром. Как бороться с шумом аппаратуры? Предположим, камера, которой производится съемка заметно «шумит». Обычно шум измерительной аппаратуры моделируется как случайная нормально распределенная случайная величина с нулевым средним - Err(i,j) ; I (i, j ) g r (i, j ) Err (i, j ); 1 I (i, j ) N N I k 1 k (i, j ); E ( I (i, j )) g r (i, j ); Примеры шумоподавления Зашумленные изображения Усреднение по 10 изображениям Примеры шумоподавления Исходное изображение Усреднение по 9 пикселям (3x3) Медианный фильтр (3x3) Фильтр Гаусса с Sigma = 0,5 Примеры шумоподавления Исходное изображение Испорченное изображение Примеры шумоподавления Усреднение по 9 пикселям (3x3) Медианный фильтр (3x3) Подчеркивание контуров объекта Рассмотрим подчеркивание краев (границ) Край(edge) – резкое изменение яркости на изображении, часто соответствует границам объектов на изображении. Подчеркивание краев Нас интересуют области резкого изменения яркости – нахождение таких областей можно организовать на основе анализа первой и второй производной изображения. График функции График производной График 2ой производной Подчеркивание краев Известно, что наибольшее изменение функции происходит в направлении ее градиента. Величина изменения измеряется абсолютной величиной градиента. I I I ( x, y ) ( x, y ), ( x, y ) ; y x I I I ( x, y ) ( x, y ) ( x, y ) x y 2 2 Часто используется приближенное вычисление градиента: I I I ( x, y ) ( x, y ) ( x, y ) x y Подчеркивание краев Семейство методов основано на приближенном вычисление градиента, анализе его направления и абсолютной величины. Свертка по функциям: 1 0 0 1 0 1 Робертса 1 - 1 1 1 0 0 0 0 1 1 1 -1 1 1 Превитт 0 0 0 1 1 1 -1 0 1 2 0 2 1 0 1 -1 2 1 0 0 0 1 2 1 Собеля Математический смысл – приближенное вычисление производных по направлению. Подчеркивание краев Примеры применения операторов подчеркивания краев: Робертса Превитт Собеля Подчеркивание краев Выделение краев с помощью второй производной по направлению. Матрица оператора вычисления второй производной: 1 1 1 2 2 2 1 1 1 По вертикали Вертикальная маска 1 2 1 1 2 1 1 2 1 По горизонтали Горизонтальная маска Подчеркивание краев Моделирование процесса человеческого зрения – Marr и Hildreth предложили анализ нулей результатов свертки по оператору Лапласа от функции Гаусса (LoG): f ( x, y ) f f 2 ; g ( x, y ) Ae 2 x y 2 2 x x2 y2 e g ( x, y ) A 2 σ 2 x2 y2 σ ; y2 σ График второй производной одномерной функции Гаусса с sigma = 8 Подчеркивание краев Маски соответствующие операторам LoG с различными sigma: 0 1 0 1 4 1 0 1 0 Маска 3x3 0 0 0 1 1 2 1 1 0 0 0 0 0 2 4 8 9 8 4 2 0 0 0 2 7 15 22 23 22 15 7 2 0 1 4 15 24 14 1 14 24 15 4 1 1 2 8 9 22 23 14 1 52 103 103 178 52 103 14 1 22 23 8 9 1 2 1 8 22 14 52 103 52 14 22 8 1 Маска 11x11 1 0 4 2 15 7 24 15 14 22 1 23 14 22 24 15 15 7 4 2 1 0 0 0 2 4 8 9 8 4 2 0 0 0 0 0 1 1 2 1 1 0 0 0 Подчеркивание краев Результат применения оператора LoG: Маска 3x3 Маска 5x5 Операция оконтуривания объекта При работе с бинарными изображениями контуры объекта можно получить с помощью операций математической морфологии Внутреннее оконтуривание CI = A – (A (-) B) Внешнее оконтуривание CO = (A (+) B) – A Пример оконтуривания объекта