Вы находитесь на странице: 1из 12

с/к Анализ изображений, OpenCV

5. Сглаживание

лекции и объявления: вопросы отправляйте на адрес УрГУ / ИММ осень 2010


www.uralvision.blogspot.com perevalovds@gmail.com
Сглаживание
Самая часто используемая функция для сглаживания:
void GaussianBlur(const Mat& src, //входное изображение
Mat& dst, //выходное изображение
Size ksize, //размер окна сглаживания
double sigmaX, //параметры гауссиана
double sigmaY=0,
int borderType=BORDER_DEFAULT) //как работать с
//границей

- Функция выполняет сглаживание src с использованием функции Гаусса.


- dst будет иметь тот же тип и размеры, что и src.
- Допустимо, чтобы dst == src.
- ksize - размер ядра фильтра, когда размеры должны быть нечетными.
- sigmaX, sigmaY - стандартные отклонения по X и Y. Если 0, то вычисляются
из
ksize.
- borderType - как работать на границе, например, BORDER_REFLECT.
Сглаживание
Пример
Mat image = imread( "3dart.jpg" );
Mat blurred1, blurred2;
GaussianBlur( image, blurred1, cv::Size( 11, 11 ), 0 );
GaussianBlur( image, blurred2, cv::Size( 41, 41 ), 0 );

image blurred1 blurred2

http://www.innocentenglish.com/funny-pics/best-pics/stairs-sidewalk-art.jpg
Сглаживание
Другие функции, выполняющие сглаживание:
medianBlur - медианная фильтрация
blur - сглаживание квадратным окном (усреднение)
filter2D - сглаживание с любым фильтром, представленным в виде матрицы

GaussianBlur medianBlur blur

Все три метода работали с фильтром размером 11x11 пикселов.


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

Чаще всего - используют гауссов фильтр, реже -


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

Исходная картинка Сглаживание фильтром Разность исходной и


с неоднородным фоном размером 201x201 пиксел сглаженной картинок.
Фон теперь однородно
черный.

В примере использована картинка, полученная инвертированием http://www.


eyesontutorials.com/images/Designing/Jeka/tut180_dark_wallpaper/12.jpg
Для чего применяется сглаживание
3. Подчеркивание пикселов контуров объектов.
(Факт из теории: разность двух гауссианов
аппроксимирует лапласиан).
Используется два гауссовых фильтра с размерами a и
~2a.

Исходное изображение Разность двух сглаженных картинок с


радиусами 3 и 7, умноженная на 20.
Ярким цветом выделились контура
объектов.
Для чего применяется сглаживание
4. Не относящееся к компьютерному зрению,
а к компьютерной графике:

- гауссовым фильтром моделируется эффект дефокусировки.

- несимметричным фильтром создается эффект "скоростного смаза" (motion blur).

Боковое движение Движение вперед Вращение


Практическая задача 2
Сделать мультфильм, в котором
исходная картинка подвергается размытию с возрастающим размером окна. То
есть, постепенно размывается.

1. В качестве картинки, которую следует размывать - выберите изображение


объекта, название которого начинается на первую букву вашей фамилии.

2. Для алгоритма размытия используйте


гауссов фильтр (если ваша фамилия четной длины),
или медианный фильтр (если ваша фамилия нечетной длины).

3. В мультфильме должно быть не менее 100 кадров.

4. Результат - высылайте ссылку на ваше видео на youtube, и cpp-код.


Практическая задача 2
Уточнение, как делать

В OpenCV есть возможность явно создавать avi файлы.


Мы предлагаем сделать проще.

1. Изображения записывать на диск в одну папку в формате .bmp, с названиями


image000.bmp, image001.bmp, ....

2. Затем из них сделать avi-файл с помощью программы VirtualDub


(File->Open video file, и в появившемся диалоге указать первую картинку из набора.
После этого Video -> Compresson, выбрать кодек.
Наконец, File -> Save as avi... - запись avi-файла).

3. Выложить полученный файл на youtube.


Практическая задача 3
Используя
1) вырезание части изображения,
(см. 2-ю лекцию, "5. Работа с прямоугольными подобластями изображения")
2) функцию изменения размера resize()
3) суммирование изображений с весами
(см. 2-ю лекцию, "3. Линейные операции над изображениями")

реализовать эффект "Движение вперед".

Результат представить в виде cpp-файла, а также входной и выходной картинок.


Название объекта на входной картинке должно начинаться на первую букву вашей
фамилии.
Практическая задача 3
Уточнение, как делать

Вырезаем N=20 прямоугольных областей - image[i], их увеличиваем в размере,


и из них строим сумму

1.0 / N * image[0] + 1.0 / N * image[1] + ... + 1.0 / N * image[N-1];

это и будет результат.

Оценить