En el procesamiento de imágenes , hqx ("escala de alta calidad") es uno de los algoritmos de escalado de pixel art desarrollado por Maxim Stepin , utilizado en emuladores como Nestopia , FCEUX , higan , Snes9x , ZSNES y muchos más. Hay tres filtros hqx definidos: hq2x , hq3x y hq4x , que aumentan en un factor de 2, 3 y 4 respectivamente. Para otros factores de aumento, este filtro se utiliza con la escala del vecino más cercano .
Imagen ampliada 3 × con la interpolación del vecino más cercano
Imagen ampliada 3 × con algoritmo hq3x
Algoritmo
Primero, el color de cada uno de los 8 píxeles alrededor del píxel de origen se compara con el color del píxel de origen. Las formas se detectan comprobando píxeles de color similar según un umbral. Esto da un total de 2 8 = 256 combinaciones de vecinos similares o diferentes. Para expandir un solo píxel en un bloque de píxeles de 2 × 2, 3 × 3 o 4 × 4, la disposición de los vecinos se busca en una tabla predefinida que contiene los patrones de interpolación necesarios. [1]
Hqx utiliza el espacio de color YUV para calcular las diferencias de color, de modo que las diferencias de brillo se ponderan más para imitar la percepción humana. Es posible utilizar una tabla de búsqueda para la conversión del espacio de color si la imagen de origen es de 16 bits por píxel. [1]
Los datos de interpolación en las tablas de búsqueda están restringidos por el requisito de que se debe preservar la continuidad de los segmentos de línea, mientras se optimiza la suavidad. La generación de estas tablas de búsqueda de 256 filtros es relativamente lenta y es la principal fuente de complejidad en el algoritmo: la etapa de renderizado es muy simple y rápida, y está diseñada para poder realizarse en tiempo real en una CPU compatible con MMX . [1]
En el código fuente, los datos de interpolación se representan como macros de preprocesador que se insertarán en las sentencias de cambio de caso , y no hay código fuente que lleve a la generación de una tabla de búsqueda. El autor describe el proceso de generar una tabla de búsqueda como: [1]
... para cada combinación se debe determinar la representación vectorial más probable del área, con la idea de que los bordes entre las diferentes áreas coloreadas de la imagen se conserven, con la dirección del borde lo más cercana posible a la correcta . Luego, esa representación vectorial se rasteriza con una resolución más alta (3x) utilizando suavizado, y el resultado se almacena en la tabla de búsqueda.
Implementaciones
- El algoritmo original se ha portado a DevIL (pero se ha mantenido en el lenguaje C). [1]
- Hay puertos disponibles para los lenguajes Java y C #. Estas implementaciones amplían las macros. [2] [3]
- Un puerto C ++ de byuu, el autor de bsnes , que codifica la LUT de una manera que ahorra espacio. Byuu aprovechó la simetría de los patrones para hacer tal codificación y escribió algunas notas sobre la interpretación de las tablas de consulta originales. [4]
- libretro implementa dos familias de sombreadores en Slang / HLSL , GLSL y Cg :
- La familia hqx , que es verdadera hqx. [5] Como se ejecuta en GPU modernas , las tablas de búsqueda se sustituyen por texturas. [6] Las texturas se generaron al interrogar una versión modificada de hqx para su interruptor / caso.
- La familia scalehq , que a menudo se confunde con hqx. No está relacionado con hqx, sino que es un algoritmo genérico de suavizado de escala. [7]
- hqx también se ha implementado en ffmpeg para escalar imágenes y videos 2x, 3x o 4x. Una cuenta de la producción de la traducción para ffmpeg está aquí: http://blog.pkh.me/p/19-butchering-hqx-scaling-filters.html y el uso puede ser algo como: ffmpeg -i% 1 -filter_complex hqx = 2 hqx2-% 1 para producir una imagen o video 2x.
Ver también
Referencias
- ↑ a b c d e Zemek, Cameron (6 de mayo de 2019). "hqx README (puerto grom358)" . Cite journal requiere
|journal=
( ayuda ) - ^ García, Edu (6 de marzo de 2019). "hqx-java" . GitHub .
- ^ Tamschi. "hqxsharp" . bitbucket .
- ^ Byuu. Anuncio de lanzamiento Consultado el 14 de agosto de 2011. implementación de dominio público lanzada en pastebin
- ^ "hqx" . Libretro Docs .
- ^ Blok, Jules (12 de abril de 2019). "hqx-shader" . GitHub .
- ^ K, Hunter (20 de junio de 2014). "Pantalones asquerosos: un blog de computadora: verdadera comparación de sombreadores Hq2x con xBR" . Pantalones sucios .
enlaces externos
- hq2x , hq3x y hq4x en Wayback Machine
- Puerto del proyecto original usando DevIL A, una herramienta de línea de comandos y una biblioteca C
- hqxSharp proyecta un puerto de hqx con soporte adicional para transparencia, tolerancias personalizadas y mosaico sin fisuras (C #)
- Proyecto de filtro de imagen 2d en code.google.com, incluidos los filtros hqx y más (C #)
- Proyecto hqx-java Proyecto Arcnor: un puerto Java gratuito de hqxSharp con una demostración de uso (Java)
- HqxCli-Java Una herramienta de línea de comandos que utiliza la implementación de Arcnor (Java)
- Historia de implementación de ffmpeg ffmpeg -i% 1 -filter_complex hqx = 2 hqx2-% 1 para producir una imagen o video 2x.