Upload
denis-perevalov
View
7.671
Download
13
Embed Size (px)
Citation preview
с/к Анализ изображений, OpenCV
5. Сглаживание
УрГУ / ИММ осень 2010лекции и объявления: вопросы отправляйте на адрес www.uralvision.blogspot.com [email protected]
СглаживаниеСамая часто используемая функция для сглаживания: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. Устранение неоднородности фона. Применяется гауссов фильтр большого размера, и из исходной картинки вычитается это сглаженное изображение.
В примере использована картинка, полученная инвертированием http://www.eyesontutorials.com/images/Designing/Jeka/tut180_dark_wallpaper/12.jpg
Исходная картинкас неоднородным фоном
Сглаживание фильтром размером 201x201 пиксел
Разность исходной и сглаженной картинок. Фон теперь однородно черный.
Для чего применяется сглаживание
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];
это и будет результат.