Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Министерство образования Украины000.doc
Скачиваний:
6
Добавлен:
23.02.2016
Размер:
1.91 Mб
Скачать

1.5 Алгоритми масштабування

Існують два стандартних алгоритму масштабування зображень, білінейна і бікубічеська інтерполяція. Оскільки колірні значення пікселів зазвичай обчислюються шляхом інтерполяції чотирьох сусідніх, зображення на виході виходить розмитим. Хоча це прийнятно для повнокольорових зображень, застосування інтерполяції веде до зниження контрастності (різкості на кордонах), і тому даний метод дає погані результати на зображеннях з індексованої палітрою.

Метод найближчого сусіда зберігає різкі кордону, але привносить в зображення ступінчастість (зокрема, діагональні лінії нагадують «драбинку» з квадратів). Таким чином, ідеальний алгоритм для збільшення піксельної графіки повинен інтерполювати області безперервного тону, зберігати чіткість для горизонтальних і вертикальних ліній і згладжувати (із застосуванням антиалиасинга) діагональні лінії і криві. Було зроблено кілька спроб вирішення цього завдання.

Ефективність:

Оскільки основна область застосування даних алгоритмів - це емулятори старих консольних і DOS'овскій ігор, багато хто з них розраховані на висновок динамічно змінюється зображення в реальному часі (при досить малому дозволі картинки на вході).

Багато алгоритми працюють тільки при збільшенні в ціле число разів: 2x, 3x і 4x.

Масштабування є однією з задач комп’ютерної графіки. Воно може використовуватися в системах прийняття рішень як попередній етап виділення контурів. За рахунок масштабування можливе досягнення згладжування контурів для полегшення їх знаходження.

Найбільш простий, а разом з тим і найбільш наочний з них полягає в наступному: до вихідного зображення застосовується алгоритм масштабування (зазвичай - зменшення), а потім застосовується зворотне масштабування, що повертає його в початковий розмір (відповідно - збільшення). Потім порівнюються вихідне зображення і модифіковане, і проводиться порівняння за декількома характеристиками.

Оберемо наступні характеристики:

1. коефіцієнт викривлення палітри - обчислюється як відношення різниці кількості кольорів вихідної і модифікованої палітри до кількості кольорів вихідної;

2. коефіцієнт викривлення пікселів - попіксельне порівняння двох зображень, у результаті якого знаходимо відсоток пікселів, що не збігаються;

3 .ступінь деформації зображення - проводиться контурний аналіз зображення, виділяються межі об'єктів і порівнюються безпосередньо межі (аналізується форма), результат - відсоток викривлення форми.

Для порівняння обрані алгоритми інтерполяції методом найближчого сусіда, білінійна інтерполяція, бікубічна інтерполяція, фільтр Ланцоша. Масштабування застосовувалося до зображення розміром 500х500 пікселів. Воно було зменшено в 4 рази, а потім відновлено різними алгоритмами. Приклад показаний на рис. 3, а також на таблиці 2.

Рис. 3 – а) оригінальне зображення; б) зменшене зображення; в) збільшення алгоритмом найближчого сусіда; г) збільшення з використання білінійної інтерполяції; д) збільшення з використанням бікубічної інтерполяції; е) використання фільтра Ланцоша

Алгоритм

Коефіцієнт викривлення палітри

Коефіцієнт викривлення пікселів

Ступінь деформації зображення

Інтерполяція методом найближчего сусіда

0.3

1.6

2.4

Білінійна інтерполяція

1.8

1.48

1.7

Бікубічна інтерполяція

1.3

1.3

1.3

Фільтр Ланцоша

1.1

1.15

1.06

Таблиця 2 – Порівняння алгоритмів масштабування

Проаналізувавши алгоритми за чисельними характеристиками, масштабування фільтром Ланцоша призводить до збереження більшої інформативності в порівнянні з іншими методами.

Алгоритми

EPX/Scale2x/AdvMAME2x:

