hqx - hqx


В обработке изображений , HQX ( «высокое качество масштаба») является одним из алгоритмов масштабирования пикселей искусства , разработанных Maxim Степиным , используемых в эмуляторы , таких как Nestopia , FCEUX , Хиган , Snes9x , ZSNES и многое другое. Определены три фильтра hqx: hq2x , hq3x и hq4x , которые увеличиваются в 2, 3 и 4 раза соответственно. Для других коэффициентов увеличения этот фильтр используется с масштабированием ближайшего соседа .

Алгоритм

Сначала цвет каждого из 8 пикселей вокруг исходного пикселя сравнивается с цветом исходного пикселя. Формы обнаруживаются путем проверки пикселей схожего цвета в соответствии с пороговым значением. Это дает всего 2 8  = 256 комбинаций похожих или несходных соседей. Чтобы развернуть отдельный пиксель в блок пикселей 2 × 2, 3 × 3 или 4 × 4, расположение соседей ищется в предварительно определенной таблице, которая содержит необходимые шаблоны интерполяции.

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

Данные интерполяции в справочных таблицах ограничены требованием сохранения непрерывности линейных сегментов при оптимизации плавности. Создание этих таблиц поиска с 256 фильтрами происходит относительно медленно и является основным источником сложности алгоритма: этап рендеринга очень простой и быстрый, и его можно выполнять в реальном времени на процессоре с поддержкой MMX .

В исходном коде данные интерполяции представлены в виде макросов препроцессора, которые должны быть вставлены в операторы switch case , и отсутствует исходный код, приводящий к созданию таблицы поиска. Автор описывает процесс создания справочной таблицы как:

... для каждой комбинации должно быть определено наиболее вероятное векторное представление области, с сохранением идеи границ между разноцветными областями изображения, с направлением краев, которое должно быть как можно ближе к правильному . Это векторное представление затем растеризуется с более высоким (3-кратным) разрешением с использованием сглаживания, и результат сохраняется в справочной таблице.

Реализации

  • Исходный алгоритм был перенесен на DevIL (но сохранен на языке C).
  • Доступны порты на языки Java и C #. Эти реализации расширяют макросы.
  • C ++ порт по byuu, автор bsnes , который кодирует LUT в пространстве эффективным способом. Бюу использовал симметрию шаблонов для создания такой кодировки и написал несколько заметок по интерпретации исходных справочных таблиц.
  • libretro реализует два семейства шейдеров на Slang / HLSL , GLSL и Cg :
    • Семейство hqx , которое истинно hqx. Поскольку он работает на современных графических процессорах , таблицы поиска заменяются текстурами. Текстуры были сгенерированы путем опроса модифицированной версии hqx для ее переключателя / корпуса.
    • Семейство scalehq , которое часто путают с hqx. Это не связано с hqx, а скорее представляет собой общий алгоритм масштабирования-сглаживания.
  • hqx также был реализован в ffmpeg для увеличения изображения и видео в 2, 3 или 4 раза. Отчет о создании перевода для ffmpeg находится здесь: http://blog.pkh.me/p/19-butchering-hqx-scaling-filters.html и его использование может выглядеть примерно так: ffmpeg -i% 1 -filter_complex hqx = 2 hqx2-% 1 для создания 2-кратного изображения или видео.

Смотрите также

использованная литература

внешние ссылки