
- •Актуальность
- •Азы работы с изображениями
- •1. Азы работы с изображениями
- •1.1. Попиксельная обработка изображений
- •1.2. Задача маттинга и морфология
- •1.3. Свертки
- •2. Базовые алгоритмы над изображениями
- •2.1. Интерполяция
- •2.2. Фильтрация
- •2.3. Гистограммы
- •Границы и признаки
- •3. Границы
- •3.1. Оператор Собеля
- •3.2. Оператор Лапласа
- •4. Пирамиды и признаки
- •4.1. Пирамиды
- •Задача классификации для нейронных сетей
- •5. Задача классификации
- •5.1. Классификация изображений и ImageNet
- •5.2. Базовые слои и оптимизация
- •6. Архитектуры
- •6.2. Модели ResNet
- •7. Практическая методология
- •7.1. Что делать если плохо учится?
- •7.2. Аугметация и Псевдо-разметка
- •Задачи переноса стиля и поиска изображений по содержанию
- •9. Стаил Трансфер
- •10.1. Поиск изображений по содержанию
- •10.2. Функции схожести и потерь часть 1
- •10.3. Функции схожести и потерь часть 2
- •10.4. Ранжирование
2.2. Фильтрация
Время поговорить про фильтрацию. Фильтрация нужна, когда изображения зашумлены, например, из за особенностей камеры или из за неправильной работы алгоритмов (как, например, при понижении размерности при интерполяции). Какие существую естественные шумы?
Один из таких шумов – гауссовский. Он возникает из за плохого освещения или при сильном нагреве камеры.
Следующий шум – шум соли и перца. Он возникает как артефакт при передаче данных, когда часть пикселей на изображении теряется. Значения таких пикселей либо сильно большие и они становятся белыми, либо очень маленькие и они становятся черными. Такие шумы называются высокочастотными – это когда шум сильно отличается от самого изображения.
Еще один высокочастотный шум – дробовой. Он возникает при низком освещении.
Что можно со всем этим делать?
Можно применить фильтр Гаусса, по сути просто взяв и размазав наше изображение. В итоге мы получим что-то подобное:
Шум уйдет, но наше изображение станет немного размытым. Если мы готовы с этим мириться, то фильтр Гаусса отличный вариант, т.к. он очень быстро работает.
Но, например, для высокочастотных шумов фильтр Гаусса уже не так хорош, т.к. чтобы добиться хотя бы какого-нибудь эффекта, нужно взять очень большое ядро (ставить большую сигму) и размытие станет очень сильным. Что же нам делать в случаях с высокочастотными шумами?
Можно использовать медианный фильтр. Такой фильтр уже не будет являться сверткой, хотя идея похожая. Мы будем идти скользящим окном по нашему изображению, но в новое изображение мы будем записывать медиану среди всех значений, которые попали в окно. Медиана хороша тем, что она игнорирует шумы. В результате применения такого фильтра мы получим такой результат:
Такое свойство, когда фильтр не размывает изображение, называется сохранением границ. К минусам медианного фильтра можно отнести медлительность его работы по сравнению с Гауссовским.
2.3. Гистограммы
Обсудим гистограммы и причем тут изображения. Начнем с проблемы.
У нас есть картинка, на которой изображена Луна. На этой картинке очень много однотонного серого цвета и очень плохо видны детали. Когда мы говорим о фотографии Луны, мы говорим о том, что нам интересны детали, т.е. её рельеф. Что мы можем с этим сделать?
Мы можем нарисовать гистограмму значений наших пикселей. Что мы видим? Мы видим, что есть большой всплеск в конкретном значении и по краям пикселей практически нет. Что с этим можно сделать?
Можно попытаться расширить наш цветовой диапазон чтобы выбрать места, где пикселей будет много, все остальные обрезать, точнее перегнать в полностью черный или полностью белый цвет, а выделенный небольшой кусочек расширить на весь цветовой диапазон от 0 до 255.
Мы получим следующую гистограмму, на которой распределение цветов будет размазано по всему диапазону.
В итоге наше изображение стало более четким и рельеф прослеживается гораздо лучше. Но это был очень тривиальный подход и безусловно можно сделать лучше.
Давайте воспользуемся теорией вероятности. Представим, что наши пиксели из какого-то случайного распределения. Для этого распределения посчитаем функцию распределения. По человечески можно сказать, что это распределение показывает нам, какая доля пикселей меньше либо равна значению в нашей точке. Проще посмотреть на это на рисунке:
Получили следующую кривую, которая идет практически горизонтально до всплеска, потом резко поднимается вверх и дальше идет горизонтально. Теперь нам надо выровнять нашу функцию распределения. Попытаемся сделать так, чтобы она была прямой из 0 в 1. Для этого нужно применить к каждому пикселю нашу функцию распределения.
Гистограмма опять размажется на весь цветовой диапазон, а функция распределения станет похожа на прямую из 0 в 1. Посмотрим на результат:
Четкость изображения увеличилась, рельеф стал виден еще больше.
Теперь давайте рассмотрим плохой случай, когда гистограмма работает не очень хорошо:
На этом изображении происходит съемка мозга. Очень много однотонного серого цвета из за которого не видны детали, что в данном случае очень плохо. Если применить выравнивание гистограммы, то мы получим следующий результат:
Гистограмма показала детали, но результат далеко не идеальный и можно сделать лучше. Проблема такого подхода в том, что гистограмма усредняет по всей картинке. Решением этой проблемы может являться взятие для каждого пикселя окна и усреднения по этому окну, но это очень долго. Попробуем оптимизировать эту идею:
Мы будем применять усреднение на каком-то фиксированном разбиении. Если сделать это в лоб, то мы получим артефакт, который показан на слайде – четырехугольники в местах, где проходило разбиение.
Что можно сказать про такой результат? Красными точками помечены середины четырехугольников. Для них функция распределения посчитана абсолютно правильно. Для всех остальных она посчитана не совсем правильно, т.к. она посчитана для красных точек и просто была применена для всех остальных пикселей в этом окошке. Что с этим можно сделать? Мы можем усреднить по функции распределения. Вспомним, как мы делали нечто похожее при интерполяции. Мы брали и усредняли пиксели пропорционально расстоянию до целочисленного значения. Здесь же мы будем усреднять функцию распределения пропорционально расстоянию до центров разбиения. В результате мы получим такой результат:
Если добавить еще больше разбиений, то результат улучшиться
В результате мы получили очень четкое изображение, на котором видны многие детали.
Если применить этот подход к нашему первому изображению с луной, то мы получим такой результат:
Такой подход называется адаптивным выравниванием гистограммы.