Hqx (algorithm)
   HOME

TheInfoList



OR:

hqx ("high quality scale") is a set of 3 image upscaling algorithms developed by Maxim Stepin. The algorithms are hq2x, hq3x, and hq4x, which magnify by a factor of 2, 3, and 4 respectively. It was initially created in 2003 for the Super NES emulator ZSNES, and is used in
emulator In computing, an emulator is Computer hardware, hardware or software that enables one computer system (called the ''host'') to behave like another computer system (called the ''guest''). An emulator typically enables the host system to run sof ...
s such as Nestopia, F. CEUXSnes9x., and Snes9x.


Algorithm

The source image's pixels are iterated through from top-left to bottom-right. For each pixel, the surrounding 8 pixels are compared to the color of the source pixel. Shapes are detected by checking for
pixel In digital imaging, a pixel (abbreviated px), pel, or picture element is the smallest addressable element in a Raster graphics, raster image, or the smallest addressable element in a dot matrix display device. In most digital display devices, p ...
s of similar color according to a YUV threshold. hqx uses the YUV color space to calculate color differences, so that differences in brightness are weighted higher in order to mimic human perception. This gives a total of 2^8 = 256 combinations of similar or dissimilar neighbors. To expand the single pixel into a 2×2, 3×3, or 4×4 block of pixels, the arrangement of neighbors is looked up in a predefined table which contains the necessary interpolation patterns. The interpolation data in the lookup tables are constrained by the requirement that continuity of line segments must be preserved, while optimizing for smoothness. Generating these 256-filter lookup tables is relatively slow, and is the major source of complexity in the algorithm: the render stage is very simple and fast, and designed to be capable of being performed in real time on a MMX-capable CPU. In the source code, the interpolation data is represented as preprocessor macros to be inserted into switch case statements, and there is no
source code In computing, source code, or simply code or source, is a plain text computer program written in a programming language. A programmer writes the human readable source code to control the behavior of a computer. Since a computer, at base, only ...
leading to the generation of a lookup table. The author describes the process of generating a look-up table as:
... for each combination the most probable vector representation of the area has to be determined, with the idea of edges between the different colored areas of the image to be preserved, with the edge direction to be as close to a correct one as possible. That vector representation is then rasterised with higher (3x) resolution using anti-aliasing, and the result is stored in the lookup table.


Implementations

* The original algorithm has been ported to
DevIL A devil is the mythical personification of evil as it is conceived in various cultures and religious traditions. It is seen as the objectification of a hostile and destructive force. Jeffrey Burton Russell states that the different conce ...
(but kept in the C language). * Ports to Java and C# languages are available. These implementations expand the macros. * A C++ port by byuu, the author of
bsnes Higan is a free and open source emulator for multiple video game consoles, including the Super Nintendo Entertainment System. It was developed by Near. Originally called bsnes (which was later reused for a new emulator by the same developer), ...
, which encodes the LUT in a space-efficient way. Byuu exploited the symmetry of patterns to make such an encoding, and wrote some notes on interpreting the original look up tables.Byuu
Release announcement
Accessed 2011-08-14
public domain implementation released on pastebin
/ref> *
libretro RetroArch is a free and open-source, cross-platform frontend for emulators, game engines, video games, media players and other applications. It is the reference implementation of the libretro API, designed to be fast, lightweight, portable and ...
implements two families of shaders in Slang/
HLSL The High-Level Shader Language or High-Level Shading Language (HLSL) is a proprietary shading language developed by Microsoft for the Direct3D 9 API to augment the shader assembly language, and went on to become the required shading language ...
,
GLSL OpenGL Shading Language (GLSL) is a high-level shading language with a syntax based on the C programming language. It was created by the OpenGL ARB (OpenGL Architecture Review Board) to give developers more direct control of the graphics pipe ...
, and Cg: ** The hqx family, which is true hqx. As it runs on modern GPUs, lookup tables are substituted by textures. The textures were generated by interrogating a modified version of hqx for its switch/case. ** The scalehq family, which is frequently confused with hqx. It is not related to hqx, but is rather a generic upscaling-smoothing algorithm. * hqx has also been implemented in
ffmpeg FFmpeg is a free and open-source software project consisting of a suite of libraries and programs for handling video, audio, and other multimedia files and streams. At its core is the command-line ffmpeg tool itself, designed for processing vide ...
for upscaling images and videos 2x, 3x, or 4x. An account of the production of the translation for ffmpeg i
here
and usage may be something like: ffmpeg -i %1 -filter_complex hqx=2 hqx2-%1 to produce a 2x image or video.


See also

*
Image scaling In computer graphics and digital imaging, image scaling refers to the resizing of a digital image. In video technology, the magnification of digital material is known as upscaling or resolution enhancement. When scaling a vector graphic image ...
*
Pixel-art scaling algorithms Pixel art scaling algorithms are graphical filters that attempt to enhance the appearance of hand-drawn 2D pixel art graphics. These algorithms are a form of automatic image enhancement. Pixel art scaling algorithms employ methods significantly ...
* Pixel art


References

{{Reflist


External links


hq2x
an

at the
Wayback Machine The Wayback Machine is a digital archive of the World Wide Web founded by Internet Archive, an American nonprofit organization based in San Francisco, California. Launched for public access in 2001, the service allows users to go "back in ...

Port of original project using DevIL
A command line tool and C library
hqxSharp project
a port of hqx with added support for transparency, custom tolerances and seamless tiling (C#)
2d image filter project
at code.google.com including the hqx filters and more (C#)
hqx-java project
Arcnor project - a free Java port of hqxSharp with a demo of usage (Java) *
HqxCli-Java
A command line tool that use the Arcnor implementation (Java)

ffmpeg -i %1 -filter_complex hqx=2 hqx2-%1 to produce a 2x image or video. Image processing