TNTmips

HOME

FREE PRODUCTS
  TNTlite
  TNTatlas
  TNTsim3D

DOWNLOADS
  Release Version
  Development Version
  FTP
  Language Kits
  Sample Geodata
  Reseller Resources
  Promotional

DOCUMENTATION
  Tutorials
  Technical Guides
  Quick Guides

SITE MAP


PipelineFilterLookup.sml


# PipelineFilterLookup.sml

# Sample standalone script to demonstrate a simple image pipeline
# application: applying contrast to a grayscale raster.

# If the input raster does not have a contrast table, the script computes
# a standard contrast table for a copy of the raster, then applies this table.
# A default linear contrast table is also computed for the output raster, which
# has lossless JPEG2000 compression applied.  

# 21 December 2007
# Randy Smith, MicroImages, Inc.

# Requires Version 2007:73 or later of the TNT products.

numeric err;			# error code returned
class RVC_RASTER RastIn, RastOut;		# class instances for input and output rasters

# error checking procedure
proc ReportError(numeric linenum, numeric err) {
	printf("FAILED -line: %d, error: %d\n", linenum - 1, err);
	PopupError(err); 
	}

# procedure to compute standard contrast table for copy of input raster that has no contrast table
proc computeCon(class CONTRAST con, class RVC_RASTER Rast) {
	class RVC_OBJECT tempFile;
	class RVC_RASTER tempRast;

	# copy source raster to temporary file, then close source raster
	tempFile.MakeTempFile(1);
	Rast.CopyTo(tempFile, tempRast);
	Rast.Close();

	# open temporary raster and compute standard contrast table for it
	tempRast.OpenAttached("Write");
	con.ComputeStandard(tempRast, "normalize");
	Rast = tempRast;			# reassign temporary raster to original raster variable
	tempRast.Close();			# close temporary raster
	}

#######################################  Main program  ####################################
clear();

# set context so script does not exit on error, allowing manual
# handling of errors (primarily used with CONTRAST class method
# to read a contrast table, which returns an error if no table exists).
_context.AbortOnError = 0;


# CHOOSE INPUT RASTER
GetInputRaster(RastIn);

# check to ensure that selected raster is grayscale
if (RastIn.$Info.Type == "binary" or
	RastIn.$Info.Type == "16-bit color RGB" or
	RastIn.$Info.Type == "16-bit color BGR" or
	RastIn.$Info.Type == "24-bit color RGB" or
	RastIn.$Info.Type == "24-bit color BGR") 
	{
	print("Binary and composite rasters cannot be used as input for this script.  Exiting now.");
	Exit();
	}

# get last-used contrast table from the input raster; if none, call procedure to
# make a temporary copy of the raster and compute a standard contrast table for it
class CONTRAST riContrast;
err = riContrast.Read(RastIn);
if ( err < 0 ) {
	computeCon(riContrast, RastIn);
	print("Input raster has no contrast table, setting up normalized contrast.");
	}
else
	printf("Input contrast type: %s\n", riContrast.Type); 


# CHOOSE OUTPUT RASTER
# DlgGetObject creates only an ObjItem for the output; the new raster will then be created
# by the TARGET_RVC with the desired compression.  The ObjectPath of the ObjItem is not
# valid until the output raster is actually created by the pipeline.
class RVC_OBJITEM rastOutObjItem;
DlgGetObject("Choose new raster for output", "Raster", rastOutObjItem, "NewOnly");


# PIPELINE SOURCE
# set input raster as pipeline source using its ObjItem
class IMAGE_PIPELINE_SOURCE_RVC source_rvc( RastIn.GetObjItem() );
err = source_rvc.Initialize();
if ( err < 0)
	ReportError(_context.CurrentLineNum, err);
else
	print("Source raster initialized.");


# PIPELINE FILTER
# set filter to apply a lookup table read from the raster's contrast table
class IMAGE_PIPELINE_FILTER_LOOKUP filter_lookup (source_rvc);
err = filter_lookup.SetContrastParm(riContrast);	# set contrast for filter
if ( err < 0) ReportError(_context.CurrentLineNum, err);
 
err = filter_lookup.Initialize();
if ( err < 0) 
	ReportError(_context.CurrentLineNum, err);
else
	print("Lookup filter initialized.");


# PIPELINE TARGET
# set output raster as pipeline target using its ObjItem
class IMAGE_PIPELINE_TARGET_RVC target_rvc(filter_lookup, rastOutObjItem);
target_rvc.SetCompression("JP2", 0);
err = target_rvc.Initialize();
if ( err < 0) 
	ReportError(_context.CurrentLineNum, err);
else
	print("Pipeline target initialized.");


# EXECUTE the pipeline process
target_rvc.Process();


# open the output raster to compute and save a default linear contrast table for it
# to prevent it from being "recontrasted" in the Display process.
rastOutObjItem = target_rvc.GetObjItem();		# get the real ObjItem of the raster created by the pipeline
err = RastOut.Open(rastOutObjItem, "Write");	# use the ObjItem to open the raster
if ( err < 0) ReportError(_context.CurrentLineNum, err);
print("Computing contrast table for output raster.");
 
class CONTRAST roContrast;		# compute standard linear contrast table  
err = roContrast.ComputeStandard(RastOut, "linear", "LINEAR", "Linear contrast");
if ( err < 0) ReportError(_context.CurrentLineNum, err);

RastOut.Close();		# close the output raster

print("Done.");





 


Back Home ©MicroImages, Inc. 2008 Published in the United States of America
11th Floor - Sharp Tower, 206 South 13th Street, Lincoln NE 68508-2010   USA
Business & Sales: (402)477-9554  Support: (402)477-9562  Fax: (402)477-9559
Business info@microimages.com  Support support@microimages.com  Web webmaster@microimages.com

site update: 03 July 08

page update: 24 Dec 07