高性能图像放大算法——hqx算法

1. 介绍

hqx(”hq” 代表 “high quality”;”x” 代表放大倍数)算法准确来说是hqnx算法,
是Maxim Stepin开发的Pixel-art scaling algorithms算法之一。hqx有三个滤波器:hq2x、hq3x和hq4x,其放大倍数分别为2、3和4。
先来看下使用最邻近插值算法得到的放大结果:
高性能图像放大算法——hqx算法_第1张图片
然后再看看使用hq3x算法进行放大之后得到的结果:
高性能图像放大算法——hqx算法_第2张图片
可以看到图像的锯齿情况有了很明显的改善。

2. 算法思想

首先,将源像素周围的8个像素中的每个像素的颜色与源像素的颜色进行比较。通过根据阈值检查颜色相似的像素来检测形状。这就给出了 28=256 2 8 = 256 种相似或不同邻居的组合。为了将单个像素扩展为2×2、3×3或4×4像素块,在包含必要插值模式的预定义表中查找邻域排列。
1. 第一步:是对源像素的3x3区域进行分析。首先,我们计算中心像素与其8个最近邻之间的色差。然后将这种差异与预定义的阈值进行比较,并将这些像素分为两类:“关闭”和“远”颜色。有8个邻居,所以我们得到256个可能的组合。
2. 下一步:是过滤,使用包含256个条目的查找表,每个近邻/远距离有色邻居组合一个条目。每个条目描述如何混合3x3区域的源像素的颜色,以获得滤波图像的内插像素。
3. 目前的实现是利用YUV颜色空间来计算色差,对Y(亮度)分量具有更大的容限,然后对颜色分量U和V进行颜色空间转换,如果源图像的格式为每像素16位,则使用简单的查找表即可实现颜色空间转换。还可以使用MMX指令计算色差并将它们与阈值进行比较。
4. 创建查找表是最困难的部分是:对于每个组合,必须确定区域的最可能的矢量表示,在图像的不同颜色区域之间的边缘的想法被保留,边缘方向接近于正确的一个PO。斯泰尔然后使用反走样将该矢量表示以更高的(3x)分辨率光栅化,并且结果被存储在查找表中
5. 过滤器不是为照片设计的,而是为清晰的边缘图像设计的,比如线条图形或卡通精灵。它还被设计成足够快,可以实时处理256x256图像。

3. 实现

由于它的代码比较长,这里就不直接贴出来了,可以去我的资源页查找下载,后续审核通过会贴出链接。
2018.6.4更新:
工程代码demo下载地址:链接

你可能感兴趣的:([4],图像处理相关)