一个大质量之插值放大算法。文章首发QQ音乐技术公众号。

Atitit
 图像处理Depixelizing Pixel Art像素风格画的矢量化

章首发QQ音乐技术公众号:

 

https://mp.weixin.qq.com/s/H9Tz1n4O2-Aawgu7p-XL5w

 

平等、Android 尺寸压缩逻辑

本着图片尺寸的改其实就算是一个图像重新采样的进程,放大图像称为上采样(upsamping),缩小图像称为下采样(downsampling),这里我们第一讨论下采样。

于 Android
中图纸重采样提供了片栽办法,一种植叫做邻近采样(Nearest Neighbour Resampling),另一样种名叫双线性采样(Bilinear Resampling)

除去 Android
中就有限种常用的又采样方法之外,还有另外比较广泛的个别种:双立方/双三次采样(Bicubic Resampling)
Lanczos Resampling。除此之外,还有局部任何民用要部门发明的算法
Hermite ResamplingBell ResamplingMitchell Resampling。我们这边主要介绍前面提到的季种采样方法。

以上年的时段,偶然见到hqx算法。

老二、邻近采样(Nearest Neighbour Resampling)

Nearest Neighbour Resampling(邻近采样),是 Android
中常用的压缩方法有,我们先来探在 Android 中动用近采样的以身作则代码:

BitmapFactory.Options options = new BitmapFactory.Options();
//或者 inDensity 搭配 inTargetDensity 使用,算法和 inSampleSize 一样
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.png");
Bitmap compress = BitmapFactory.decodeFile("/sdcard/test.png", options);

来探望邻近采样的图纸效果:

原图

  
  

拍卖下的图形

原图是每个像素红绿隔的图纸,可以看出处理后的图都完全成为了绿色,接着我们来探
inSampleSzie 的合法描述:

If set to a value > 1, requests the decoder to subsample the
original image, returning a smaller image to save memory. The sample
size is the number of pixels in either dimension that correspond to a
single pixel in the decoded bitmap. For example, inSampleSize == 4
returns an image that is 1/4 the width/height of the original, and
1/16 the number of pixels. Any value <= 1 is treated the same as 1.
Note: the decoder uses a final value based on powers of 2, any other
value will be rounded down to the nearest power of 2.

从今官的解说着我们可见到 x(x 为 2
的翻番)个像素最后对应一个像素,由于采样率设置也
1/2,所以是个别独如素生成一个像素。邻近采样的计比粗,直接选择中间的一个像素作为生成像素,另一个像素直接抛,这样虽导致了图变成了纯绿色,也就算是红色像素被抛弃。

接近采样采用的算法叫做邻近点插值算法。

一个高质量之插值放大算法。

老三、双线性采样(Bilinear Resampling)

双线性采样(Bilinear Resampling)以 Android 中的用方法相似生零星种:

Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.png");
Bitmap compress = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth()/2, bitmap.getHeight()/2, true);

抑或直接动用 matrix 进行缩放

Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.png");
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 0.5f);
bm = Bitmap.createBitmap(bitmap, 0, 0, bit.getWidth(), bit.getHeight(), matrix, true);

在押源码可以掌握 createScaledBitmap 函数最终为是使第二种植办法的 matrix
进行缩放,我们来探视双线性采样的展现:

原图

拍卖后的图纸

可看看处理下的图纸未是像邻近采样一样纯粹的一模一样栽颜色,而是少种植颜色之交集。双线性采样使用的凡双线性內插值算法,这个算法不像邻近点插值算法一样,直接粗暴的抉择一个像素,而是参考了源像素相应岗位周围
2×2 个点的值,根据相对位置取对应的权重,经过计量后收获目标图像。

双线性内插值算法在图像的缩放处理着兼有抗锯齿功能,
是最简便易行和周边的图像缩放算法,当对邻近 2×2
个如素点采用对丝性內插值算法时,所得表面在邻域处是相符的,但斜率不吻合,并且双线性内插值算法的平作用或许让图像的底细产生退化,这种光景在直达采样时更是明显。

同双线性插值等插值算法相比,这个算法放大后对人眼睛保护相对比较好。

季、邻近采样和双线性采样对比

我们这里来比一下立即片种植 Android 中时时用的图片尺寸压缩方法。

靠近采样的措施是最为抢之,因为其直接选择之中一个像素作为生成像素,但是变化的图或会见相对比较失真,产生比显然的锯齿,最具代表性的哪怕是拍卖文字比较多之图在显示力量达到之差距,对比:

原图:

原图

身临其境采样:

身临其境采样

双线性采样:

双线性采样

本条比就挺直观了,邻近采样字之显得失真对比双线性采样来说要重过剩。

没有双线性插值看起模糊,固然,也抽空把算法简单优化了一下。

