hqx - hqx
В обработке изображений , HQX ( «высокое качество масштаба») является одним из алгоритмов масштабирования пикселей искусства , разработанных Maxim Степиным , используемых в эмуляторы , таких как Nestopia , FCEUX , Хиган , Snes9x , ZSNES и многое другое. Определены три фильтра hqx: hq2x , hq3x и hq4x , которые увеличиваются в 2, 3 и 4 раза соответственно. Для других коэффициентов увеличения этот фильтр используется с масштабированием ближайшего соседа .
Изображение увеличено в 3 раза с интерполяцией ближайшего соседа
Алгоритм
Сначала цвет каждого из 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-кратного изображения или видео.
Смотрите также
использованная литература
внешние ссылки
- hq2x , hq3x и hq4x на Wayback Machine
- Порт исходного проекта с использованием инструмента командной строки DevIL A и библиотеки C
- hqxSharp проецирует порт hqx с добавленной поддержкой прозрачности, настраиваемых допусков и бесшовной мозаики (C #)
- Проект фильтра двухмерных изображений на code.google.com, включая фильтры hqx и многое другое (C #)
-
проект hqx-java Проект Arcnor - бесплатный Java-порт hqxSharp с демонстрацией использования (Java)
- HqxCli-Java Инструмент командной строки, использующий реализацию Arcnor (Java)
- История реализации ffmpeg ffmpeg -i% 1 -filter_complex hqx = 2 hqx2-% 1 для создания 2-кратного изображения или видео.