Автор: Пользователь скрыл имя, 18 Октября 2011 в 01:13, курс лекций
Работа содержит лекции по дисциплине "Компьютерная графика".
Второй
алгоритм Байера. Применяется в основном
для получения черно-белых
Ее размер определяется кол-вом битов, исходного изображения. Сколько бит в его глубине цвета, столько элементов должно быть в матрице. Например, если оно имеет 16 цветов, то достаточно матрицы 4х4, если 256 – 16х16.
Затем значение яркости пиксела сравнивается со значением в матрице и если яркость больше – пиксел подсвечивается, если меньше – то нет (I=(I < matrix[x % 8][y % 8]) ? 0 : 0xFF).
Этот
алгоритм просто вносит некоторые ошибки
в изображение, но за счет этого оно
выглядит лучше. Например, если оно имеет
среднюю яркость, то подсветится половина
пикселов на этом участке, чем больше будет
яркость – тем больше их будет подсвечено
и тем ярче будет казаться эта область
наблюдателю. Одним из недостатков является
то, что кол-во бит должно быть кратно 2-м
(2,4,6,8) и то, что на полученном изображении
можно выделить четкую сетку.
Палитры и оптимизация палитр.
Одним
из вариантов представления
Существует
проблема выбора цветовой палитры, с
помощью которой можно
Самый простой подход заключается в том, чтобы, перебрав все пикселы в картинке, посчитать сколько раз встречается каждый цвет и составить палитру из тех цветов, которые встречаются чаще других. Если некоторый оттенок синего цвета встречается 100 раз, а оттенок красного только 20, то, очевидно, предпочтение отдается синему цвету. Но этот метод имеет несколько недостатков.
Один
из них заключается в том, что
некоторые цвета будут
Представьте себе картинку с загородной дорогой, где преобладают синие, коричневые, желтые, зеленые тона, и где-то в одном углу оказался маленький красный, дорожный знак "стоп". Если красный цвет более нигде на этой картинке не встречается, то он не попадет в палитру, и, следовательно, "кирпич" будет окрашен в какой-то другой цвет.
Возможно, лучше было бы выбрать комплект цветов для палитры с равномерно распределенными красной, зеленой и синей компонентами. Такой подход обеспечивает широкий выбор цветов, но при этом не учитывается тот факт, что в большинстве картинок нет равномерного цветового распределения. А "кирпич" хотелось бы отчетливо показать, не утратив ничего в тонких оттенках неба, деревьев и дороги.
Другое решение проблемы - это метод квантования цветов медианным сечением. Цветовое пространство рассматривается как трехмерный куб. Каждая ось куба соответствует одному из трех основных цветов: красному, зеленому или синему. Если отметить точки внутри куба, соответствующие цветам пикселов в обычном полноцветном изображении, то точки будут не равномерно разбросаны по всему кубу, очевидна тенденция группирования точек в отдельных регионах.
Метод медианного сечения делит куб на набор (256) параллелепипедов, каждый из которых содержит примерно одинаковое количество пикселов. При таком разбиении куба центральная точка каждого параллелепипеда представляет оптимальный выбор для цветовой палитры. И в самом деле, в той области куба, которая густо заполнена точками, будет больше параллелепипедов и, соответственно, в палитру попадет больше цветов.
А там, где точек меньше, оттуда и цветов будет взято меньше. Ни один цвет не будет отброшен полностью. Тем же цветам, которые встречаются чаще, будет отдано предпочтение. Обратимся еще раз к примеру с загородной дорогой.
Цвета в палитре, полученной медианным сечением, будут концентрироваться вокруг синего, коричневого, желтого и зеленого, но по крайней мере найдется один оттенок с достаточной красной компонентой, чтобы аппроксимировать цвет знака "стоп".
Метод квантования цветов медианным сечением.
Лекция
17,18
Форматы
растровых файлов
Изображения можно хранить в растровом (как массив пикселов) или векторном виде
(как набор примитивов). Любой графический файл состоит из заголовка
и данных. В заголовке располагаются:
Далее располагается
палитра (если она требуется) и массив
пикселов. В некоторых форматах начало
палитры и массива пикселов указывается
в заголовке, в других - они следуют непосредственно
после него.
Формат 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_
line_size=(bitmap_
unsigned char *line=new unsigned char[line_size];
for(y=bitmap_
{
fread (line, line_size, 1, ifile);
for(x=0;x<
bitmap
}
delete line;
}
else
if (bmp_header.Bits==8)
{
long Palette[256];
fread(Palette,256*
fseek(ifile,bmp_
line_size=(bitmap_
unsigned char *line=new unsigned char[line_size];
for(y=bitmap_
{
fread (line, line_size, 1, ifile);
for(x=0;x<
bitmap
}
delete line;
}
Память, необходимая для хранения растрового изображения, вычисляется, как произведение его ширины на высоту и на количество бит на пиксел. К примеру, для хранения RGB фотографии 800 на 600 пикселей нужно примерно 1.4 мегабайта. Для ее передачи по internet c скоростью полтора килобайта (14400) в секунду нужно около 15 минут – т.е. довольно большое время. Или, к примеру, на хранение часового фильма, в котором 30 таких кадров в секунду, нужно 150 гигабайт. Таким образом, алгоритмы архивации информации, ориентированные на изображения, весьма актуальны.
Все алгоритмы
сжатия изображений делятся на два
класса: с потерей качества и без
нее. В случае алгоритмов без потери
качества, мы требуем полное побитовое
соответствие сжатого и исходного
изображений. В случае с потерей
качества, мы жертвуем некоторой частью
информации, в обмен на более сильную степень
компрессии. Декомпрессированное изображение
уже не будет полностью соответствовать
исходному, однако часто человеческий
глаз этого даже и не заметит.
Для того
чтобы корректно оценивать степень
сжатия, нужно разделить изображения на
несколько типов.