/gdal-1.6.1-tcl_patched/swig/python/samples/fft.py
http://tcl-map.googlecode.com/ · Python · 139 lines · 83 code · 21 blank · 35 comment · 28 complexity · 5fac380b023cc37db17dba264b45baf9 MD5 · raw file
- #!/usr/bin/env python
- ###############################################################################
- # $Id: fft.py 13092 2007-11-26 21:12:22Z hobu $
- #
- # Project: GDAL Python samples
- # Purpose: Script to perform forward and inverse two-dimensional fast
- # Fourier transform.
- # Author: Andrey Kiselev, dron@remotesensing.org
- #
- ###############################################################################
- # Copyright (c) 2003, Andrey Kiselev <dron@remotesensing.org>
- #
- # Permission is hereby granted, free of charge, to any person obtaining a
- # copy of this software and associated documentation files (the "Software"),
- # to deal in the Software without restriction, including without limitation
- # the rights to use, copy, modify, merge, publish, distribute, sublicense,
- # and/or sell copies of the Software, and to permit persons to whom the
- # Software is furnished to do so, subject to the following conditions:
- #
- # The above copyright notice and this permission notice shall be included
- # in all copies or substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- # DEALINGS IN THE SOFTWARE.
- ###############################################################################
- try:
- from osgeo import gdal
- from osgeo.gdalconst import *
- import numpy as Numeric
- except ImportError:
- import gdal
- from gdalconst import *
- import Numeric
-
- import FFT
- import sys
- # =============================================================================
- def Usage():
- print 'Usage: fft.py [-inv] [-of out_format] [-ot out_type] infile outfile'
- print
- sys.exit( 1 )
- # =============================================================================
- # =============================================================================
- def ParseType(type):
- if type == 'Byte':
- return GDT_Byte
- elif type == 'Int16':
- return GDT_Int16
- elif type == 'UInt16':
- return GDT_UInt16
- elif type == 'Int32':
- return GDT_Int32
- elif type == 'UInt32':
- return GDT_UInt32
- elif type == 'Float32':
- return GDT_Float32
- elif type == 'Float64':
- return GDT_Float64
- elif type == 'CInt16':
- return GDT_CInt16
- elif type == 'CInt32':
- return GDT_CInt32
- elif type == 'CFloat32':
- return GDT_CFloat32
- elif type == 'CFloat64':
- return GDT_CFloat64
- else:
- return GDT_Byte
- # =============================================================================
- infile = None
- outfile = None
- format = 'GTiff'
- type = None
- transformation = 'forward'
- # Parse command line arguments.
- i = 1
- while i < len(sys.argv):
- arg = sys.argv[i]
- if arg == '-inv':
- transformation = 'inverse'
- if type == None:
- type = GDT_Float32
-
- elif arg == '-of':
- i = i + 1
- format = sys.argv[i]
- elif arg == '-ot':
- i = i + 1
- type = ParseType(sys.argv[i])
- set_type = 'yes'
- elif infile is None:
- infile = arg
- elif outfile is None:
- outfile = arg
- else:
- Usage()
- i = i + 1
- if infile is None:
- Usage()
- if outfile is None:
- Usage()
- if type == None:
- type = GDT_CFloat32
- indataset = gdal.Open( infile, GA_ReadOnly )
- out_driver = gdal.GetDriverByName(format)
- outdataset = out_driver.Create(outfile, indataset.RasterXSize, indataset.RasterYSize, indataset.RasterCount, type)
- for iBand in range(1, indataset.RasterCount + 1):
- inband = indataset.GetRasterBand(iBand)
- outband = outdataset.GetRasterBand(iBand)
- data = inband.ReadAsArray(0, 0)
- if transformation == 'forward':
- data_tr = FFT.fft2d(data)
- else:
- data_tr = FFT.inverse_fft2d(data)
- outband.WriteArray(data_tr)