- •Лекция 1
- •1.1. Области, связанные с обработкой изображения
- •1.2. Изображение и его машинное представление
- •1.3. Описание сцены и его машинное представление
- •Представление поверхностных моделей.
- •Лекция 2
- •Лекция 2,3
- •Лекция 4,5 Преобразования на плоскости и в пространстве
- •Лекция 6-7-8 Элементы вычислительной геометрии на плоскости.
- •Отсечение отрезка на плоскости
- •Алгоритм Сазерленда-Коэна
- •Отсечение полигона выпуклым окном
- •Плоскость
- •Полигон
- •Лекция 9-10-11-12 Удаление невидимых линий и поверхностей
- •Лекция 13 Наложение текстур
- •Лекция 14 Освещение
- •Лекция 15 Устранение лестничного эффекта (Antialiasing)
- •Лекция 16 Дискретизация изображений
- •Палитры и оптимизация палитр.
- •Метод квантования цветов медианным сечением.
- •Лекция 17,18 Форматы растровых файлов
- •Сжатие графической информации
- •Типы изображений.
- •Требования к алгоритмам компрессии.
- •Критерии сравнения алгоритмов.
- •Алгоритмы архивации без потерь.
- •Лекция 19 Классы изображений и переходы между ними
- •Сегментация изображений
- •Построение контура
- •Построение скелета (остова) области
- •Сегментация кривых
- •Интерполирование
- •Заливка областей
- •Сглаживание
- •Лекция 20 Распознавание образов Понятие образа
- •Проблема обучения распознаванию образов
- •Геометрический и структурный подходы.
- •Гипотеза компактности
- •Самообучение.
- •Перцептроны
- •Р Классы (образы) аспознавание графических образов
- •Лекция 21 Аппроксимация кривых и поверхностей сплайнами
- •Сплайн-функции одной переменной
- •Кривые Безье
- •Где nk(t) – функциональные весовые множители.
- •Рациональные в-сплайновые поверхности
- •Лекция 22 Устройства ввода и вывода графической информации
- •Мониторы
- •Принтеры
- •Графопостроители
- •Сканеры
- •Планшеты и указатели
- •Графические акселераторы
- •Лекция 23 Архитектура графических систем
Метод квантования цветов медианным сечением.
-
Первый шаг состоит в отсечении "краёв" куба, которые не содержат пикселов. К примеру, если у всех пикселов значения красной компоненты не меньше, чем 8 и не больше, чем 250, то отбрасываются части куба от R=0 до R=7 и от R=251 до R=255.
-
Второй шаг заключается в разрезании полученного параллелепипеда на два в срединной точке (медиане) самой длинной стороны. Если самая длинная сторона параллельна оси ‘B’, то компьютер выбирает срединное синее значение из всех синих значений представленных в параллелепипеде (к примеру, 50.000-ое вхождение в отсортированном списке из 100.000 синих значений) и разрезает в этой точке. Теперь параллелепипед разделен на два параллелепипеда меньшего размера, содержащих одинаковое количество пикселов.
-
Весь предыдущий процесс - отсечение пустых "краев" и разрезание самой длинной стороны в срединной точке - повторяется для двух меньших параллелепипедов. Теперь исходный куб разделен на четыре параллелепипеда, содержащих приблизительно одинаковое количество пикселов.
-
Медианное сечение повторно применяется для того, чтобы разделить куб на 8, 16, 32, 64, 128и 256 параллелепипедов (можно остановиться в любой момент, в зависимости от того, сколько цветов в палитре нужно получить). Они содержат примерно одно и то же количество пикселов.
-
Имея пространство, разделенное таким образом, легко выбрать палитру. Каждый из параллелепипедов содержит пикселы приблизительно одинакового цвета и центр каждого параллелепипеда представляет оптимальное значение цвета для палитры. Имея координаты вершин, очень просто вычислить координаты центральной точки. (Некоторые графические программы вместо того, чтобы вычислять центральную точку, усредняют значения всех пикселов находящихся внутри параллелепипеда; на вычисления уйдет больше времени, но полученная палитра будет лучше.)
Лекция 17,18 Форматы растровых файлов
Изображения можно хранить в растровом (как массив пикселов) или векторном виде
(как набор примитивов). Любой графический файл состоит из заголовка
и данных. В заголовке располагаются:
-
Идентификатор формата (первые несколько байт). Например, в формате BMP это - 2 символа 'BM' (BitMap), в формате GIF - GIF87a.
-
Тип данных (RGB или палитра, тип упаковки, кол-во битов на пиксел)
-
Размеры изображения
-
Дополнительные параметры (разрешение, строка описания и т.п.)
Далее располагается палитра (если она требуется) и массив пикселов. В некоторых форматах начало палитры и массива пикселов указывается в заголовке, в других - они следуют непосредственно после него.
Формат BMP
struct BMP_header
{
char ID[2]; // 'BM' для Windows BitMap
long FSize; // размер файла
long Ver; // версия BMP (=0)
long Image; // положение изображения в файле
long Misc; // должно быть 40
long Width; // ширина изображения
long Height; // высота изображения
short Num; // кол-во изображений (должно быть =1)
short Bits; // кол-во бит на пиксел
// 1 - монохромная (2 значения в палитре), 4,8 - палитра, 24 - RGB
long Comp; // Тип компрессии, 0 - несжатый, 1 - RLE8, 2 - RLE4
long ISize; // размер изображения в байтах
long XRes; // кол-во точек на метр вдоль оси X
long YRes; // кол-во точек на метр вдоль оси Y
long PSize; // Кол-во индексов палитры (16 или 256)
long PImportant; //Кол-во важных для отображения индексов палитры (0 - все важные)
}; // 54 bytes
Палитра находится сразу после заголовка.
FILE *ifile=fopen("имя", "rb");
BMP_header bmp_header;
fread (&bmp_header, sizeof(bmp_header), 1, ifile);
if (bmp_header.Bits==24)
{
fseek(ifile,bmp_header.Image, SEEK_SET);
line_size=(bitmap_width*3+3)&0xFFFFFFFC;
unsigned char *line=new unsigned char[line_size];
for(y=bitmap_height-1;y>=0;y--)
{
fread (line, line_size, 1, ifile);
for(x=0;x<bitmap_width;x++)
bitmap[y*bitmap_width+x]=(line[x*3+2]<<16)+(line[x*3+1]<<8)+(line[x*3+0]<<0);
}
delete line;
}
else
if (bmp_header.Bits==8)
{
long Palette[256];
fread(Palette,256*4,1,ifile);
fseek(ifile,bmp_header.Image, SEEK_SET);
line_size=(bitmap_width+3)&0xFFFFFFFC;
unsigned char *line=new unsigned char[line_size];
for(y=bitmap_height-1;y>=0;y--)
{
fread (line, line_size, 1, ifile);
for(x=0;x<bitmap_width;x++)
bitmap[y*bitmap_width+x]=Palette[line[x]];
}
delete line;
}