解释从tif文件获取的numpy数组

时间:2016-06-10 16:59:14

标签: python image numpy tiff

我需要处理一些灰度级的tif文件,并且我一直在使用PIL将它们作为图像导入并将它们转换为numpy数组:

    np.array(Image.open(src))

我希望能够清楚地了解这些数组的值对应的内容,特别是不清楚什么值适合作为我的图像的白点或黑点。例如,如果我想将此数组转换为浮点数组,其中像素值为1表示白色值,0表示黑色,其他值在其间线性缩放。

我尝试了一些天真的方法,包括按照数组中的最大值进行缩放,但打开生成的文件,颜色级别总会有一些变化。

是否有任何文档可以正确理解存储在这些tif数组中的值?

1 个答案:

答案 0 :(得分:1)

TIFF基本上是用于存储光栅图形图像的计算机文件格式。它有很多specs,网上快速搜索可以为您提供所需的资源。

问题是您正在使用PIL作为输入库。您拥有的数组可能使用uint8数据类型,这意味着您的数据可以在0到255之间的任何位置。要获得0到1的颜色范围,请执行以下操作:

im = np.array(Image.open(src)).astype('float32')/255

请注意,您的数组可能会在第三维im[:,:, here]im.shape = (i,j,k))中给出4个图层。因此,每条跟踪im[i,j,:](代表一个像素)将成为RGBA值的四元组。

R代表红色(或红色数量),G代表绿色,B代表蓝色。 A是alpha通道,它使您具有透明度(较低的值意味着较低的不透明度和更高的透明度)。

它也可以只有RGB三层,或者如果要在灰度中绘制一层。

如果您有RGB(或RGBA但不考虑alpha)但需要单个值,您应该明白有很多不同的方法可以做到这一点。在this post @denis建议使用以下公式:

Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma
  

许多PC的gamma为2.2。有时会写出通常的R G B.   作为R'G'B'(R'= Rlin ^(1 / gamma))(纯粹的舌头咔哒声)但是在这里   我会放弃'。

最后L* = 116 * Y ^ 1/3 - 16获得亮度。

我建议你阅读他的帖子。还要考虑以下概念: