0%

Image

视觉享受。

What

近处观看时,如果要让人眼察觉不到显示屏的颗粒感 ,显示屏的像素密度需要超过人眼的分辨率,必须高于每英寸285像素的像素密度。4K 显示器都达不到这个门槛,27英寸 4K 显示器的像素密度约为163 PPI,更大显示屏的像素密度就更低了。

实际上,市场上只有一种大型显示器能够接近这种密度,那就是27英寸 iMac 的 5K 显示器,分辨率 5120 x 2800,像素密度220 PPI。

《如何自制高像素画框》

解密三星苹果和小米10 用的HEIF照片格式,诺基亚华为贡献大

2020/2/25 18:15:11来源:IT之家作者:汐元

前段时间发布的小米10系列手机采用了一种新的图片格式:HEIF,能够在保持画质不变的前提下缩减至少50%的文件体积。

HEIF格式照片的文件扩展名一般是.HEIC(也有其他的格式)。看到这个格式名,用iPhone的小伙伴一定很熟悉。

没错,苹果在2017年iOS 11系统上就已经开始支持这种图片格式,大家可以去翻翻IT之家的老文章(点此前往)。
Windows 10系统和安卓9系统在2018年也开始支持HEIF图片格式。同年,三星Note9其实也已经支持.HEIC照片。
小米10发布前,雷军曾表示,等HEIF普及后,估计JPEG和GIF就可以淘汰了。


汐元觉得,未来如果HEIF普及了,也许真的可以取代JPEG和GIF。
说到这里,相信大家都很好奇,HEIF究竟是怎么够做到保证画质不变而缩小文件体积的?
汐元翻了一下网上的资料,大多没有明确针对这个问题进行说明。所以这篇文章打算聚焦这个问题来为大家介绍。

为什么HEIF相比JPEG能够在画质不变的情况下将文件体积大幅缩小?
我们首先要明白JPEG的图片格式具体是怎么样的。
所谓JPEG格式的图片,其实说的是一种图像压缩的技术标准,使用这种标准压缩出来的图片,就叫“JPEG文件”。
JPEG文件后缀名包括JPG、JPEG、JPE、JFIF以及JIF。都是我们熟悉的。
那么JPEG标准是怎么压缩图片的呢?
我们知道,一张图片放大后,就可以看到一个一个的像素点。

每个像素点,都包含了描述这个像素点颜色的一组数值,这个叫色彩空间,例如我们熟悉的RGB色彩空间,还有CMYK色彩空间等。


一般照片用的是RGB色彩空间,而JPEG标准采用的是一种叫做YCbCr的色彩空间。所以压缩之前,要先进行色彩空间转换。


▲图自:wikimedia

YCbCr色彩空间中,Y表示的是亮度,Cb代表蓝色的彩度,Cr表示的是红色的彩度。
换句话说,Y代表亮度,CbCr代表色彩。
转换之后,每个像素背后变成了另一组数值。

因为人眼对亮度敏感,对色彩不那么敏感,所以实际压缩的时候,JPEG标准不会对亮度信息做太多改变,主要对色彩信息做压缩。
压缩有两种,一种是有损压缩,一种是无损压缩。JPEG在压缩时,两种都会用,一般先进行有损压缩,然后进行无损压缩。
有损压缩第一步是对Cb通道和Cr通道的色彩数据按照一定的比例进行取样。这个过程就损失了一部分数据。
第二步,就是将一张图片中的像素分成无数个8×8像素的方块,每个方块里有64个像素,对应64组数据。


然后,将这64组数据进行一种叫离散余弦变换(DCT)的数学处理,处理后,这64组数据就变成了数据更简洁一些的系数矩阵。


至于这个离散余弦变换怎么搞,就不用了解了,懂高数的IT之家小伙伴可以自行去学习。
总之,在经过DCT变换后,64组像素数值变成了64个系数,这个过程又产生了数据损失。
接下来,对于这一组8×8的序数矩阵,还不能直接处理,要继续进行一步叫“量化”的处理过程。
量化是怎么进行的大家不用知道,只需要知道,量化的目的是适当减小矩阵内各个像素点之间的差别。因为人眼对小范围内差别高的像素区域辨别能力不高,所以不如削减它们的差异。
经过量化处理后,8×8的序数矩阵变成了一组更加简洁的数字矩阵,有大面积的0。

很显然,这一步,又损失了一部分数据。
好,走到这一步,接下来就是无损压缩了。

首先,我们把上一步量化后的8×8数字矩阵提取出来。提取的顺序是这样“Z”字型的。


