Go to the documentation of this file.00001
00002
00003 """
00004 Created on Sat Oct 9 17:06:59 2010
00005 by taking help from
00006 http://benjamindeschamps.ca/blog/2009/11/12/processing-radarsat-2-imagery-reading-raw-data-and-saving-rgb-composites/
00007 @author: sat kumar tomer
00008 """
00009
00010 import numpy
00011 import math
00012 from osgeo import gdal
00013 from xml.dom import minidom
00014 import scipy.signal
00015
00016
00017 class calibrate:
00018 def __init__(self,inpath):
00019
00020 self.inpath = inpath
00021
00022 dataset = gdal.Open("RADARSAT_2_CALIB:SIGMA0:" + inpath + "product.xml")
00023 self.geotransform = dataset.GetGeoTransform()
00024 self.gcps = dataset.GetGCPs()
00025 self.gcpproj = dataset.GetGCPProjection()
00026 self.RasterXSize = dataset.RasterXSize
00027 self.RasterYSize = dataset.RasterYSize
00028
00029
00030 S_HH = dataset.GetRasterBand(1).ReadAsArray()
00031 S_HV = dataset.GetRasterBand(3).ReadAsArray()
00032 S_VH = dataset.GetRasterBand(4).ReadAsArray()
00033 S_VV = dataset.GetRasterBand(2).ReadAsArray()
00034
00035
00036 S_HH_ABS = numpy.absolute(S_HH);
00037 S_HV_ABS = numpy.absolute(S_HV);
00038 S_VH_ABS = numpy.absolute(S_VH);
00039 S_VV_ABS = numpy.absolute(S_VV);
00040
00041
00042 self.SigmaHH = 20*numpy.log10(S_HH_ABS)
00043 self.SigmaHV = 20*numpy.log10(S_HV_ABS)
00044 self.SigmaVH = 20*numpy.log10(S_VH_ABS)
00045 self.SigmaVV = 20*numpy.log10(S_VV_ABS)
00046
00047 def speckle_filter(self,filter_name,ws):
00048
00049 if filter_name == 'median':
00050
00051 self.SigmaHH = scipy.signal.medfilt2d(self.SigmaHH, kernel_size=ws)
00052 self.SigmaHV = scipy.signal.medfilt2d(self.SigmaHV, kernel_size=ws)
00053 self.SigmaVH = scipy.signal.medfilt2d(self.SigmaVH, kernel_size=ws)
00054 self.SigmaVV = scipy.signal.medfilt2d(self.SigmaVV, kernel_size=ws)
00055
00056 elif filter_name == 'wiener':
00057
00058 self.SigmaHH = scipy.signal.wiener(self.SigmaHH,mysize=(ws,ws),noise=None)
00059 self.SigmaHV = scipy.signal.wiener(self.SigmaHV,mysize=(ws,ws),noise=None)
00060 self.SigmaVH = scipy.signal.wiener(self.SigmaVH,mysize=(ws,ws),noise=None)
00061 self.SigmaVV = scipy.signal.wiener(self.SigmaVV,mysize=(ws,ws),noise=None)
00062
00063 else:
00064 print 'the name of filter not understood'
00065
00066 def save_tiff(self,outfile_sigma):
00067
00068 driver = gdal.GetDriverByName('GTiff')
00069 output_dataset = driver.Create(outfile_sigma, self.RasterXSize, self.RasterYSize,4,gdal.GDT_Float32)
00070 output_dataset.SetGeoTransform(self.geotransform)
00071 output_dataset.SetGCPs(self.gcps, self.gcpproj)
00072 output_dataset.GetRasterBand(1).WriteArray(self.SigmaHH, 0, 0)
00073 output_dataset.GetRasterBand(2).WriteArray(self.SigmaHV, 0, 0)
00074 output_dataset.GetRasterBand(3).WriteArray(self.SigmaVH, 0, 0)
00075 output_dataset.GetRasterBand(4).WriteArray(self.SigmaVV, 0, 0)
00076 output_dataset = None
00077
00078 def incidence_angle(self,outfile_ia):
00079
00080 xmldoc = minidom.parse(self.inpath+"lutSigma.xml")
00081 SigmaGains = xmldoc.getElementsByTagName('gains')
00082 SigmaGains = SigmaGains[0].toxml()
00083 SigmaGains = SigmaGains[7:-8]
00084 SigmaGains = SigmaGains.split(' ')
00085 xmldoc = minidom.parse(self.inpath+"lutBeta.xml")
00086 BetaGains = xmldoc.getElementsByTagName('gains')
00087 BetaGains = BetaGains[0].toxml()
00088 BetaGains = BetaGains[7:-8]
00089 BetaGains = BetaGains.split(' ')
00090 IncidenceAngle = numpy.zeros([self.RasterYSize,self.RasterXSize])
00091 for i in range(IncidenceAngle.shape[0]):
00092 for j in range(IncidenceAngle.shape[1]):
00093 IncidenceAngle[i,j]=math.asin((float(BetaGains[j])/float(SigmaGains[j]))**2)
00094
00095
00096 driver = gdal.GetDriverByName('GTiff')
00097 output_IA = driver.Create(outfile_ia, self.RasterXSize, self.RasterYSize,1,gdal.GDT_Float32)
00098 output_IA.SetGeoTransform(self.geotransform)
00099 output_IA.SetGCPs(self.gcps, self.gcpproj)
00100 output_IA.GetRasterBand(1).WriteArray(IncidenceAngle, 0, 0)
00101 output_IA = None
00102