[GRASS-SVN] r33571 - grass/trunk/scripts/i.landsat.rgb

svn_grass at osgeo.org svn_grass at osgeo.org
Sat Sep 27 16:01:28 EDT 2008


Author: glynn
Date: 2008-09-27 16:01:28 -0400 (Sat, 27 Sep 2008)
New Revision: 33571

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


Added: grass/trunk/scripts/i.landsat.rgb/i.landsat.rgb.py
===================================================================
--- grass/trunk/scripts/i.landsat.rgb/i.landsat.rgb.py	                        (rev 0)
+++ grass/trunk/scripts/i.landsat.rgb/i.landsat.rgb.py	2008-09-27 20:01:28 UTC (rev 33571)
@@ -0,0 +1,139 @@
+#!/usr/bin/env python
+
+############################################################################
+#
+# MODULE:	i.landsat.rgb
+#
+# AUTHOR(S):	Markus Neteler. <neteler itc it>
+#		Hamish Bowman, scripting enhancements
+#               Converted to Python by Glynn Clements
+#
+# PURPOSE:      create pretty LANDSAT RGBs: the trick is to remove outliers 
+#               using percentiles (area under the histogram curve)
+#
+# COPYRIGHT:	(C) 2006,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.
+#
+# TODO: implement better brightness control
+#############################################################################
+
+#%Module
+#%  description: Auto-balancing of colors for LANDSAT images
+#%  keywords: raster, imagery, colors
+#%End
+#%option
+#% key: red
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT red channel
+#% required : yes
+#%end
+#%option
+#% key: green
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT green channel
+#% required : yes
+#%end
+#%option
+#% key: blue
+#% type: string
+#% gisprompt: old,cell,raster
+#% description: LANDSAT blue channel
+#% required : yes
+#%end
+#%option
+#% key: strength
+#% type: integer
+#% description: Cropping intensity (upper brightness level)
+#% options: 0-100
+#% answer : 98
+#% required : no
+#%end
+#%flag
+#% key: f
+#% description: Extend colors to full range of data on each channel
+#%end
+#%flag
+#% key: p
+#% description: Preserve relative colors, adjust brightness only
+#%end
+#%flag
+#% key: r
+#% description: Reset to standard color range
+#%end
+
+import sys
+import os
+import string
+import grass
+
+def get_percentile(map, percentile):
+    s = grass.read_command('r.univar', flags = 'ge', map = map, percentile = percentile)
+    kv = grass.parse_key_val(s)
+    return float(kv['percentile_%s' % percentile])
+
+def set_colors(map, v0, v1):
+    rules = [
+	"0% black\n",
+	"%f black\n" % v0,
+	"%f white\n" % v1,
+	"100% white\n"
+	]
+    rules = ''.join(rules)
+    grass.write_command('r.colors', map = map, rules = '-', stdin = rules)
+
+def main():
+    red = options['red']
+    green = options['green']
+    blue = options['blue']
+    brightness = options['strength']
+    full = flags['f']
+    preserve = flags['p']
+    reset = flags['r']
+
+    # 90 or 98? MAX value controls brightness
+    # think of percent (0-100), must be positive or 0
+    # must be more than "2" ?
+
+    if full:
+	for i in [red, green, blue]:
+	    grass.run_command('r.colors', map = i, color = 'grey')
+	sys.exit(0)
+
+    if reset:
+	for i in [red, green, blue]:
+	    grass.run_command('r.colors', map = i, color = 'grey255')
+	sys.exit(0)
+
+    if not preserve:
+	for i in [red, green, blue]:
+	    grass.message("Processing <%s> ..." % i)
+	    v0 = get_percentile(i, 2)
+	    v1 = get_percentile(i, brightness)
+	    grass.debug("<%s>:  min=%f   max=%f" % (i, v0, v1))
+	    set_colors(i, v0, v1)
+    else:
+	all_max = 0
+	all_min = 255
+	for i in [red, green, blue]:
+	    grass.message("Processing <%s> ..." % i)
+	    v0 = get_percentile(i, 2)
+	    v1 = get_percentile(i, brightness)
+	    grass.debug("<%s>:  min=%f   max=%f" % (i, v0, v1))
+	    all_min = min(all_min, v0)
+	    all_max = max(all_max, v1)
+	grass.debug("all_min=%f   all_max=%f" % (all_min, all_max))
+	for i in [red, green, blue]:
+	    set_colors(i, v0, v1)
+
+    # write cmd history:
+    for i in [red, green, blue]:
+	grass.run_command('r.support', map = i, history = os.environ['CMDLINE'])
+
+if __name__ == "__main__":
+    options, flags = grass.parser()
+    main()


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



More information about the grass-commit mailing list