ErrorLevelAnalysis--ELA(错误级别分析)图片技术详解

薛之谦事件炒的实在是精彩,时间战线拉的也是够长,颇有一番你方唱罢我登场的意思。
时间爆料发展过程中吃瓜群众是看的过瘾,也新出了求锤得锤你再和人家做X怎么办?我就跳轨这样的热门网络梗。同时针对方法晒图的真伪性吃瓜群众也是不甘只为局外人,出现了两类热心派:一类通过图片放大、降低亮度、高斯、文字大小对比等 PhotoShop 手法判断双方图片真伪,另外一类通过ELA技术来进行对比分析。
ELA 是什么,很多人比较陌生,本篇文章就简单的介绍一下。

ELA

ELA 全称:Error Level Analysis ,汉译为“错误级别分析”或者叫“误差分析”。通过检测特定压缩比率重新绘制图片后造成的误差分布,可用于识别JPEG图片的压缩。
维基百科:ELA是对JPEG有损压缩的数字数据中的压缩影片进行分析。
ELA技术可参考 Neal Krawetz先生 在其 07年论文 中的详细介绍。

原理

把图片分割成很多8x8个正方形中的1像素点,对每一个小块进行单独的色彩空间转换。每次对 JPG 图片的修改,都会进行第二次转换。两次转换自然会存在差异,ELA 就是靠对比这种差异来判断图片的哪部分被修改过。

  • 点,指画面中的重复纹理或者类似数据,重复纹理在ELA分析的时候应该表现出近似的颜色,细节较多的区域数据差异也应该大。
  • 线,是不同颜色大面之间的交界线,相同反差边缘应该表现出近似的ELA结果。反差越大,ELA值越高,线条越清晰。
  • 面,纯色面不存在差异,也就不存在ELA,黑色或黑色着色。

如果非JPEG图片包含可见的网格线(8×8个正方形中的1像素点),则表示图片由JPEG格式转换为非JPEG格式(例如PNG)。
如果图片是原始PNG,则ELA是边缘和纹理生成非常高的值。如果ELA沿边缘和纹理产生弱结果(黑色或黑色着色),则PNG可能是由JPEG转化而来的。

示例

  1. http://www.errorlevelanalysis.com 是专门做ELA分析的网站,可惜现在已经关闭了。但还是保留了一个示例作为参考(请留意嘴唇、衬衫以及眼睛,这些部分与其周围因素是有所不同的,根据推测是经过修改的,区域变亮):

  2. Jonas Wagner 的测试(可以看到假的部分图片明显高亮于其周围区域):

  3. 原始照片在重新保存期间具有高度的变化(高ELA值)。后续的任何操作都将降低ELA值,产生较暗的ELA结果:

原图
原ELA
重新保存一次:
二次保存图
二次保存后ELA
修改图片内容(复制了绿皮书及放置了恐龙玩具):
修改后图片
修改后ELA

局限性

  • ELA只是一种算法,由于其分析压缩的性质,无损压缩的数据(如PNG图片)及图片色彩减少到256色以下(转换为GIF图),ELA 是没有作用的。
  • 如果图片被重新保存多次,那么它可能完全处于最小错误级。在这种情况下,ELA将显示黑色图片,且不能使用该算法来识别修改。
    目前这个算法并不是完全可靠的,尤其是经过多次压缩的图片。

###拓展
Neal Krawetz先生演讲文档
https://29a.ch/ 也有其他关于图片处理的技术,比如:
自动化图片裁剪主题区域(非暴力裁剪中心区域)的 smartcrop.js 介绍页 | 示例页 | 测试页 | GitHub
图片滤镜 Film Emulator
测试页 | GitHub

1
2
3
4
5
6
7
参考资料:
· http://www.hackerfactor.com/
· http://www.wired.com/images_blogs/threatlevel/files/bh-usa-07-krawetz.pdf
· http://www.errorlevelanalysis.com/
· http://fotoforensic.com/tutorial-ela.php
· https://29a.ch/
· https://en.wikipedia.org/wiki/Error_level_analysis