EPX («Eric's Pixel eXpansion», піксельний збільшення Еріка) - алгоритм, розроблений Еріком Джонстоном з LucasArts приблизно в 1992 році , при портуванні движка SCUMM з IBM PC (дозвіл 320 × 200, 256 квітів) на перші кольорові комп'ютери Macintosh, де дозвіл було вище приблизно удвічі.

Алгоритм працює наступним чином:

A - \ 1

C P B - / 3 4

D

Якщо C == A => 1 = A

Якщо A == B => 2 = B

Якщо B == D => 4 = D

Якщо D == C => 3 = C

Якщо 3 або більше пікселів з A, B, C, D однакові: 1 = P, 2 = P, 3 = P, 4 = P

Наступні реалізації цього алгоритму (такі як AdvMAME2x і Scale2x, розроблені приблизно в 2001 році) мають іншу (більш ефективну), але функціонально ідентичну, реалізацію:

A - \ 1

C P B - / 3 4

D

1 = P; 2 = P; 3 = P; 4 = P;

Якщо C == A і C! = D і A! = B => 1 = A

Якщо A == B і A! = C і B! = D => 2 = B

Якщо B == D і B! = A і D! = C => 4 = D

Якщо D == C і D! = B і C! = A => 3 = C

AdvMAME4x/Scale4x - це просто двічі застосований EPX.

Scale3x/AdvMAME3x:

Алгоритм AdvMAME3x/Scale3x - не те ж саме, що EPX, але вони досить схожі між собою:

A B C - \ 1 2 3

D E F> 4 5 6

G H I - / 7 8 9

1 = E; 2 = E; 3 = E; 4 = E; 5 = E; 6 = E; 7 = E; 8 = E; 9 = E;

Якщо D == B і D! = H і B! = F => 1 = D

Якщо (D == B і D! = H і B! = F і E! = C) або (B == F і B! = D і F! = H і E! = A) => 2 = B

Якщо B == F і B! = D і F! = H => 3 = F

Якщо (H == D і H! = F і D! = B і E! = A) або (D == B і D! = H і B! = F і E! = G) => 4 = D

5 = E

Якщо (B == F і B! = D і F! = H і E! = I) або (F == H і F! = B і H! = D і E! = C) => 6 = F

Якщо H == D і H! = F і D! = B => 7 = D

Якщо (F == H і F! = B і H! = D і E! = G) або (H == D і H! = F і D! = B і E! = I) => 8 = H

Якщо F == H і F! = B і H! = D => 9 = F

Eagle Eagle:

Eagle Eagle працює таким чином: для кожного вхідного пиксела генерується 4 вихідних, спочатку кольори всіх чотирьох встановлюються в колір поточного сканованого пікселя (точно так само, як і в найближчому сусідові), далі проглядаються пікселі зверху і зліва, якщо вони однакового кольору (всі три ), то фарбуємо лівий верхній піксел в цей колір, виконуємо аналогічні дії для всіх чотирьох пікселів і рухаємося далі.

Спочатку: | Потім:

. . . - \ CC | S T U - \ 1 лютого

. C. - / CC | V C W - / 3 4

. . . | X Y Z

| Якщо V == S == T => 1 = S

| Якщо T == U == W => 2 = U

| Якщо V == X == Y => 3 = X

| Якщо W == Z == Y => 4 = Z

Таким чином, одиночний чорний піксел на білому фоні при застосуванні даного алгоритму розчиниться. Ця помилка виправлена ​​в алгоритмах 2xSaI і HQ3x.

2xSaI:

2xSaI, (2x Scale and Interpolation, дворазове збільшення і інтерполяція), є удосконаленням алгоритму Eagle. Був розроблений Дереком Ліау Кия Фа (Derek Liauw Kie Fa), також відомим як Kreed, спочатку для використання в емуляторах, де і понині є досить популярним алгоритмом. Багато популярних емулятори, такі як ZSNES, Jnes, DOSBox і VisualBoyAdvance, мають підтримку даного алгоритму виводу. Для використання алгоритму в не-GPL продуктах розробнику доведеться переписати його без використання коду, написаного Kreed.

Сімейство hqnx:

Максим Стьопін розробив алгоритми hq2x, hq3x і hq4x для збільшення в пропорціях 2:1, 3:1 і 4:1 відповідно. Колір кожного пікселя порівнюється з вісьмома сусідніми, сусіди позначаються як близькі й далекі, далі використовується пре-генерована таблиця для відшукання необхідного співвідношення значень для кожного з 4, 9 або 16 вихідних пікселів. Алгоритм hq3x відмінно згладжує діагональні лінії з нахилом ± 1:2, ± 1:1 і ± 2:1 (за умови відсутності антиалиасинга на вході алгоритму); лінії з іншим коефіцієнтом нахилу будуть представлені як ламані з вищезазначених діагональних. Добре згладжуються круті криві. На відміну від 2xSaI, до висновку застосовується антиалиасинг.

Зображення, збільшене в 3 рази методом найближчого сусіда

Зображення, отримане при використанні алгоритму hq3x.

Алгоритм в Паскалі:

При цьому перетворенні початок координат і напрямок осей старої і нової вісі координат однакова, але масштаб по осях різний.

Нехай відрізок одиничної довжини на вихідної вісі X стає відрізком довжини Sx на новій вісі Х ', а одиничний відрізок на колишній осі Y стає відрізком довжиною Sy на нової. Тоді точка (x, y) в колишній системі має координати (x * Sx, y * Sy) у новій системі. Перетворення масштабування виконуються за допомогою матриці масштабування.

Алгоритм Копф-Ліщинський:

Алгоритм розроблений в 2011 році і представлений на SIGGRAPH 2011. Перекладає піксельний зображення з невеликою кількістю квітів у векторну форму. Втім, якщо на зображенні є антіаліазінг, результати виходять гірше.

Застосування в емуляторах ігрових приставок:

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

Високооптимізовані алгоритми дають чітку і різку картинку з мінімальним розмиттям. Алгоритми масштабування піксельної графіки були реалізовані для безлічі емуляторів, 2D-ігрових движків і движків для ігор-переробок, наприклад, для AdvanceMAME, DOSBox, і ScummVM. Вони отримали високу оцінку серед геймерів, які стали переробляти гри,

написані в 80-х і 90-х. В даний час такі фільтри використовуються в комерційних емуляторах Xbox Live, Virtual Console, і PSN для того, щоб класичні ігри низького дозволу краще виглядали на дисплеях високого дозволу. До таких ігор належать Sonic's Ultimate Genesis Collection, Castlevania: The Dracula X Chronicles, Castlevania: Symphony of the Night, і Akumajō Dracula X Chi no Rondo .

Розділ 2. ПРАКТИЧНА ЧАСТИНА