Professional Documents
Culture Documents
Зберігання та обробка растрових
Зберігання та обробка растрових
Зберігання та обробка растрових
2
127A127A2A
Запис на деякій мові програмування алгоритму RLE з урахуванням цих
обмежень нетривіальна.
■ Методи ентропійному компресії:
● LZW - zip-алгоритми
● Метод Хаффмана (спочатку збирає статистику по зображенню)
Кожній послідовності пікселів ставиться у відповідність бітова послідовність,
довжина якої обернено пропорційна частоті появи кольору / групи пікселів в
зображенні: чим частіше зустрічається елемент, тим коротше його код, і
навпаки. (Ми зчитуємо послідовно символи вхідного потоку і перевіряємо, чи
є у створеній нами таблиці рядків такий рядок. Якщо рядок є, то ми зчитуємо
наступний символ, а якщо рядки немає, то заносимо в потік код для
попередньої знайденої рядки, заносимо рядок в таблицю і починаємо пошук
знову. LZW реалізований в форматах GIF і TIFF.)
○ переваги
■ Економічна витрата пам'яті
■ Збереження точної інформації
○ недоліки
■ Складний доступ до даних
■ При зміні зображення може не вистачити пам'яті (?)
■ Неможливість регулювання ступеня стиснення
● Стиснення з втратами- відбуваються незначні зміни, непомітні людині. Всі алгоритми
цього класу використовують особливості людського зору. Однак існує поріг, після якого
зображення помітно втрачає якість.
○ переваги
■ Економічне витрачання пам'яті
■ Можливість регулювання ступеня стиснення
○ недоліки
■ Складний доступ до даних
Основні формати
● bmp
○ Використовує кілька способів зберігання кольору
○ Підтримує α-канал
○ Підтримує стиснення без втрат
○ підтримує палітри
● tiff
○ Більша глибина кольору
○ Підтримує кілька колірних моделей
○ Підтримує декілька методів колірної компресії (спочатку формат підтримував
стиснення без втрат, згодом формат був доповнений для підтримки стиснення з
втратами в форматі JPEG)
○ підтримує теги
● gif (Graphics interchange format)
○ Стиснення без втрат
○ Однобітний α-канал (без напівпрозорої)
○ Підтримує тільки 256-кольорову палітру
○ підтримує анімацію
○ Підтримує чересстрочную розгортку - дозволяє побачити картинку до повного
завантаження, яка проходить в чотири етапи:
3
■
○ Можна створювати GIF-зображення тільки за допомогою ліцензійного ПЗ Термін дії
останнього патенту на GIF закінчився 11 серпня 2006 року (с) ВП
● png (Portable network graphics)
○ Стиснення без втрат
○ Підтримує двовимірну і 4-х-рядкову розгортку
○ підтримує палітри
○ підтримує анімацію
○ підтримує теги
● jpeg
○ використовує для стиснення дискретно-косинусное перетворення (ДКП)
■ JPEG-LS - стиснення без втрат
■ JPEG-2000 - стиснення на основі вейвлетів
■ Стиснення з втратами
○ Добре підходить для фото, гірше для малюнків
○ Може зберігати службову інформацію (теги, інформацію про фотоапарат, умовах
зйомки і т.п.)
4
8. Фрактальное стиснення зображень. алгоритм Малла
алгоритм Малла- різновид дискретного вейвлет-перетворення.
Застосовується для попередньої обробки сигналу з метою зменшення
його інформаційної надмірності:
1 Вхідний набір даних розбивається на пари
2 Для кожної пари знаходиться різниця і сума
○ Різниця - ВЧ-фільтр (фіксує дрібні деталі)
○ Сума - НЧ-фільтр (фіксує великі зміни)
3 Алгоритм застосовується рекурсивно до масиву сум, а масив
різниць записується в результат.
Після виконання перетворення отриманий сигнал добре стискається
методом ентропійному компресії. Перетворення двовимірного сигналу
(наприклад, зображення) проводиться аналогічно.
Замість кольору пікселя зберігаємо номер методу передбачення (вибираємо найбільш точний) і
величину помилки. Якщо на зображенні мало деталей, то помилки також будуть малі. Після цього
можна:
● округлити похибки - отримаємо стиснення з втратами
● стиснути отриману послідовності as is - тоді втрат не буде
5
● діафрагма - ширина відкриття датчика
● витримка - час відкриття датчика
● експозиційна пара - сукупність діафрагми і витримки
● недоекспозиція - недолік світла
● переекспозиції - надлишок світла
Датчики як такі визначають тільки яскравість. Для визначення кольору перед ними ставляться
фільтри: один пропускає тільки зелене світло, інший - червоний і т.д.
Розташування датчиків (матриця Байєра):
Людина краще сприймає зелений, тому таких датчиків більше. Формат RAW
зберігає показники датчиків.
Колір білих тіл залежить від того, яке джерело їх висвітлює. Для правильної
передачі кольорів необхідно задавати колір джерела освітлення, а то будуть сині
особи. і червоні носи
Баланс білогозалежить від джерела освітлення, задається через колірну
температуру - це температура абсолютно чорного тіла, яке випромінює стільки світла. Якщо
нагріти абсолютно чорне тіло, то воно буде світитися, а якщо немає - то поглинати все промені.
Від температури залежить, якого кольору буде випромінювання. Примітно, що одним з найбільш
близьких до абсолютно чорного тіла об'єктів є Сонце.
6
Параметри шумів:
● амплітуда - величина відхилення сигналу від вірного значення.
● частота - показує, як часто з'являється шум у сигналі.
Методи придушення шумів:
● згладжування (Фільтрація по Гауса):
○ f(x, y) = ∑+N
i,j=−N g(x + i, y + j)M i+N,j+N
○ - матриця фільтрації розміру (2n +1) * (2n +1) показує вагу пікселя
поряд з x, y
g - вихідна інтенсивність
● Медіанна шумова фільтрація. Кольори сусідніх пікселів поміщаються в одновимірний
масив, упорядковано і вибирається середній (по положенню в списку).
○ Гідність: піксель приймає інтенсивність, яка реально присутній в його оточенні.
○ Недолік: дуже низька швидкість
● метод ДКП. При стисненні разом з деталями зникають і шуми.
● метод усереднення. Беремо кілька зображень; один і той же піксель на всіх зображеннях
буде відповідати одному і тому ж об'єкту, знаходимо середнє.
7
13. Бінаризація зображень. метод Оцу
бінарне зображення: На кожен піксель відводиться один біт (1 = білий, 0 = чорний)
Чорно-біле зображення: На кожен піксель відводиться кілька біт, які показують рівень яскравості.
Бінарні зображення використовуються в деяких пристроях введення-виведення, чорно-білі - при
завданні форми об'єктів (ч / б прозорість).
завдання бинаризации - переклад чорно-білого зображення в бінарне.
методи:
1 порогова бінаризація
Вхідне зображення задається інтенсивністю I (x, y). Вихідне зображення визначається як O
(x, y) = (I (x, y) <A? 0: 1). Значення порога А можна міняти, щоб отримати прийнятну
картинку: при підвищенні порога краще проглядаються яскраві деталі, при зниженні - темні.
2 метод Оцу.
HxW = кількість пікселів. Гістограма
яскравості показує, скільки яких пікселів
- темних і світлих. Значення порога t
автоматично вибирається так, щоб
зважена сума внутрішньогрупових
дисперсій була мінімальна.
Більш формально:
i = 0..max - яскравість
c (i) - кількість пікселів з яскравістю i
c(i)
pi = - ймовірність появи пікселя з яскравістю i
H⋅W
q1 (t) = ∑ti=0 pi - ймовірність появи пікселя темніше t
q2 (t) = ∑max
i=t+1 pi - ймовірність появи пікселя світліше t
i⋅pi
M1 (t) = ∑ti=0 ; - cредняя яскравість пікселів в групах.M2 (t) =
q1 (t)
i⋅pi
∑max
i=t+1 q2 (t)
∑ti=0 (i−M1 (t))2 pi
δ12 (t) = q1 (t)
; - дисперсія (величина розкиду середнього значення).δ22 (t) =
∑max
i=t+1 (i−M2 (t))2 pi
q2 (t)
8
тоді
t: δ12 (t)q1 (t) + δ22 (t)q2 (t) → min
3 Метод імені мене. Кожен піксель вхідного зображення випадковим чином замінюється на
чорний або білий, причому ймовірність вибору білого кольору залежить від яскравості
𝐼𝑥,𝑦
вихідного пікселя: 𝑝𝑥,𝑦 (белый) =
𝑚𝑎𝑥
9
for (x = xmin; x <xmax-1; x ++)
for (y = ymin; y <ymax-1; y ++)
{
if (I [x, y] <A)
{Out [x, y] = 0; E = I [x, y]; }
else
{Out [x, y] = 1; E = I [x, y] -Imax; }
I [x + 1, y] + = E * 3/8;
I [x, y + 1] + = E * 3/8;
I [x + 1, y + 1] + = E / 4;
}
в n-вимірному:
На другому малюнку синя закарлюка: вбиваємо контрастність в світлих і темних областях, але
додаємо в середніх.
постерізация - відсутність плавних переходів після обробки.
Деякі можливості кривих можна задавати трьома Цей спосіб завдання називається Levels
параметрами: (рівні).
А - точка чорного Більш складний випадок:
В - точка білого А1 - вихід точки чорного
С - точка півтонів В1 - вихід точки білого
12
18. Нерівномірний вирівнювання гістограми. Тональна і колірна
корекція. Робота зі світлами і тінями
Кривих тепер недостатньо. Коригується тільки частина пікселів (наприклад, хочемо освітлити
якусь темну область). Вхідні параметри:
● тональний діапазон (ширина) в% - та частина діапазону, яку ми вважаємо тінями
(світлами)
● радіус в пікселах
● ступінь впливу: Наскільки будемо освітлювати тіні / затемнювати світла.
Піксель буде затемнюватися (освітлюватися) на зазначену ступінь, якщо виконуються обидві
умови:
1 Його яскравість потрапляє в задану тональну ширину
2 В його оточенні заданого радіуса присутня достатня кількість пікселів, які теж потрапляють
в задану тональну ширину.
Колірна корекція
C допомогою кривих кожен компонент кольору (R, G, B) може оброблятися незалежно. Щоб
зберегти природність кольорів, криві треба задавати узгоджено. Існують кольору, зміна яких
найбільш сильно помітно людині: колір шкіри і сірий колір. В RAW камера автоматично виконує
колірну корекцію.
Приклад (Катя). Розкидаємо зображення на шари (світла в окремий шар, тіні в окремий),
виробляємо корекцію окремо по шарах.
По-моєму, малося на увазі до цьому зображенню додати шар-маску, для якого
провести корекцію кольору і світла, тому що не бачу я інструменту виділення тіні і
світла як шар.
13
Якщо промені, що йдуть від однієї точки об'єкта, не сходяться в одній точці світлочутливої матриці
камери, то зображення виходить розмитим. Після того, як знімок зроблений, фізично виправити це
вже не можна, однак можна імітувати підвищення різкості шляхом підвищення контрасту на
кордонах об'єктів:
Розглянемо спочатку одновимірний випадок. Нехай f (x) - дискретно задана функція, яка визначає
яскравість пікселя з цілої координатою X. Визначимо дискретну похідну як
1
fx′ (x) = (f(x + 1) − f(x − 1))
2
Відповідно, друга похідна - похідна першої похідної - матиме вигляд:
1 1 1 1
fx′′ (x) = (fx′ (x + 1) − fx′ (x − 1)) = f(x + 2) − f(x) + f(x − 2)
2 4 2 4
У загальному вигляді дискретну похідну можна уявити як суму
(n)
fx (x) = ∑ni=−n ωi f(x + i)
де
w- матриця коефіцієнтів (ваг):
○ для:fx′ (x) w = (−0.5; 0; 0.5)
14
○ для:fx′′ (x) w = (0.25; 0; −0.5; 0; 0.25)
1
∂f
(x, y) = ω1 fx′ (x, y − 1) + ω2 fx′ (x, y) + ω3 fx′ (x, y + 1) = ∑ Mi,j f(x + i, y + j)
∂x
i,j=−1
1
∂f
(x, y) = ω1 fy′ (x − 1, y) + ω2 fy′ (x, y) + ω3 fy′ (x + 1, y) = ∑ Mi,j f(x + i, y + j)
∂y
i,j=−1
де
M - матриця ваг. При вона матиме вигляд:ω1 = ω2 = ω3 = 1/3
∂f
○ для:∂x
∂f
○ для:∂y
15
Крім того, можна збільшити вагу пікселів тієї ж рядки (стовпці) для зменшення ефекту
згладжування (маска Собеля):
Щоб не розривати читачеві шаблон, Її можна представити у вигляді матриці 3х3, в якій перший
рядок і стовпець - нульові. Як центральний елемент можна використовувати, наприклад, лівий
верхній. Завдяки меншому розміру працює швидше, ніж маски Собеля / Превітта.
Використовуючи одну з цих масок, можна знайти частинні похідні і в кожній точці зображення, а
значить і вектор градієнта - він показує, наскільки різко змінюється яскравість в точці. За його
∂f ∂f ∂f ∂f
модулю можна визначити, чи є піксель граничним чи ні: ∇f =( , )
∂x ∂y ∂x ∂y
● в точках високого локального контрасту:
○ |∇f| має велике значення;
○ ∇∇f змінює знак, якщо досягає свого екстремуму|∇f|
● в точках низького локального контрасту:
○ перша похідна має мале значення (або 0).
Використання лог-фільтра. Для кожного пікселя робимо два розмиття: маленьке і велике, і
беремо різницю між цими значеннями.
x2 x2 x2
− − −
2σ2 2σ2
f(x) = ce c-радіус згладжування. Лог-фільтр для одновимірного випадку:L(x) = c1 e
2σ2 1 − c2 e 2
випадок відрізків
Шукаємо відрізки, які починаються в (0,0). Для кожного пікселя
зображення дивимося, якщо значення більше деякого порога, то він
потенційно лежить на відрізку, який закінчується в (a, b). Збільшуємо
всі елементи масиву А, які відповідають прямим, через які може
проходити даний піксель. В результаті ті значення (a, b), для яких в
матриці A знаходяться значення, великі деякого порога, будуть
характеризувати найімовірніші примітиви.
17
Яке рівняння краще використовувати для завдання прямої?
● y = kx + b - не дозволяє описати вертикальну пряму.
● ax + by + c = 0 - тут три параметра, багато.
● xcosα + ysinα = d - два параметра, нормально. α-кут, d-відстань.
Знаючи градієнт і α, можемо знайти d.
проблеми:
● Може бути дуже великий масив А
● Ефективність залежить від того, яким чином задано рівняння примітиву, тобто скільки
параметрів у векторі р.
● Для одного (x, y) знаходимо безліч (a, b)
випадок окружності
Окружність задається параметрами (a, b, r): (a, b) - центр, r - радіус.
Знаходимо градієнт в граничної точці. Його напрямок збігається з
напрямком r, значить на цій прямій десь лежить центр кола. Перебираємо
всі можливі значення радіуса, отримуємо набір значень (a, b, r) і
збільшуємо елементи масиву А, розташовані по цих координатах.
18
● Методи, які використовують кластеризацию
○ Визначається метрика P (x, y), що показує схожість
квітів x і y.
○ Безліч всіх кольорів, наявних на зображенні,
розбивається на кілька непересічних підмножин -
кластерів - так, щоб "відстань" між будь-якими двома
елементами одного кластера було набагато менше, ніж
відстань між елементами різних кластерів.
○ Геометрично точки одного кластера можуть
перебувати в різних частинах зображення
● Методи нарощування областей
○ Створюється новий кластер, що містить одну базову
точку
до сегментації
○ У кластер додаються всі сусідні до базової точці, схожі
з нею за кольором
○ Процедура повторюється рекурсивно з доданими
точками
○ модифікації:
■ Порівнювати кольору з сусідніми точками
■ Порівнювати кольору з базовою точкою
■ Порівнювати з середнім значенням кольору в
накопиченому кластері (важливо, з якого пікселя
починається пошук)
після сегментації
● метод вододілу
Градієнт яскравості / кольору ∇ f показує ступінь межовості
пікселя, ∇ ∇ f - напрямок, в якому швидше за все зростає
ступінь межовості. Беремо деякий піксель, обчислюємо ∇ ∇ f в
ньому і рухаємося в протилежному напрямку до пікселя, в
якому буде мінімальне значення ∇ ∇ f. Якщо ∇ ∇ f = 0, то (ми
досягли локального екстремуму градієнта) піксель утворює
окремий сегмент, інакше він належить сегменту,
розташованому в напрямку, протилежному ∇ ∇ f.
19
Результат зберігається у вигляді дерева. На прикладі два
сегмента 0 і 1.
3 кодування кордонів. У сегмента межа замкнута, ⇒ можна її
обійти по (проти) годинниковою стрілкою. Зберігаються
координати початкової точки і закодований шлях обходу (← ↑
→ ↓). Використовується мало пам'яті, але незручно
працювати.
21
Інакше - всередині, робимо крок вгору.
Крок - це x ++ і y ++, при цьому перераховуємо f (x, y).
При малюванні еліпса необхідно множити x або y на деякий коефіцієнт. До точки дотику еліпса з
дотичній 45 ° крок робиться по діагоналі, або по горизонталі, а після - по горизонталі або по
вертикалі.
отрісовка дуг
Задаються: центр, радіус R, α і β. Для кожного октанта
промальовується частина дуги, яка потрапляє в цей октант. Як
перевірити, чи потрапляє піксель в октант? Можна знайти
точки Z, і якщо піксель потрапляє в проміжок між ними, то він
потрапляє в октант.
Алгоритм де Костельжо
22
Завдання: побудувати криву P (t) по ламаній P0 ... Pn.
Спочатку беремо t * = ⅓ і ділимо в такому ставленні
кожна ланка ламаної. Отримані точки з'єднуємо і
отримуємо нову ламану, ступінь якої менше ступеня
вихідної ламаної на 1. Повторюємо процес, поки
ступінь не стане дорівнює одиниці, тобто поки
ламаного виродиться в точку. Ця точка буде належати
кривої Безьє.
Далі беремо t * = ½ і повторюємо алгоритм, і так далі,
поки t * Не зіллється з P0 (із заданою точністю)
Вікіпедія: отримані в процесі побудови проміжні точки є
опорними точками для двох нових кривих Безьє, в
точності збігаються з вихідної, і в сукупності дають
вихідну криву Безьє.
NURBS - раціональні криві Безьє. Для кожної точки вводиться ще й вага (може бути і негативним).
Він показує, наскільки точка "притягує" до себе криву. У цьому випадку крива задається: -
∑n ωi Pi Bn
i (t)
многочлен Берштейна.P(t) = i=0
∑n
; Bin = Cin t i (1 − t)n
i=0 ωi Bn
i (t)
У звичайній кривій Безьє все w = 1.
23
29. Алгоритми заповнення довільних областей
оптимізація методу
При перевірці рядка над / під поточної все її пікселі перевіряються на
приналежність кордоні:
● Якщо граничних точок немає, то в стек додається одна
(довільна) точка з перевіряється рядки.
● Якщо граничні точки є, то вони розбивають рядок на підрядка,
від кожної з яких в стек додається по одній точці.
В обох випадках додаються точки повинні бути незафарбованими.
немонотонна зафарбування
Колір кожного пікселя визначається деякою функцією f (x, y, c), де х, у - координати, з - колір.
● Якщо f ≡ const, то це монотонна зафарбування.
● якщо c ≠ const, то це - коригування заливки, а не заливка.
Наприклад, ефект градієнта полягає в закраске декількох точок заданими кольорами, а кольори
решти пікселів знаходяться аппроксимацией цих заданих кольорів.
24
Накладання текстури тісно пов'язане із завданням інтерполяції, тому що колір одного пікселя може
визначатися виходячи з декількох сусідніх пікселів.
Якщо координати (i, j) лінійно залежать від (x, y), то задача обчислення текстурних координат
може бути оптимізована за допомогою инкрементной реалізації: якщо точці (x, y) відповідає точка
(i, j), то
∂i ∂j
● точці буде відповідати (x ± 1, y)(i ± ∂x , j ± ∂x)
∂i ∂j
● точці буде відповідати (x, y ± 1)(i ± ∂y , j ± ∂y)
де
∂i ∂i ∂j ∂j
- приватні похідні від функцій, що зв'язують (x, y) і (i, j).∂x , ∂y , ∂x , ∂y
25
○ векторний: Літери складаються з гліфів. Гліф - це елемент символу. Гліфи бувають
простими (зафарбований примітив, межа якого - крива Безьє) і складовими (є
комбінацією простих або складених). Векторні шрифти мають ті ж переваги і
недоліки, що і векторні зображення: більше образотворчих можливостей, але
складніше отрисовка. Отрісовка зводиться до малювання кривих Безьє і
зафарбовування примітивів. Хінтінг - це підпрограми, які зберігаються разом з
шрифтом і коректують параметри гліфів при значному масштабування. Наприклад,
при збільшенні букви Ц в 20 разів горизонтальна лінія повинна зростати швидше, ніж
вертикальні.
завдання растеризации
● Вхід: напис, шрифт, кодування, координати
● Вихід: растр
Завдання відсікання полягає в тому, щоб створити клас алгоритмів, які приймають на вхід
параметри відтинає фігури і примітиву і визначають, чи видно примітив чи ні, а якщо видно
частково - то яка саме частина видна. Найпростіше рішення - при відображенні кожного пікселя
перевіряти, чи виходить він за межі, але це дуже повільно.
Параметри відсікання:
● Відсікає фігура (примітив, який малюємо)
● Відсікає фігура (примітив, який задає видиму частину; вікно видимості)
● Вид відсікання:
○ Зовнішнє - залишаємо все, що поза відтинає фігури.
26
33. Алгоритм Сазерленда-Коена
недоліки:
● При обчисленні точки перетину відрізка і прямий використовується повільна речова
арифметика
● У деяких випадках для отримання відповіді потрібно кілька ітерацій
27
переваги:
● Використовується тільки целочисленная арифметика (поділ на два реалізується як
зрушення вправо на один біт).
недоліки:
● Велика кількість ітерацій.
28
37. Алгоритм Кірус-Бека
Продовжує ідею алгоритму Ліанга-Барські для вікна видимості у вигляді опуклого багатокутника з
вершинами F1 ... Fn, розташованими за годинниковою стрілкою.
Заснований на параметричному представленні
відрізка. Будуємо n нерівностей Pit≤Qi для n-
кутника.
Розглянемо i-ю сторону: [Fi, Fi + 1].
Знаходимо внутрішню нормаль Ni.
(Ni, FiFi + 1) = 0
nx (xi + 1-xi) + ny (yi + 1-yi) = 0
Покладемо nx = 1; ny = (xi-xi + 1) / (yi + 1-yi).
(Знаменник може бути 0, якщо межа
горизонтальна, нормаль вертикальна).
29
У кожного ребра може бути чотири стану:
● ребро мабуть
● Ребро виходить з області видимості
● ребро невидимо
● Ребро входить в зону видимості.
На кожному кроці розглядаємо Pi-1, Pi. S - остання
додана в результат вершина. Якщо [S, Pi] повністю
мабуть, додаємо Pi в результат, S = Pi. (P1P2 -
повністю мабуть).
Якщо відрізок виходить, точку перетину (A) додаємо як S. (P2P3).
Якщо ребро невидимо, нічого не додаємо (P3P4).
Якщо ребро входить, додаємо і точку перетину (B), і кінець ребра (P4, P5).
Так йдемо до кінця.
30