Лабораторная работа №2. Цветовые пространства. Преобразование цветовых пространств
1. Преобразовать изображение из RGB в оттенки серого. Реализовать два варианта формулы с учетом разных вкладов R, G и B в интенсивность (см. презентацию). Затем найти разность полученных полутоновых изображений. Построить гистограммы интенсивности после одного и второго преобразования.
2. Выделить из полноцветного изображения каждый из каналов R, G, B и вывести результат. Построить гистограмму по цветам (3 штуки).
3. Преобразовать изображение из RGB в HSV. Добавить возможность изменять значения оттенка, насыщенности и яркости. Результат сохранять в файл, предварительно преобразовав обратно.
Лабораторная работа №3. Растровые алгоритмы
1. Заливка и выделение границы.
-
1а. Рекурсивный алгоритм заливки на основе серий пикселов (линий) заданным цветом.
-
1б. Рекурсивный алгоритм заливки на основе серий пикселов (линий) рисунком из графического файла. Файл можно загрузить встроенными средствами и затем считывать точки изображения для использования в заливке. Рассмотреть случаи, когда файл небольшого размера и заливается циклически, и когда большой. Масштабировать не нужно. Область рисуется мышкой, произвольной формы. Внутри могут быть отверстия. Точка, с которой начинается заливка, задается щелчком мыши.
-
1в. Выделение границы связной области. На вход подается изображение. Граница связной области задается одним цветом. Имея начальную точку границы, организовать её обход, занося точки в список в порядке обхода. Начальную точку границы можно получать любым способом. Для контроля полученную границу прорисовать поверх исходного изображения.
2. Реализовать рисование отрезка: целочисленным алгоритмом Брезенхема и алгоритмом ВУ.
3. Выполнить градиентное окрашивание произвольного треугольника, у которого все три вершины разного цвета, используя алгоритм растеризации треугольника.
Лабораторная работа №4. Аффинные преобразования на плоскости и вспомогательные алгоритмы
- Создание полигонов через клики мышью. Точка и ребро считаются полигонами с одной и двумя вершинами соответственно.
- Очистка сцены (удаление всех полигонов).
- Применение аффинных преобразований к полигону (Все преобразования должны быть реализованы матрицами!):
- Смещение на dx, dy
- Поворот вокруг заданной пользователем точки
- Поворот вокруг своего центра
- Масштабирование относительно заданной пользователем точки
- Масштабирование относительно своего центра
- Поиск точки пересечения двух ребер (добавление второго ребра мышкой, динамически).
- Проверка принадлежит ли заданная пользователем (с помощью мыши) точка выпуклому и невыпуклому полигонам
- Классифицировать положение точки относительно ребра (справа или слева)