从照片中想象图像数据 探索图片背后的大数据秘密
在一个图像的RGB值中如何构建直方图,来帮助改善色彩平衡。
文章内容信息由The Big Data Zone 和Hortonworks提供(Hortonworks是一家位于美国加州帕拉奥图的商业计算机软件公司,专注于Apache Hadoop的开发和支持)。我们将学习了解关联的数据平台,它能提升现代数据应用创新能力以及学习它们如何分享可行性的情报信息。
36大数据专稿,原文作者 Josh Anderson 本文由36大数据翻译,任何不标明译者和出处以及本文链接
http://www.36dsj.com/archives/46187均为侵权。
我觉得可视化照片中包含的数据是一件很有趣的行为。一些相机和照片编辑软件只能做到这一点,从图像含有的红色(R)、绿色(G)和蓝色(B)值(常说的“三原色”)构建直方图,来帮助专业摄影师/编辑判断和改善色彩平衡。为了说明这一点,我将在下文提到使用下面的彩色照片及其灰度对应。
通过灰白图片是最容易开始的,根据定义,它对于任何给定的像素的三原色(R,G,B值)是一样的。在左边有一个灰度值为0,这意味着(R,G,B)的值为(0,0,0),即黑色;右边(255、255、255)为白色。在两者中我们有254种都是灰色。
备注:Grayscale-image histogram灰度图像直方图 ;Number of pixels像素数;Gray value灰色值
这是为数不多的情况:在图表中使用梯度,可能这实际上有助于理清事情,在这种情况下,根据它所显示的灰度值进行颜色标记。唯一的问题是选择一个中性的背景颜色。
备注:Grayscale-image histogram灰度图像直方图;Number of pixels像素数;Gray value灰度值
彩色图像里,我们需要分别地绘制出每一个R,G,B的直方图。为了减少杂乱,它是使用线条而不是条形图,但由于有明智的配色方案所以他们可能不需要标记。
备注:RGB-image histogram RGB图像直方图;Number of pixels像素数;Value数值
除了实现良好的色彩平衡,我觉得还有另一个问题,是一个很有趣的探讨:这对网页开发很重要:即压缩。JPEG压缩是一个相当复杂的话题,我承认我还没有真正地弄懂它。上面的彩色照片是我拍的一张高质量的(低压缩)原始的微型(800万像素)的图片。它是 46 千字节的大小。下图是相同的像素数,但更加高度压缩,质量较低。然而,它的大小只有九个千字节。
照片中的低质量应该是显而易见的,但是RGB直方图看起来明显不同吗?之前尝试这个时我真的不知道会发生什么。然而下面的直方图明显不同于上面的,他们没有因此而惊呼“相比另外一张图片,这张图片被压缩得更多”。
备注:Histogram for low-quality JPGE 低质量JPEG的直方图;Number of pixels像素数;Value数值
JPEG格式,也可以选择PNG格式。这张照片是8字节的PNG格式。
这张照片看起来比低质量的JPEG的要好很多,但也比它大了六倍(根据文件大小)和比高质量的JPEG大了三分之一。直方图也是非常不同和难以阅读的(还请注意垂直尺度的差异)。
备注:Histogram for 8-bits png 8位元PNG(一种图形文件格式)的直方图;Number of pixels 图像像素数;Value 数值
这个混乱的直方图的导致的事实是,只有256种不同的颜色可用于一个8字节的PNG (就像一个GIF).
上面的直方图数据可以从Photoshop和可能其他的图片编辑软件中提取(至少一些版本的PS可以提取)。但是没有发现直方图有任何重大区别,关于高低质量的JPEG我很好奇,想看看RGB数据是否有更复杂的表达,能突出差异。这需要提取各个RGB值,不只是为了不同的频道。
我不知道在Photoshop中如何做到这一点,所以我用R (也可用其他选项)。在一个理想世界里三维散点图可以做到很好,每一个R,G,B的维度,但三维散点图在二维屏幕上很少用到。所以我选择了一种更传统的二维散点图,用标点颜色来展示第三种颜色。在下面的例子中我(有些随意)选择绘制蓝色值对比红色值,根据绿色值把点标上颜色。例如,一个数据点代表一个图像像素的R,G,B值(30、96、92),那么将在图表上被绘制成点(30, 92),还有一个RGB颜色(0,96,0)。
我最初尝试去做这个时遇到了一些严重的越点绘制问题。为了减少这样的情况,但不是完全消除,我将点绘制的更小些,以及随机抽取“仅仅”20000个点作为样本 (将近20%的数据)。我还添加了边际分布(即相关的直方图)在绘图的无标记的末端上。这些都来源于所有的图像像素,不仅仅是样本。
Scatter plot for high-quality jpeg 高质量JPEG散点图:Blue value 蓝色值:Red value 红色值
Scatter plot for low-quality jpeg 低质量JPEG散点图;Blue value蓝色值;Red value红色值
Scatter plot for 8-bit PNG 8字节PNG散点图;Blue value蓝色值;Red value红色值
现在我们可以看到高低质量的JPEG文件之间的一个差异:后者的点和差距有更为明显对角区段。检查数据,发现在 105000像素的高质量的JPEG中大约有20000种不同的RGB值,但是只有15000个低质量的JPEG。至于PNG图,那是一个越点绘制的极端例子。确实是20000点被绘制,它们只是占有几百个不同的位置。
最终你可能成长为一个不懂复杂图像压缩的网页设计师或开发人员,我仍然不确定JPEG压缩实际上是如何运作的。但是我觉得了解下层数据布置以及通过试验构建自己的数据是很有趣的。
这篇文章最初发表在由蒂姆 · 布洛克 Infragistics博客上。
文章来源36大数据,微信公众号dashuju36 36大数据是一个专注大数据创业、大数据技术与分析、大数据商业与应用的网站。分享大数据的干货教程和大数据应用案例,提供大数据分析工具和资料下载,解决大数据产业链上的创业、技术、分析、商业、应用等问题,为大数据产业链上的公司和数据行业从业人员提供支持与服务。
End.