我正在使用以下代码下载Sentinel-2图像
import boto3
s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('sentinel-s2-l1c')
path = 'tiles/36/R/UU/2017/5/14/0/'
object = bucket.Object(path + 'B02.jp2')
object.download_file('B02.jp2')
object = bucket.Object(path + 'B03.jp2')
object.download_file('B03.jp2')
object = bucket.Object(path + 'B04.jp2')
object.download_file('B04.jp2')
我在磁盘上获得了3张灰度JP2图像。
然后我尝试将颜色图层与以下代码混合
import matplotlib.image as mpimg
import numpy as np
from PIL import Image
Image.MAX_IMAGE_PIXELS = 1000000000
print('Reading B04.jp2...')
img_red = mpimg.imread('B04.jp2')
print('Reading B03.jp2...')
img_green = mpimg.imread('B03.jp2')
print('Reading B02.jp2...')
img_blue = mpimg.imread('B02.jp2')
img = np.dstack((img_red, img_green, img_blue))
img = np.divide(img, 256)
img = img.astype(np.uint8)
mpimg.imsave('MIX.jpeg', img, format='jpg')
结果看起来非常差,非常暗淡,几乎是黑白色。
我想要这样的事情:
或者喜欢预览
虽然我的版本是
(对不起)
UDPATE
我发现图像可能是12位。当我试过12时,我看到了曝光过度。所以在实验上我发现最好的信息是14位。
UDPATE 2
虽然即使是14位,我也有过多的过度曝光区域。这是巴哈马:
答案 0 :(得分:0)
我今天研究了这个问题,我认为你的问题就是分裂。像kazemakase说的那样明智的是乘以255和divice乘以最大值,但矩阵非常大(因为太大而无法处理)。 我用过这个:
max_pixel_value = rgb_image.max()
rgb_image = np.multiply(rgb_image, 255.0)
rgb_image = np.divide(rgb_image, max_pixel_value)
rgb_image = rgb_image.astype(np.uint8)
你也使用了错误的乐队(我想,但我不确定!)。红色应为5级和蓝色1或2.有关详细信息,请参阅https://en.wikipedia.org/wiki/Sentinel-2#Instruments。
不幸的是,第1和第5频段的数据比第3频段的数据要小得多。因此我用cv2调整了它的大小(PIL在大小和所有方面都有问题)。所以这造成了很少的计算错误,新图片看起来并没有那么好。