提取出来后,得到64个数据。这64个数据中,第一个数字叫DC系数编码,后面63个数字叫AC系数编码。


我们要知道,一张图片里可以包含很多很多个8×8的小方块,都进行上述处理后,就有很多很多个DC系数。
我们把这很多很多个DC系数抽出来,组成一个集体,然后对它们进行差分编码和哈夫曼编码。
至于其他的AC系数,我们对他们进行行程编码。
这样,JPEG标准的压缩步骤基本就走完了。
这些步骤走完后,压缩成的.JPG文件体积就会比原图小很多,当然图片质量也会有所损失。


但我们要说的还没完。
上面三种无损压缩编码的操作过程大家不需要知道,但是他们的压缩思想,大家是有必要知道的。
差分编码,就是对于一串数字,除了第一个数字,其他数字都表示为它和前一个数字的差。例如100、101、103、104、107这串数据,可以表示为100、1、2、1、3。这就起到了压缩作用。

哈夫曼编码,它的大体思想在一串数据里,用短字符表示出现频率多的数字,用稍长的字符表示出现频率少的数字。
假如有下面这句话:“IT之家网友在IT之家讨论IT之家小编”,这句话里“IT之家”几个字反复出现,那我们就用“1”来表示“IT之家”,然后这句话就成了“1网友在1讨论1小编”,这样是不是就被压缩了?


注意,上面这个例子并不严谨,只是为了方便大家理解哈夫曼编码的思想,实际操作很复杂的,要考虑概率、做二叉树等步骤的。如果有IT之家小伙伴感兴趣可自行学习。
行程编码,这就很简单了,直接用例子说明。假如有一串字符“aaabbbccccdddddd”,它包括3个a,3个b,4个c,6个d,所以就把它编码为“3a3b4c6d”。

很明显,要想让这些无损编码最大限度发挥压缩作用,需要保证数据有一定特性,例如大面积相同的字符、有很多出现频率较高的字符或者有很多相似的字符等。
讲到这,相信大家也就理解了为什么前面要大费周章做那么多有损的处理了,一部分原因就是为了得到适合进行无损压缩的数据。
通常情况下,一张图片里面,其实是有很多相同或相近的像素点的,这意味着它们背后的数据有很大可以压缩的空间。
JPEG目的就是要干这个事儿的,这么说相信大家能理解。

说了那么多JPEG,那HEIF呢?
别急,当我们掌握了JPEG图像压缩的方法,对于HEIF是怎样进一步压缩图片体积的,就好理解多了。
其实HEIF做的工作和JPEG差不多,大体路径是相似的,但在一些一些细节上有改进。

我们需要先做一个简单的说明。其实所谓的HEIF,是图片的封装格式,它主要采用的是一种叫HEVC的编码方式。

打个比方,一张图片的信息,它们其实是经过HEVC的编码方式进行编码,然后将编码后的信息用一个盒子(容器)装起来,这个盒子就叫HEIF。


HEIF是把盒子和编码方式分开了,而JPEG没有。

HEIF的这种操作方式和很多视频格式很像,我们经常看到的MP4、MKV、AVI等视频格式,其实都是盒子的名字,盒子里面是编码的方式,例如MPEG-4、H.264、H.265等。

影音软件播放视频文件的时候,都是先把盒子打开,然后再解码里面的编码文件。

上面提到的H.265还有一个名字,就叫HEVC,没错,也就是HEIF格式主要采用的编码方式,所以说这个图片格式其实采用的也是视频的编码的方式。

除了HEVC,HEIF格式也可能采用其他的编码方式,但很少见。它的编码方式和对应的后缀名如下:


我们看到,小米10和iPhone用的都是HEVC的编码方式,后缀名都是.HEIC。


所以问题就变成了,HEVC的编码方式是怎么将体积缩小的呢?

其实主要有两点。

首先,根据上文的介绍,JPEG是将图片划分成很多8×8的像素块来进行压缩编码的。
而在HEVC编码方式中,这个像素块的划分方式更灵活,最大可以允许以64×64来划分,然后在64×64的像素块中,可以灵活的划分子像素块,可以划分成32×32、16×16、8×8的子块,这叫做四叉树单元划分。


这么做有什么好处呢?答案就是,在面对一张图片的时候,如果是信息量比较平缓的区域,我们可以用比较大的像素块来划分,如果是信息量比较密集的区域,就可以用比较小的像素块来划分。


这种根据实际情况来划分的编码单元,可以很大程度提高编码效率。特别是针对4K等高分辨率、像素量大的照片,优势更明显。
HEIF照片的文件体积能够缩小,大部分要归结于此。

