gdal翻译比例并使用python保存到jpg

时间:2018-05-24 08:10:57

标签: python image gis gdal

我知道如何使用gdal translate来缩放并通过cmd行保存到jpg:

gdal_translate image.bsq image.jpg -of JPEG -outsize 10% 10% -scale

这会产生(我称之为漂亮的图像):

enter image description here

我想通过python生成类似的图像,如:

from osgeo import gdal
img_bsq  = 'image.bsq'
img_jpg  = 'image.jpg'  
gdal.Translate(img_jpg, img_bsq, format='JPEG', width=1024, height=0, scaleParams=[[500,1000,10,20]])

我认为问题是如何正确选择scaleParams。似乎cmd行上的-scale会根据man gdal_translate自动计算值:

-scale [src_min src_max [dst_min dst_max]]:
           Rescale the input pixels values from the range src_min to src_max to the range dst_min to dst_max. If omitted the output range is 0
           to 255. If omitted the input range is automatically computed from the source data.

有关如何选择scaleParams(或其他相关选项)的任何提示?

1 个答案:

答案 0 :(得分:2)

您也应该可以将其留空,例如:

gdal.Translate(img_jpg, img_bsq, format='JPEG', width=1024, height=0, scaleParams=[[]])

这会导致GDAL自行猜测,如文档中所述:

  

-scale [src_min src_max [dst_min dst_max]]:       将输入像素值从src_min到src_max的范围重新缩放到范围dst_min到dst_max。如果省略,则输出范围为0到   255.如果省略,则从源数据自动计算输入范围。

http://www.gdal.org/gdal_translate.html

或者,您也可以检索统计数据(每个频段)并自己制作一些内容。

获取统计数据:

ds = gdal.Open('img_bsq')
stats = [ds.GetRasterBand(i+1).GetStatistics(True, True) for i in range(ds.RasterCount)]
ds = None

vmin, vmax, vmean, vstd = zip(*stats)

根据这些统计数据,您应该能够想出一些理想的伸展效果。如果你想在每个乐队的最小和最大之间进行缩放:

scaleParams = list(zip(*[vmin, vmax]))

或者如果你想使用绝对最高和最低(超过所有乐队)

scaleParams = [[min(vmin), max(vmax)]]