[GRASS-SVN] r33633 - grass/trunk/scripts/i.oif

svn_grass at osgeo.org svn_grass at osgeo.org
Tue Sep 30 23:44:26 EDT 2008


Author: glynn
Date: 2008-09-30 23:44:25 -0400 (Tue, 30 Sep 2008)
New Revision: 33633

Added:
   grass/trunk/scripts/i.oif/i.oif.py
Log:
Convert i.oif to Python


Added: grass/trunk/scripts/i.oif/i.oif.py
===================================================================
--- grass/trunk/scripts/i.oif/i.oif.py	                        (rev 0)
+++ grass/trunk/scripts/i.oif/i.oif.py	2008-10-01 03:44:25 UTC (rev 33633)
@@ -0,0 +1,150 @@
+#!/usr/bin/env python
+
+############################################################################
+#
+# MODULE:       i.oif
+# AUTHOR(S):    Markus Neteler
+#               Converted to Python by Glynn Clements
+# PURPOSE:      calculates the Optimum Index factor of all band combinations
+#               for LANDSAT TM 1,2,3,4,5,7
+# COPYRIGHT:    (C) 1999,2008 by the GRASS Development Team
+#
+#               This program is free software under the GNU General Public
+#               License (>=v2). Read the file COPYING that comes with GRASS
+#               for details.
+#
+#############################################################################
+# Ref.: Jensen: Introductory digital image processing 1996, p.98
+#
+# Input: tm1 - tm5, tm7 (not tm6)
+#
+# written by Markus Neteler 21.July 1998
+#            neteler geog.uni-hannover.de
+# updated for GRASS 5.7 by Michael Barton 2004/04/05
+
+
+#% Module
+#%  description: Calculates Optimum-Index-Factor table for LANDSAT TM bands 1-5, & 7
+#%  keywords: raster, imagery, statistics
+#% End
+#% option
+#% key: image1
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT TM band 1.
+#% required : yes
+#% end
+#% option
+#% key: image2
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT TM band 2.
+#% required : yes
+#% end
+#% option
+#% key: image3
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT TM band 3.
+#% required : yes
+#% end
+#% option
+#% key: image4
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT TM band 4.
+#% required : yes
+#% end
+#% option
+#% key: image5
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT TM band 5.
+#% required : yes
+#% end
+#% option
+#% key: image7
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT TM band 7.
+#% required : yes
+#% end
+#% Flag
+#% key: g
+#% description: Print in shell script style
+#% End
+
+import sys
+import os
+import grass
+
+bands = [1,2,3,4,5,7]
+
+def oifcalc(sdev, corr, k1, k2, k3):
+
+    # calculate SUM of Stddeviations:
+    ssdev = [sdev[k1], sdev[k2], sdev[k3]]
+    numer = sum(ssdev)
+
+    # calculate SUM of absolute(Correlation values):
+    scorr = [corr[k1,k2], corr[k1,k3], corr[k2,k3]]
+    denom = sum(map(abs, scorr))
+
+    # Calculate OIF index:
+    #     Divide (SUM of Stddeviations) and (SUM of Correlation)
+    return numer / denom
+
+def perms():
+    for i in range(0,4):
+	for j in range(i+1,5):
+	    for k in range(j+1,6):
+		yield (bands[i], bands[j], bands[k])
+
+def main():
+    shell = flags['g']
+    image = {}
+    for band in bands:
+	image[band] = options['image%d' % band]
+
+    # calculate the Stddev for TM bands
+    grass.verbose("Calculating Standard deviations for all bands:")
+    stddev = {}
+    for band in bands:
+	grass.verbose("band %d" % band)
+	s = grass.read_command('r.univar', flags = 'g', map = image[band])
+	kv = grass.parse_key_val(s)
+	stddev[band] = float(kv['stddev'])
+
+    grass.verbose("Calculating Correlation Matrix")
+    correlation = {}
+    s = grass.read_command('r.covar', flags = 'r', map = [image[band] for band in bands])
+    for i, row in zip(bands, s.splitlines()):
+	for j, cell in zip(bands, row.split(' ')):
+	    correlation[i,j] = float(cell)
+
+    # Calculate all combinations
+    grass.verbose("Calculating OIF for the 20 band combinations...")
+
+    oif = []
+    for p in perms():
+	oif.append((oifcalc(stddev, correlation, *p), p))
+    oif.sort(reverse = True)
+
+    grass.verbose("Ready.")
+    grass.verbose("The Optimum Index Factor analysis result:")
+    grass.verbose("    (Best combination comes first.)")
+
+    if shell:
+	fmt = "%d%d%d:%f\n"
+    else:
+	fmt = "%d%d%d:  %f\n"
+
+    outf = file('i.oif.result', 'w')
+    for v, p in oif:
+	sys.stdout.write(fmt % (p + (v,)))
+	outf.write(fmt % (p + (v,)))
+    outf.close()
+
+if __name__ == "__main__":
+    options, flags = grass.parser()
+    main()


Property changes on: grass/trunk/scripts/i.oif/i.oif.py
___________________________________________________________________
Name: svn:executable
   + *



More information about the grass-commit mailing list