Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 5 23:55:39 2018
@author: plousser
"""
import os, os.path, optparse, sys
import gdal
def quickL(inputFilename, quickLookBaseFilename, GRD_resol, Type, quickLookExtension):
'Create and save a quick look of the input image'
import os
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
# Open original image in slant range geometry:
input_image_driver = gdal.Open(inputFilename, 0)
ratio = max(1, input_image_driver.RasterXSize // 1000, input_image_driver.RasterYSize // 1000) # Ratio of the reduction of the read image (to avoid memory errors)
input_image = input_image_driver.ReadAsArray(0, 0, None, None, None, input_image_driver.RasterXSize//ratio, input_image_driver.RasterYSize//ratio)
# Define figure:
fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
# Define custom color map:
if Type == 'biomass':
customCmap = LinearSegmentedColormap.from_list('biomass', ['#F5F5DC', 'g', '#004500'])
if Type == 'height':
# customCmap = LinearSegmentedColormap.from_list('height', ['#F5F5DC', '#966F33', '#452400'])
customCmap = 'jet'
if Type== 'sig':
customCmap='gray'
# Display image:
if Type =='sig':
cax = ax.imshow(input_image, cmap=customCmap, vmin=0,vmax=np.nanpercentile(input_image,90),extent=(0, input_image_driver.RasterXSize*GRD_resol, 0, input_image_driver.RasterYSize*GRD_resol))
else :
cax = ax.imshow(input_image, cmap=customCmap, extent=(0, input_image_driver.RasterXSize*GRD_resol, 0, input_image_driver.RasterYSize*GRD_resol))
# Set figure Layout:
if len(gdal.Open(inputFilename).GetProjection())>0 :
ax.set_xlabel('Longitude (m)')
ax.set_ylabel('Latitude (m)')
else :
ax.set_xlabel('')
ax.set_ylabel('')
cbar = fig.colorbar(cax)
if Type == 'biomass':
cbar.set_label('Biomass (ton/ha)')
if Type == 'height':
cbar.set_label('Height (m)')
if Type== 'sig':
cbar.set_label('Backscattering')
ax.set_title(os.path.basename(quickLookBaseFilename) + '.tiff\n')
# Save figure:
canvas.print_figure(quickLookBaseFilename + '_' + Type + '_QL.' + quickLookExtension, dpi=150, bbox_inches='tight')
# Close image data set:
input_image_driver = None
###########################################################################
class OptionParser (optparse.OptionParser):
def check_required (self, opt):
option = self.get_option(opt)
# Assumes the option's 'default' is set to None!
if getattr(self.values, option.dest) is None:
self.error("%s option not supplied" % option)
##########################################################################
if __name__ == '__main__':
#==================
#parse command line
#==================
if len(sys.argv) == 1:
prog = os.path.basename(sys.argv[0])
print (" "+sys.argv[0]+' [options]')
print (" Aide : ", prog, " --help")
print (" ou : ", prog, " -h")
print ("example 1 : python %s -i inputdir/ -o outputdir/"%sys.argv[0])
sys.exit(-1)
else :
usage = "usage: %prog [options] "
parser = OptionParser(usage=usage)
parser.add_option("-i", "--inputfile", dest="inputfile", action="store", type="string", \
help="Path to the input file",default='.')
parser.add_option("-g", "--grdresol", dest="grdresol", action="store", type="float", \
help="GRD resol",default=2)
parser.add_option("-q", "--qlextension", dest="qlextension", action="store", type="choice", \
help="Output extension format",choices=['png','jpg','eps'],default='png')
parser.add_option("-t", '--type', dest="type", action="store", type="choice", \
help="Quicklook type",choices=['biomass','height','sig'],default='png')
(options, args) = parser.parse_args()
quickL(options.inputfile, options.inputfile.replace('.tiff','quicklook'), options.grdresol, options.type, options.qlextension)