hqx ("high quality scale") es un conjunto de 3 algoritmos de escalado de imágenes desarrollados por Maxim Stepin. Los algoritmos son hq2x , hq3x y hq4x , que amplían por un factor de 2, 3 y 4 respectivamente. Fue creado inicialmente en 2003 para el emulador de Super NES ZSNES , [ 1 ] y se utiliza en emuladores como Nestopia , FCEUX , higan y Snes9x .
Algoritmo
Los píxeles de la imagen de origen se recorren iterativamente desde la esquina superior izquierda hasta la inferior derecha. Para cada píxel, los 8 píxeles circundantes se comparan con el color del píxel de origen. Las formas se detectan comprobando si hay píxeles de color similar según un umbral YUV . 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. [ 2 ] Esto da un total decombinaciones 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, se consulta la disposición de los vecinos en una tabla predefinida que contiene los patrones de interpolación necesarios. [ 2 ]
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, a la vez que 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 ejecutarse en tiempo real en una CPU compatible con MMX . [ 2 ]
En el código fuente, los datos de interpolación se representan como macros de preprocesador que se insertan en sentencias switch case , y no hay código fuente que genere una tabla de búsqueda. El autor describe el proceso de generación de una tabla de búsqueda como: [ 2 ]
Para cada combinación, se debe determinar la representación vectorial más probable del área, preservando los bordes entre las distintas zonas coloreadas de la imagen, con una dirección lo más precisa posible. Esta representación vectorial se rasteriza con una resolución mayor (3x) mediante suavizado de bordes, y el resultado se almacena en la tabla de consulta.
Imagen ampliada 3 veces mediante interpolación del vecino más cercano.
Imagen ampliada 3 veces mediante interpolación bilineal.
Imagen ampliada 3 veces con hq3x
Implementaciones
- El algoritmo original se ha portado a DevIL (pero se ha mantenido en el lenguaje C). [ 2 ]
- Existen versiones para los lenguajes Java y C#. Estas implementaciones amplían las macros. [ 3 ] [ 4 ]
- Una versión en C++ creada por byuu, autor de bsnes , que codifica la LUT de forma eficiente en cuanto al espacio. Byuu aprovechó la simetría de los patrones para realizar dicha codificación y escribió algunas notas sobre la interpretación de las tablas de búsqueda originales. [ 5 ]
- libretro implementa dos familias de sombreadores en Slang/ HLSL , GLSL y Cg :
- La familia hqx , que es hqx verdadero. [ 6 ] Como se ejecuta en GPU modernas , las tablas de búsqueda se sustituyen por texturas. [ 7 ] Las texturas se generaron consultando una versión modificada de hqx para su switch/case.
- La familia scalehq , que frecuentemente se confunde con hqx. No está relacionada con hqx, sino que es un algoritmo genérico de escalado y suavizado. [ 8 ]
- hqx también se ha implementado en ffmpeg para aumentar la resolución de imágenes y vídeos a 2x, 3x o 4x. Aquí se puede encontrar información sobre cómo se produjo la traducción para ffmpeg, y su uso podría ser algo así como:
ffmpeg -i %1 -filter_complex hqx=2 hqx2-%1para producir una imagen o vídeo a 2x.
Véase también
Referencias
- ↑ "HiEnd3D" . 5 de diciembre de 2013. Archivado del original el 5 de diciembre de 2013. Consultado el 12 de febrero de 2023 .
- ^ Zemek, Cameron (6 de mayo de 2019 ) . "hqx README (puerto grom358)" . GitHub .
- ↑ Garcia, Edu (6 de marzo de 2019). "hqx-java" . GitHub .
- ↑ Tamschi. "hqxsharp" . GitHub .
- ↑ Byuu. Anuncio de lanzamiento archivado el 30/09/2011 en Wayback Machine. Consultado el 14/08/2011. Implementación de dominio público publicada en pastebin.
- ↑ "hqx" . Documentación de Libretro .
- ↑ Blok, Jules (12 de abril de 2019). "hqx-shader" . GitHub .
- ↑ K, Hunter (20 de junio de 2014). "Filthy Pants: Un blog de informática: Comparación real de sombreadores Hq2x con xBR" . Filthy Pants .
Enlaces externos
- hq2x , hq3x y hq4x en la Wayback Machine
- Adaptación del proyecto original mediante DevIL, una herramienta de línea de comandos y una biblioteca C.
- Proyecto hqxSharp: una adaptación de hqx con soporte adicional para transparencia, tolerancias personalizadas y mosaico sin fisuras (C#).
- Proyecto de filtro de imagen 2D en code.google.com, que incluye los filtros hqx y más (C#).
- Proyecto hqx-java Proyecto Arcnor: una versión gratuita de hqxSharp para Java 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.
- Procesamiento de imágenes