Компьютерная обработка изображений Лекция 4 Кафедра П и КО СПбГУ ИТМО 2005.

Презентация:



Advertisements
Похожие презентации
Компьютерная обработка изображений Лекция 6 СПбГУ ИТМО 2003.
Advertisements

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 5 Структуры данных (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем.
Компьютерная визуализация Лекция 3 СПбГУ ИТМО 2004.
Компьютерная обработка изображений Лекция 4 СПбГУ ИТМО 2003.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
Нижегородский государственный университет им. Н.И. Лобачевского Лаборатория Информационных технологий (ITLab) Разработка параллельной реализации трекинга.
Лекция 10 Структуры. Классификация типов данных Простые Целые, вещественные, void, перечисления Являются атомарными не состоят из других типов Адресные.
Массивы и строки Лекция 5. Одномерные массивы. Объявление. Общая форма объявления: тип имя_переменной[размер]; Пример: double balance[100]; balance[3]
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Y x 0 Оси координат на форме располагаются как показано на рисунке Операторы графики.
1 Импортирование и редактирование графических объектов Занятие 9.
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Выражения языка Си(ч.2). Операции Лекция 3. Основные классы операций арифметические логические поразрядные операции сравнения.
Лекция 2Лекция 2Структура программы Директивы препроцессора main () { Описания переменных Операторы }
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Освещение и текстурирование в OpenGL Астана 2004 Лекция 10.
MACROMEDIA FLASH Свойства объектов. Каждый экземпляр символа Movie Clip, помещенный на поле может иметь своё уникальное имя. Например, имя экземпляра.
Выполнена учениками 8 Б класса МОУ СОШ 6 г.Сегежи р.Карелия Векслер Юлей и Векслер Ириной Учитель Маркевич Н.В.
Фрактальное сжатие Домашних И.А.. Кодирование изображений Закодировать изображение – значит получить некоторый набор данных, по которому известный алгоритм.
РАСТРОВАЯ И ВЕКТОРНАЯ ГРАФИКА ГРАФИЧЕСКИЕ РЕДАКТОРЫ.
Транксрипт:

Компьютерная обработка изображений Лекция 4 Кафедра П и КО СПбГУ ИТМО 2005

Создание изображений в библиотеке IPL // создание заголовочного описания изображения IplImage* img = iplCreateImageHeader( 1, // одноканальное изображение 0, // нет alpha-канала IPL_DEPTH_16U, // данные типа unsigned short "GRAY", // цветовая модель "GRAY", // последовательность каналов IPL_DATA_ORDER_PIXEL, // способ выравнивания данных IPL_ORIGIN_TL, // начало координат в верхнем левом углу IPL_ALIGN_DWORD, // 4-байтовое выравнивание данных width, height, // ширина и высота изображения NULL, NULL, // не используется ROI, нет маски ROI NULL, NULL); // ID не используется, нет разбиения // размещение изображения без заполнения значениями iplAllocateImage( img, // изображение 0, // флаг заполнения значениями 0 ); // значение для заполнения … // освобождение памяти выделенной для изображения iplDeallocate( img, // изображение IPL_IMAGE_ALL ); // вся информация об изображении

Создание изображения в программе // коэффициент уровня интенсивности int const factor = / (width + height); // указатель на массив данных unsigned short* p = (unsigned short*) img->imageData; // обход изображения по строкам for( int y=0; y

Создание тестового изображения // создание одноканального изображения Jaehne IplImage* img = iplCreateImageJaehne( IPL_DEPTH_8U, 200, 150 );... // освобождение памяти выделенной для изображения iplDeallocate( img, IPL_IMAGE_ALL );

Создание изображения из формата BMP // чтение формата BMP BITMAPINFOHEADER* bmphdr;... // создание заголовочного описания изображения IplImage* img = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, bmphdr->biWidth, bmphdr->biHeight, NULL, NULL, NULL, NULL); // преобразование DIB в изображение IPL iplConvertFromDIB( bmphdr, img );... // освобождение памяти выделенной для изображения iplDeallocate( img, IPL_IMAGE_ALL );

Функции для геометрических преобразований iplZoom - растягивает или увеличивает изображение iplDecimate - сжимает или уменьшает изображение iplResize - изменяет размеры изображения iplDecimateBlur - уменьшает и размывает изображение

Действие функции iplZoom xDst=2 xSrc=1 yDst=2 ySrc=1 void iplZoom(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // увеличивает изображение

Действие функции iplDecimate void iplDecimate(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // уменьшает изображение xDst=1 xSrc=2 yDst=1 ySrc=2

Действие функции iplResize void iplResize(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // изменяет размеры изображения xDst=3 xSrc=2 yDst=2 ySrc=3

Выбор режима интерполяции IPL_INTER_NNIPL_INTER_LINEARIPL_INTER_CUBIC

Действие функции iplDecimateBlur void iplDecimateBlur(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // уменьшает изображение с размытием iplDecimate iplDecimateBlur

Макросы для геометрических преобразований iplZoomFit(srcImage, dstImage, interpolate) - растягивает или увеличивает изображение iplDecimateFit(srcImage, dstImage, interpolate) - сжимает или уменьшает изображение iplResizeFit(srcImage, dstImage, interpolate) - изменяет размеры изображения

Функции для геометрических преобразований void ipl...(IplImage* srcImage, // исходное изображение IplImage* dstImage, // итоговое изображение int xDst, int xSrc, // масштаб по х итогового и исходного int yDst, int ySrc, // масштаб по y итогового и исходного int interpolate); // режим интерполирования

Порядок действий 1. Создать временное изображение требуемого размера. 2. Выполнить преобразование исходного изображения и записать результат во временное изображение. 3. Удалить исходное изображение. 4. Скопировать временное изображение на место исходного. 5. Удалить временное изображение.

Пример программы void ZoomImage(IplImage* img, double scale) { // Создать временное изображения с измененным размером IplImage* tmp = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, img->width*scale, img->height*scale, NULL, NULL, NULL, NULL); // Занять память под временное изображение iplAllocateImage(tmp, 0, 0); if(scale > 1.) // Выполнить увеличение изображения iplZoomFit(img, tmp, IPL_INTER_LINEAR); else // Выполнить уменьшение изображения iplDecimateFit(img, tmp, IPL_INTER_LINEAR); // Освободить память исходного изображения iplDeallocate(img, IPL_IMAGE_ALL); // Скопировать результат в исходное изображение img=iplCloneImage(tmp); // Освободить память временного изображения iplDeallocate(tmp, IPL_IMAGE_ALL); }

Действие функции iplMirror void iplMirror(IplImage* srcImage, IplImage* dstImage, int flipAxis); // осуществляет зеркальные отображения flipAxis=0flipAxis=1flipAxis=-1

Действие функции iplRotate void iplRotate(IplImage* srcImage, IplImage* dstImage, double angle, double xShift, double yShift, int interpolate); // осуществляет поворот изображения angle=45 angle=-45

Действие функции iplRotate angle=45 xShift=srcImage->width/2 y Shift=srcImage->height/2 void iplRotate(IplImage* srcImage, IplImage* dstImage, double angle, double xShift, double yShift, int interpolate); // осуществляет поворот изображения

Действие макроса iplRotateCenter angle=45 xCenter=srcImage->width/2 yCenter=srcImage->height/2 void iplRotateCenter(IplImage* srcImage, IplImage* dstImage, double angle, double xCenter, double yCenter, int interpolate); // осуществляет поворот изображения

Пример программы void RotateImageCW(IplImage* img) { // Создать временное изображение с измененным размером IplImage* tmp = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, img->height, img->width, NULL, NULL, NULL, NULL); // Занять память под временное изображение iplAllocateImage(tmp, 0, 0); // Выполнить поворот с последующим сдвигом iplRotate(img, tmp, 90, 0, img->width-1, IPL_INTER_LINEAR); // Освободить память исходного изображения iplDeallocate(img, IPL_IMAGE_ALL ); // Скопировать результат в исходное изображение img=iplCloneImage(tmp); // Освободить память временного изображения iplDeallocate( tmp, IPL_IMAGE_ALL ); }

Действие программы iplRotateCW