其次是第二点。前面介绍JPEG时我们讲了它使用的几种无损编码方式,分别是差分编码、哈夫曼编码和行程编码。
这其中从编码之后的数据量来说,其实最主要的是哈夫曼编码,它是可以改进的。
在HEIF标准中,这种无损编码方式主要采用了自适应的二进制算术编码(下面简称“算术编码”)。
其实,随着JPEG跟随时代的发展,算术编码也被引入到了JPEG的编码方式中,但是主要还是哈夫曼编码。

算术编码相比哈夫曼编码,可以进一步提高编码效率。
其实算术编码的思想原理和哈夫曼编码是差不多的,都是考虑数据中不同字符出现的概率,然后给不同字符以不同的编码。
算术编码具体的数学化思想很浓,难以三言两语讲清楚,这里也不方便展开说了。总之,算术编码最后得到的是一个很简洁,但是很长的小数。
正是因为数学的思想很深刻,算术编码的编码效率要比哈夫曼编码更高,最后呈现在大家面前的,就是对于同一张照片可以压缩成更小的体积。
以上,基本上就是HEIF能够在保证画质不变的前提下缩小图片体积的原因了。

最后,关于HEIF,还有一些比较基础的知识,大家可以比较轻松地了解到。IT之家之前也转了小米官方对HEIF格式介绍的文章

HEIF的全名是高效率图像格式(High Efficiency Image Format),是运动图像专家组(MPEG)在2013年推出的。它和前面的JPEG不是一个组织。
值得一提的是,HEIF的相关技术是诺基亚的技术人员制定的,在2015年基本定型,现在也是诺基亚在维护(HEIF官网:点此前往)。


有意思的是,HEIF的关键编码技术HEVC,华为正是主要推动者之一,手握大量专利,还在今年1月加入了HEVC Advance专利池。

当然啦,小米10凭借自身的话题性,对HEIF图片格式的进一步普及确实也起到了推动作用。

无论如何,汐元还是期待HEIF图片格式能够克服困难,尽快普及,毕竟现在智能手机摄像头像素已经能达到亿级了,JPG格式下手机的存储空间确实吃紧。
毕竟,总不能只因为要存照片就非得买更大存储空间的手机吧。

Why

这个图像格式未来可能会统治你的设备

本文来自微信公众号「爱否科技」(ID:FViewXFG),作者恺伦,爱范儿经授权发布。

在刚刚发布的小米 10 上,使用了分辨率超高的一亿像素摄像头,而小米不管在发布会上还是在宣传页面上都提到了「HEIF」这种文件格式。

这个格式是干什么的?和传统的相片格式又有哪些优势呢?

视频和图片太大,得想办法变小点

当代生活,图片和视频已经成为了互联网的主流内容,而图片和视频相对于文字来说所占用的空间则是呈几何倍数增长。

举个例子来说,一个正常的 30FPS、8bit、1080P 视频,未经压缩处理的前提下,每秒画面所占用的空间是:

· 一个 10 分钟的短视频就要用掉 104GB 的空间,如果升级到 60 帧就是 208GB;

· 一部两个小时的电影就是 1.22TB,如果变成大家都喜欢的 4K 分辨率就是 4.88TB 的大小。

就这个大小别说视频网站要用多少钱去买存储,按照家用百兆宽带 12.5M/s 的下载速度,一秒钟视频要缓冲十几秒钟,毫无体验可言。

这个时候就需要视频压缩算法解决这个问题:在尽可能保证视频质量的前提下通过视频编码去除视频中的冗余信息(比如相邻帧画面上相同的内容)来缩小视频的体积。

以目前公认的效率最高的视频编码 H.264 为例,大约能让每秒钟视频变成 20MB 左右的大小,这样就能为节约大量的存储空间和传输带宽。

但是面对越来越高的视频分辨率和清晰度,H.264 算法也显得捉襟见肘,尤其是在面对 4K 以上的分辨率时 H.264 已经无法使用了。那么面对即将到来的 8K 时代,该用什么样的算法来解决压缩问题呢?

2013 年,国际电信联盟(ITU)提出了全新的 HEVC(High Efficiency Video Coding,高效率视频编码),也就是 H.265 视频编码,相较于 H.264 最大的优点就是拥有更高的压缩率,能够进一步压缩视频的体积。

算法在压缩视频时,会以固定的像素分割画面(例如 88、1616 等等),并将这些小方块标记为最小编码单位。越大的方块编码速度越快,压缩体积越小,但是方块过大会导致画质下降。H.265 则可以即时动态调整方块大小,进而实现更加动态、智能的视频压缩效果。