五、双立方/双老三坏采样(Bicubic Resampling)

偶立方/双叔破采样使用的是双料立方/双叔赖插值算法。邻近点插值算法的靶子像素值由源图上么像素决定,双线性內插值算法由源像素某点周围
2×2
个如素点按一定权重获得,而复立方/双叔蹩脚插值算法更进一步参考了源像素某点周围
4×4 个像素。

这算法在 Android
中连没有原生支持,如果欲以,可以经手动编写算法或者引用第三在终于法库,幸运的是这个算法在
ffmpeg 中都深受到了支撑,具体的实现在 libswscale/swscale.c
文件中:FFmpeg Scaler
Documentation。

偶立方/双叔不良插值算法时常用来图像或者视频的缩放,它会比双线性内插值算法保留更好的细节质量。我们看这个算法的骨子里见及跟双线性内插值算法的下采样对比:

原图:

下采样–原图

偶老三次采样:

产采样–双老三浅采样

双线性采样:

生采样–双线性采样

即使生采样来说,两者呈现特别类似,肉眼可见的反差不坏,接下去比较一下立即片栽算法的达标采样实际见:

原图:

上采样–原图

偶老三涂鸦采样:

直达采样–双老三次等采样

双线性采样:

达采样–双线性采样

及时点儿种算法的及采样结果我们或得以看见较为明确的区别,双立方/双老三糟采样的锯齿是要是稍稍部分。

复立方/双老三不行插值算法在平时的软件面临凡深常用之如出一辙栽图片处理算法,但是这个算法有一个欠缺就是是计算量会相对较老,是前三种算法中计算量最老的,软件
photoshop 中之图纸缩放功能采用的即使是以此算法。

例行的图像填充采样放大

六、Lanczos Resampling

Lanczos
采样跟
Lanczos 过滤是 Lanczos
算法的有数种普遍应用,它可看做低通滤波器或者用于平地在采样之间插入数字信号,Lanczos
采样一般用来多数字信号的采样率,或者间隔采样来降低采样率。

Lanczos 采样使用的 Lanczos 算法也得据此来作为图片的缩放,Lanczos
算法和双三软插值算法都是用卷积核来通过输入像从计算输出像素,只不过在算法表现及有些有差。关于卷积核的介绍,这里给一样布置简略的图形帮助大家掌握:

图如卷积

Lanczos
从算法角度谈理论及会于双叔次等/双立方插值算法更好一点,先来探视她跟双三坏/双立方采样的图形下采样对比:

原图:

下采样–原图

Lanczos 采样:

下采样–Lanczos 采样

双叔软采样:

生采样–双叔破采样

基本看不发出差异,然后是马上简单栽算法的达标采样对比:

原图:

上采样–原图

Lanczos 采样:

上采样–Lanczos 采样

偶老三不行采样:

达到采样–双老三糟糕采样

旋即半种植算法的上下采样结果由眼睛上看区别颇有点,但是打理论及吧 Lanczos
算法处理下的图应该是更加平缓少锯齿的。

同样的,Lanczos 算法在 ffmpeg 的 libswscale/swscale.c
中为来落实。其实不光 Lanczos 和方面的老三栽算法,ffmpeg
还提供了外的图像重采样方法,诸如 area averagingGaussian
等等,通过编译好之 ffmpeg 库调用这些算法处理图片的通令如下:

ffmpeg -s 600x500 -i input.jpg -s 300x250 -sws_flags lanczos lanczos.jpg

-sws_flags 参数根据采样算法可以择 bilinear/bicubic/lanczos 等等。

        ”经典“的图像填充采样放大,应用线性滤波器,或导出于分析插值理论、或导出于信号处理理论。使用滤波器的实例,比如“最近邻,Bicubic和Lancosz [ Wolberg 1990 ]。这些滤波器并无针对原本数据做其他要,唯一的尺码就是拉动富限制。结果,图片经这种拍卖以后,突变长以及扎眼的界线都变得模糊。

七、四种算法对二值化图片的处理表现

立即四栽图片重采样算法在处理二值化图片上面的见差距较生,我们事先看看下采样的对立统一:

原图:

下采样–原图

即采样:

生采样–邻近采样

双线性采样:

下采样–双线性采样

复老三不行采样:

下采样–双老三糟糕采样

Lanczos 采样:

下采样–Lanczos 采样

下采样的对待一目了然,从上到下的图像表现效果日趋变漂亮,Lanczos
算法处理后底图像质量属于最为出彩,接着我们看看这四种植算法的齐采样对比:

原图:

上采样–原图

临采样:

落得采样–邻近采样

双线性采样:

高达采样–双线性采样

对老三潮采样:

达成采样–双老三不良采样

