Компьютерная графика: растр, вектор, цветовые модели

Отличия растровой и векторной графики, разрешение и глубина цвета, модели RGB, CMYK и HSV, сжатие с потерями и без, алгоритмы растеризации и преобразования.

Курсовая по компьютерной графике обычно состоит из теоретической части о представлении изображений и практической — реализации алгоритма построения или преобразования. Разберём базу для обеих.

Растр или вектор

ПризнакРастроваяВекторная
Что хранитсяМассив пикселей с цветамиФормулы и координаты объектов
МасштабированиеТеряет качествоБез потерь
Размер файлаЗависит от разрешенияЗависит от числа объектов
ФотографииПодходитНе подходит
Чертежи и логотипыПлохоИдеально
ФорматыJPEG, PNG, BMP, TIFFSVG, AI, DXF, EPS
Где применяютФото, текстуры, сканыСАПР, полиграфия, интерфейсы
Объём несжатого растрового изображения:

  V = ширина · высота · глубина_цвета / 8   [байт]

Пример: 1920 × 1080, 24 бита на пиксель
  V = 1920 · 1080 · 24 / 8 = 6 220 800 байт ≈ 5,93 МБ

С альфа-каналом (32 бита) — 7,91 МБ

Разрешение и глубина цвета

ГлубинаЧисло цветовПрименение
1 бит2Штриховые изображения, факс
8 бит256Индексированная палитра, GIF
16 бит65 536High Color, устаревший режим
24 бита16,7 млнTrue Color — стандарт
32 бита16,7 млн + прозрачностьГрафика с альфа-каналом
48 битПо 16 бит на каналПрофессиональная обработка фото

Разрешение печати измеряют в dpi: для качественной печати нужно 300 dpi, для экрана достаточно 72-96 ppi. Отсюда пересчёт: чтобы напечатать снимок 10 × 15 см с качеством 300 dpi, нужен файл примерно 1200 × 1800 пикселей.

Цветовые модели

МодельТипКомпонентыГде применяется
RGBАддитивнаяКрасный, зелёный, синийЭкраны, камеры
CMYKСубтрактивнаяГолубой, пурпурный, жёлтый, чёрныйПечать
HSV / HSBПерцептивнаяТон, насыщенность, яркостьИнтерфейсы выбора цвета
LabАппаратно-независимаяСветлота и две хроматические осиПреобразование между моделями
GrayscaleОдноканальнаяЯркостьОбработка, распознавание
Перевод в оттенки серого с учётом чувствительности глаза:

  Y = 0,299·R + 0,587·G + 0,114·B

Простое усреднение (R+G+B)/3 даёт заметно худший результат:
зелёный воспринимается ярче синего почти в пять раз.

RGB в HSV:
  V = max(R,G,B)
  S = (max − min)/max
  H вычисляется по тому, какой канал максимален
RGB и CMYK охватывают разные диапазоны цветов, поэтому насыщенный синий с экрана невозможно точно напечатать. Это объясняет расхождение между макетом на мониторе и оттиском — обязательный пункт в курсовой по допечатной подготовке.

Сжатие

Алгоритмы растеризации

def bresenham_line(x0, y0, x1, y1):
    """Алгоритм Брезенхема: только целочисленная арифметика."""
    points = []
    dx, dy = abs(x1 - x0), abs(y1 - y0)
    sx = 1 if x0 < x1 else -1
    sy = 1 if y0 < y1 else -1
    err = dx - dy

    while True:
        points.append((x0, y0))
        if x0 == x1 and y0 == y1:
            break
        e2 = 2 * err
        if e2 > -dy:
            err -= dy
            x0 += sx
        if e2 < dx:
            err += dx
            y0 += sy
    return points

def bresenham_circle(xc, yc, r):
    """Окружность: считаем 1/8 и отражаем по симметрии."""
    points = []
    x, y = 0, r
    d = 3 - 2 * r
    while x <= y:
        for px, py in [(x,y),(y,x),(-x,y),(-y,x),(x,-y),(y,-x),(-x,-y),(-y,-x)]:
            points.append((xc + px, yc + py))
        if d < 0:
            d += 4 * x + 6
        else:
            d += 4 * (x - y) + 10
            y -= 1
        x += 1
    return points

Ценность Брезенхема — отказ от вычислений с плавающей точкой: только сложение и сравнение целых чисел. Именно поэтому алгоритм 1962 года до сих пор реализован в графических ускорителях.

Аффинные преобразования

Однородные координаты позволяют записать все преобразования матрицами 3×3:

  Перенос:      | 1  0  tx |     Масштаб:  | sx  0  0 |
                | 0  1  ty |               | 0  sy  0 |
                | 0  0   1 |               | 0   0  1 |

  Поворот на φ: | cos φ  −sin φ  0 |
                | sin φ   cos φ  0 |
                |   0       0    1 |

Композиция преобразований = произведение матриц.
Порядок важен: поворот с последующим переносом ≠ перенос с поворотом.
Поворот вокруг произвольной точки складывается из трёх операций: перенос центра в начало координат, поворот, обратный перенос. Забытый обратный перенос — самая частая ошибка в практической части.

Сглаживание и фильтры

Что делают в практической части

  1. Реализовать алгоритм построения примитива: линии, окружности, заливки области.
  2. Реализовать аффинные преобразования объекта с интерактивным управлением.
  3. Написать фильтр обработки изображения и сравнить результат с исходником.
  4. Построить гистограмму яркости и выполнить её выравнивание.
  5. Реализовать перевод между цветовыми моделями и проверить обратимость.
  6. Замерить время работы и сравнить с библиотечной реализацией.

Частые вопросы

Почему JPEG не подходит для скриншотов?

Алгоритм отбрасывает высокочастотные составляющие, а резкие границы текста как раз ими и образованы. Вокруг букв появляется ореол. PNG сжимает без потерь и для скриншотов даёт файл меньше и качество лучше.

Зачем в CMYK чёрный, если его можно смешать?

Смешение трёх красок даёт грязно-коричневый, расходует втрое больше краски и размачивает бумагу. Отдельная чёрная краска даёт настоящий чёрный и делает печать текста дешевле.

Что такое однородные координаты и зачем они нужны?

Добавление третьей координаты позволяет выразить перенос матричным умножением, а не сложением. Благодаря этому любую цепочку преобразований можно свернуть в одну матрицу и применить за одну операцию.

Читайте также

Сделаем работу по этой теме

Опишите задачу — ответим в течение 15 минут в личных сообщениях ВКонтакте, назовём срок и цену. Предоплаты за оценку нет.

  • Оценка заявки бесплатно
  • Правки по замечаниям преподавателя
  • Работы по всем техническим и IT-дисциплинам

Нажимая кнопку, вы соглашаетесь на обработку указанных данных для ответа на заявку.