根据测试显示,H.265 相较于 H.264 能够实现 30% 以上的视频体积缩减,并且还支持 8K 视频和最高 300 帧视频的压缩(H.264 最高支持 59.94 帧)。

至于为什么叫 H.265 这个名字,如果你看之前有关 WIFI6 的文章的话,就知道 WiFi 的全称应该是 IEEE 802.11,翻译一下就是「IEEE 协会推出的 802 标准中的第 11 条」。H.265 和这个有点类似:ITU-T 推出的通信标准化标准是从 A—Z 划分的,表述方式是「字母+.+数字」,例如串行标准的代码是 V.24、国际电话号码是 E.164视频编码归属于「可视音频和多媒体系统」,也就是 H 这个分支字母。

而 HEIF(High Efficiency Image Format,高效率图片编码)则是使用 HEVC 编码的图片。

相较于传统的 JPEG 格式,HEIF 可以节省两倍以上的空间,并且没有最大像素限制,并且还能够记录照片的深度、透明度等信息。使用 HEIF 文件可以轻松实现动态景深调节、动态照片和多重曝光等操作,非常适合手机这个平台。


▲ 景深信息

使用 HEVC 编码的视频文件根据最后输出的不同文件后缀也不尽相同,例如 .mov;HEVC 编码的图片的扩展名通常是 .heic。

再帮大家捋一捋:HEIF 是图片格式,而 HEVC/H.265 是编码格式 (类似 H.264,VP8),HEIF 是图片容器(类似于视频的 mkv,mp4 后缀),用 HEVC 进行编码的 HEIF 图片就是后缀为 .heic 的图片。

我该怎么看这些文件?

一个新的编码视频最重要的是要「有人用」,目前 HEVC 算是一个比较先进的技术,但是已经有了比较广泛的支持。

苹果

苹果阵营是最先支持 HEVC 编码的厂商之一:

· A9 处理器以上的移动设备在更新到 iOS11 之后均可解码完整的 HEVC 格式;
· A10 处理器以上的移动设备在更新到 iOS11 之后可以拍摄 HEVC 媒体;
· Mac 平台更新 macOS High Sierra 以上系统后均支持 HEVC 媒体解码。

不过根据处理器性能的差异,有些设备无法使用完全版的 HEVC 编码,在录制或者解码时会有性能衰减。

在分享 HEVC 时设备可以设置「自动转换」,自动转换成兼容性更好的 Jpeg 或者 H.264 视频。

安卓

Android P 以上设备均支持 HEVC,但是不同的系统对 HEVC 的支持范围也不尽相同。

微软

Windows 支持播放 HEVC 编码,但是需要在微软商店内下载对应应用,而且还要收费!批评一下。


▲ 两个都要安装

Linux

通过一些设置 Linux 可以播放 HEVC 编码的文件,具体操作方式各位可以自行搜索学习。

支持不是问题,收费才是

但是相较于设备支持,HEVC 的收费才是限制其发展的最大绊脚石。

目前 HEVC 的专利在 43 家公司手中,主要分成了三个专利阵营:MPEG-LA(H.264 的授权方)、HEVC Adanvce 和 Velos Media。

目前来看,如果想要使用完整的 HEVC 编码,需要缴纳每年最高 6500 万美元的专利授权费,甚至会无封顶缴纳(不合规定的前提下),并且需要补齐从销售第一天的费用,而且还按照地区收费,发达国家的收费更高。

这极大地打击了设备制造商和内容制造商的使用热情,也阻碍了 H.265 的推广。

目前来看,H.264 依然是市场的主流,但是随着行业技术,尤其是智能手机行业技术的进步,以 H.265、VP9(谷歌的编码器)等更新的编码器会逐步进入我们的生活,提供更流畅、更清晰的视频服务。

How

Experience

Reference

  1. 中国大学MOOC-长江大学公开课,2019-08-05,《静态图像压缩技术:JPEG编码(视频)》
  2. 中国大学MOOC-长江大学公开课,2019-08-05,《静态图像压缩技术:Huffman编码》
  3. 金山视频云,2017-11-14,《HEIF格式解析》
  4. CSDN-打怪升级ing,2018-11-29,《H.264和H.265(HEVC)深度解析及对比》
  5. 一文了解HEVC Advance专利池
  6. MPEGLA-HEVC 专利池探秘
  7. MPEG LA-HEVC专利池中的中国公司
  8. MPGE LA与HEVC Advance的博弈和较量
  9. MPEG LA – AVC/H.264探秘
  10. 最年轻的HEVC专利池——Velos Media

欢迎关注我的其它发布渠道