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


fixseam.sml


### fixseam.sml

### Script to fill lines and columns lines of null cells
### at seams in a raster mosaic.  Seams of null cells must
### be only one cell wide (one-cell overlap of segments is OK).  
### Each null cell in a seam is replaced by the average of the
### non-null cells in a 3 x 3 focal area centered on the cell.
### The script fills vertical seams, then horizontal seams,
### then vertical seams again to account for null cells remaining
### from horizontal seam overlaps.

class RVC_RASTER Mosaic, Fixed;
class RVC_RASTER Temp1, Temp2;
numeric numcols, numlins, nullval;
string rasttype$;

GetInputRaster(Mosaic);
numcols = NumCols(Mosaic);
numlins = NumLins(Mosaic);
string rasttype$ = RastType(Mosaic);
nullval = NullValue(Mosaic);
GetOutputRaster(Fixed, numlins, numcols, rasttype$);

numeric lin, col, val, j, k, m;
proc horiz(class RVC_RASTER Rastin, class RVC_RASTER Rastout)  # declare procedure to fix horizontal seams
	{
		for lin = 1 to numlins {
			for col = 1 to numcols {
				k = Rastin[lin,col];
				if (IsNull(k) == 1) {
					j = Rastin[lin-1,col];
					m = Rastin[lin+1,col];
					if ((IsNull(j) == 0) and (IsNull(m) == 0)) then
						val = FocalMean(Rastin,3,3,lin,col);
					else val = Rastin[lin,col];
					}
				else val = Rastin[lin,col];
				Rastout[lin,col] = val;
				}
			}
	}

numeric p, q, r;
proc vert(class RVC_RASTER Rastin, class RVC_RASTER Rastout)	# declare procedure to fix vertical seams
	{
		for lin = 1 to numlins {
			for col = 1 to numcols {
				q = Rastin[lin,col];
				if (IsNull(q) == 1) {
					p = Rastin[lin,col-1];
					r = Rastin[lin,col+1];
					if ((IsNull(p) == 0) and (IsNull(r) == 0)) then
						val = FocalMean(Rastin,3,3,lin,col);
					else val = Rastin[lin,col];
					}
				else val = Rastin[lin,col];
				Rastout[lin,col] = val;
				}
			}
	}
CreateTempRaster(Temp1,numlins,numcols,rasttype$);
SetNull(Temp1,nullval);

vert(Mosaic,Temp1);		# process vertical seams

CreateTempRaster(Temp2,numlins,numcols,rasttype$);
SetNull(Temp2,nullval);

horiz(Temp1,Temp2);		# process horizontal seams


vert(Temp2,Fixed);		# process remaining vertical seams

DeleteTempRaster(Temp1);
DeleteTempRaster(Temp2);

CreateHistogram(Fixed);
CreatePyramid(Fixed);
CopySubobjects(Mosaic,Fixed,"GEOREF");


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

9 May 2008

page update: 14 Aug 07