WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
Изображение, увеличенное при помощи метода ближайшего соседа (слева) и 2xSaI (справа).

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

Причины появления

Существуют два стандартных алгоритма масштабирования изображений, билинейная и бикубическая интерполяция. Поскольку цветовые координаты текущего пикселя обычно вычисляются путём интерполяции четырёх соседних, обработанное изображение получается размытым. Хотя это приемлемо для полноцветных изображений, применение интерполяции ведет к снижению контрастности (резкости на границах), и, поэтому, данный метод дает плохие результаты на изображениях с индексированной палитрой.

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

Эффективность

Поскольку основная область применения данных алгоритмов — это эмуляторы старых консольных и DOS’овских игр, многие из них рассчитаны на вывод динамически изменяющегося изображения в реальном времени (при достаточно малом разрешении картинки на входе).

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

Алгоритмы

EPX/Scale2x/AdvMAME2x

EPX («Eric’s Pixel eXpansion», пиксельное увеличение Эрика) — алгоритм, разработанный Эриком Джонстоном из LucasArts приблизительно в 1992 году[1], при портировании движка SCUMM с IBM PC (разрешение 320×200, 256 цветов) на первые цветные компьютеры Macintosh, где разрешение было выше примерно вдвое[2].

Алгоритм работает следующим образом:

  A    --\ 1 2
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 2
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 работает следующим образом: для каждого входного пиксела генерируется 4 выходных, первоначально цвета всех четырех устанавливаются в цвет текущего сканируемого пикселя (точно так же, как и в ближайшем соседе), дальше просматриваются пикселы сверху и слева, если они одинакового цвета (все три), то красим левый верхний пиксел в этот цвет, выполняем аналогичные действия для всех четырех пикселей и двигаемся дальше[3]»

.

Сначала:      |Затем: 
. . . --\ CC  |S T U  --\ 1 2
. 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, имеют поддержку данного алгоритма вывода.

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

Super 2xSaI и Super Eagle

Матрица окружающих пикселей, которые использует Super2xSaI для масштабирования одного пиксела.

Немного модифицированные реализации имеют названия «Super 2xSaI», «2xSaI», и «Super Eagle».

Super Eagle написан Kreed’ом, аналогичен 2XSaI, но на выходе получается более сильное смешение цветов пикселей (блендинг).

Super 2xSaI написан Kreed’ом, фильтр для сглаживания графики, но с более сильным блендингом, чем в Super Eagle.

Семейство hqnx

Максим Степин разработал алгоритмы hq2x, hq3x и hq4x для увеличения в пропорциях 2:1, 3:1 и 4:1 соответственно. Цвет каждого пиксела сравнивается с восемью соседними, соседи помечаются как ближние и дальние, далее используется прегенерированная таблица для отыскания необходимого соотношения значений для каждого из 4, 9 или 16 выходных пикселей. Алгоритм hq3x отлично сглаживает диагональные линии с наклоном ±1:2, ±1:1 и ±2:1 (при условии отсутствия антиалиасинга на входе алгоритма); линии с другим коэффициентом наклона будут представлены как ломаные из вышеупомянутых диагональных. Хорошо сглаживаются крутые кривые. В отличие от 2xSaI, к выводу применяется антиалиасинг[4].

Изображение, увеличенное в 3 раза методом ближайшего соседа.
Изображение, полученное при использовании алгоритма hq3x.

hqnx был изначально придуман для эмулятора Super Nintendo, ZSNES.

Алгоритм Копфа-Лищински

Алгоритм разработан в 2011 году и представлен на SIGGRAPH 2011[5]. Переводит пиксельное изображение с небольшим количеством цветов в векторную форму. Впрочем, если на картинке есть антиалиасинг, результаты получаются хуже.

Применение в эмуляторах игровых приставок

На достаточно быстрых компьютерах данные алгоритмы позволяют реализовать вывод масштабированного изображения, по скорости приемлемый для приложений реального времени, в частности, компьютерных игр. Высокооптимизированные алгоритмы дают четкую и резкую картинку с минимальным размытием. Алгоритмы масштабирования пиксельной графики были реализованы для множества эмуляторов, 2D-игровых движков и движков для игр-переделок, например, для AdvanceMAME, DOSBox, и ScummVM. Они получили высокую оценку среди геймеров, которые стали переделывать игры, написанные в 80-х и 90-х. В настоящее время (2013 г.) такие фильтры используются в коммерческих эмуляторах 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'.

Примечания

  1. Indiana Jones and the Fate of Atlantis (PNG screenshot). Архивировано 11 апреля 2012 года.
  2. Thomas, Kas Fast Blit Strategies: A Mac Programmer's Guide (1999). Архивировано 11 апреля 2012 года.
  3. Eagle (idea). Everything2 (18 января 2007). Архивировано 11 апреля 2012 года.
  4. Stepin, Maxim hq3x Magnification Filter. Проверено 3 июля 2007. Архивировано 8 февраля 2008 года.
  5. Depixelizing Pixel Art

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

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

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии