【问题标题】:Combine arrays to raster (jpeg)将数组合并为栅格(jpeg)
【发布时间】:2015-12-20 10:00:26
【问题描述】:

我整天都在尝试将三个 ndarray 合并到一张 jpeg 图片。我使用 gdal 库提取三个波段。导出的值在数组中,如下所示:

[[ 6355.  6586.  6646. ...,   704.   671.   725.]
 [ 5853.  6031.  6107. ...,   782.   813.   897.]
 [ 4632.  4748.  4305. ...,   837.   869.   802.]
 ..., 
 [ 1032.  1090.  1018. ...,  1500.  1441.  1387.]
 [  958.   980.   913. ...,  1522.  1455.  1391.]
 [  883.   932.   966. ...,  1489.  1369.  1378.]]

这是从 pix 文件中提取的一个波段。我有三个乐队。在这里,我正在尝试组合这些乐队:

rgbArray = np.zeros((rows,cols,3), dtype=np.uint8)
band1 = dataset.GetRasterBand(closest_channel(dict_channel, 640)-1)
band2 = dataset.GetRasterBand(closest_channel(dict_channel, 550)-1)
band3 = dataset.GetRasterBand(closest_channel(dict_channel, 460)-1)
data1 = band1.ReadAsArray (0, 0, cols, rows).astype(np.float)
data2 = band2.ReadAsArray (0, 0, cols, rows).astype(np.float)
data3 = band3.ReadAsArray (0, 0, cols, rows).astype(np.float)
rgbArray[..., 0] = data1
rgbArray[..., 1] = data2
rgbArray[..., 2] = data3
img = Image.fromarray(rgbArray, 'RGB')

图片看起来像这样:

当然不是好结果。它应该是从地面上的飞机上拍摄的照片。

我会很高兴得到任何帮助 非常感谢

【问题讨论】:

  • data1、data2 和 data3 是浮点数组,但 rgbArray 是 uint8。您应该先将浮点数组转换为范围 (0, 255),然后再将它们分配给 rbgArray。
  • 非常感谢,和 memoselyk 提到的一样。感谢您的帮助。

标签: python image numpy gdal pillow


【解决方案1】:

根据数据的域,将其缩放到 [0, 255] 范围内。

一种天真的方法是考虑数据的范围,信号的最大范围,例如

[...]

data1 = band1.ReadAsArray (0, 0, cols, rows).astype(np.float)

[...]

# Normalize data range
max1 = np.nanmax(data1)
min1 = np.nanmax(data1)

data1 = ((data1 - min1)/(max1 - min1)) * 255

[...]  

rgbArray[..., 0] = data1.astype(int)

【讨论】:

  • 非常感谢,它有效!我正在尝试将 data1 与 255 相乘,但我没有尝试组合 min - 值。图片看起来不错,就是有点暗。我应该使用 alpha 通道使图像变亮一点吗?
  • 不... Alpha 通道有不同的用途。正确的做法是图片的increase the brightness。
  • 谢谢它看起来并不容易,但我会试试这个。
  • 选项 1 是自己做the conversion,操作数据并将其转换回来。选项 2 使用 a library 或 tool。
  • 现在看起来好多了。非常感谢您的帮助:-)
猜你喜欢
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2013-03-30
  • 2021-08-15
相关资源
最近更新 更多