Lanczos 采样:

上采样–Lanczos 采样

起图像质量达标来拘禁,和下采样结果同样,邻近采样效果比较差,依次为生效果变可以,Lanczos
效果最优质。

        最近十年,许多扑朔迷离的算法问世,并对准老输入图片做了强假定,比如,假得讨论自然图片统计[Fattal 2007]抑或自相似性[Glasneret al.2009]。这些艺术都高于了本文的论点。然而,在大部分状,这些(自然之)图片并无分包颜色量化的袖珍像素图片。因此,这些艺术在这些图输入处理上往往表现特别不同。

八、总结

点根本介绍了广大的季种植图像重采样算法,在 Android
中,前片种植采样方法根据实际情形去选择即可,如果对时要求不强,倾向被以对线性采样去缩放图片。如果对图片质量要求充分高,双线性采样也早已力不从心满足要求,则好考虑引入另外几种算法去处理图片,但是又用小心的凡背后两种算法使用的且是卷积核去计算生成像素,计算量会相对比大,Lanczos
的计算量则是极端酷,在其实支出过程被因需求开展算法的取舍即可。

 

九、参考

  1. 图如卷积与滤波的一部分知识点
  2. TUTORIAL: IMAGE
    RESCALING

1、最临近点插值算法(Nearest Neighbor)

最邻近点插值算法是极简便易行吗是快最好抢的如出一辙种植算法,其做法是將放大后未知的诸如素点P,將其职务换算到原影像上,与原之近乎的4周像素点A,B,C,D做比较,令P点的诸如素值等于最贴近的即点像素值即可。如达到图中的P点,由于最为相仿D点,所以就是直接取P=D。

这种艺术会带动明显的失真。在A,B中点处的例如素值会忽然出现一个纵,这就是是出新马赛克及锯齿等家喻户晓走样的原由。最接近插值法唯一的助益就是是速度快。
 

2、双线性插值算法(Bilinear Interpolation)

夫做法是將放大后未知之例如素点P,將其岗位换算到原有影像上,计算的季個像素点A,B,C,D对P点的熏陶(越近P点取值越怪,表明影响也进一步充分),其示意图如下。

对立方插值算法(Bicubic Interpolation)

    双立方插值算法和双线性插值算法类似,对于推广后未知之如素点P,将对准其影响的限定扩张至临近的16单如素点,依据对P点的远近影响进行插值计算,因P点的如素值信息来源16单邻近点,所以只是收获比较密切的影像,不过速度比慢。

4、 自适应样条插值极其增强技术( S-Spline  &  S-Spline  XL)

跟上述经典的插值方法极其深之分在,
S-Spline 采用了一样栽由适应技术,那些传统的道总是冲周围的比如素点来要未知点的色彩值,也就是说要求解的色彩值仅仅依赖该像素点在图像遭到之职务,而不实际的图像的像素信息,而自适应样条算法还会考虑实际图像的像素信息。 实验表明,经过 S-Spline 算法得到的图像效果使优惠双立方插值算法。

今天 S-Spline 算法又出新了增强版 S-Spline  XL,新本子的 S-Spline XL 算法较 S-Spline 而言画面的锐度得到越来越增进,物体的大概更加分明,边缘之锯齿现象大大削弱,图像感受越来越自然。

 

相比以上各图并结实验数据,我拿作用参数列举如下表。

插值类型

主观感受

图像轮廓

总体评价

处理耗时

最临近点插值

N earrst_ N eighbour

马赛克现象严重

不清晰

最差

5秒

双线性插值

B ilinear

图像模糊,不锐利

边缘不清晰,有锯齿现象

6秒

双立方插值

B icubic

图像较模糊,较锐利

锯齿现象有所改善

折中

8秒

自适应样条插值

S-S pline

图像相对清晰,锐利

边缘变得清晰,锯齿现象消失

18秒

自适应样条增强

S-S pline_ XL

图像清晰,锐利

边缘锐利,清晰

最好

20秒

 

比如素图的去像素化(Depixeling Pixel
Art) – lonelyrains的专栏 – 博客频道 – CSDN.NET.html

如素图的去像素化(Depixeling Pixel
Art) – lonelyrains的专栏 – 博客频道 – CSDN.NET.html

图像放大方法概述 – 阳光日志 – 博客频道 – CSDN.NET.html

图像缩放–插值法__chease_乍浪博客.html

 

 

作者:: 绰号:老哇的爪子claw of
Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王”Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red
cloak

简称:: Emir
Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir
Attilax Akbar bin
Mahmud bin  attila
bin Solomon Al Rapanui 

埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门  阿尔 拉帕努伊   

常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源:attilax的专栏   http://www.cnblogs.com/attilax/

–Atiend

 

相关文章