AMBHAS
radarsat.py
Go to the documentation of this file.
00001 #! /usr/bin/env python
00002 # -*- coding: utf-8 -*-
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 # import the required library
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         # read the data, GCPs and projection
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         # calculate the sinclair matrix
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         # calculate the magnitude
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         # calculate the sigma_naught
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             # filter the image using median filter 
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             # filter the image using wiener filter 
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         # save the data as Geotiff
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         # make the incidence angle image
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         # save the incidence angle image as gtiff
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         
 All Classes Namespaces Files Functions Variables