home products news downloads documentation support gallery online maps resellers search
TNTmips Downloads Menu

HOME

CONTACT US

CURRENT RELEASE
  TNT 2013

DEVELOPMENT VERSION
  TNT 2014

TNTmips Pro
PRIOR RELEASES
  TNT 2012

FREE SOFTWARE
  TNTmips Free
  TNTatlas
  TNTsdk

MORE DOWNLOADS
  HASP Key Driver
  Screen Recorder
  TNT Language Kits
  Sample Geodata
  TNT Scripts

DOCUMENTATION
  TNTmips Tutorials
  Tutorial Datasets
  Technical Guides
  Scripts
  Quick Guides

MORE INFO
  Download FAQs
  FTP
  Download Managers
  Find Reseller

SITE MAP


WATER.sml

See other Scripts by Jack? ...


# ------------------------------------------------------------
# WATER.sml
# ------------------------------------------------------------
# SET WARNING LEVEL:
  $warnings 3
# ------------------------------------------------------------
# DEFINE PROCEDURE writeTitle:
# PURPOSE: WRITES TITLE & AUTHOR INFO TO CONSOLE WINDOW.
  proc writeTitle() begin
     printf("WATER.sml:\n");
     printf("         VERSION: November 15, 2005\n");
     printf("         PURPOSE: MAKE A MERGED WATER & ");
     printf("LAND IMAGE.\n");
     printf("         DETAILS: FAQs_by_Jack G\n");
     printf("          AUTHOR: Dr. Jack F. Paris\n");
     printf("    CONTACT INFO: jparis37@msn.com ");
     printf(" 303-775-1195\n");
     printf("     ALLOWED USE: ONLY NON-COMMERCIAL\n\n");
  end
# ------------------------------------------------------------
# DECLARE VARIABLES:
  numeric nlins,ncols;
  numeric m,d,tLP,v,nc,wm,pW,pL,x,y,yt,facBL,offNA;
  numeric sBL_8,sGL_8,sRL_8,sNA_8;
  numeric srfiBL,srfiNA;
  array sBL_8[65536],sGL_8[65536],sRL_8[65536],sNA_8[65536];
  numeric i,mini,srfiBLmaxW,srfiGLmaxW,srfiRLmaxW;
  numeric srfiBLmaxL,srfiGLmaxL,srfiRLmaxL,srfiNAmaxL;
  numeric redderW,brighterW,brightenDarkW;
  numeric redderL,brighterL,brightenDarkL;
  numeric pW,pL;
  string stype$;
  raster SRFIBL,SRFIGL,SRFIRL,SRFINA,WATERMASK;
  raster IMAGE;
  numeric iB,iG,iR,fB,fG,fR,fCLR;
# ------------------------------------------------------------
# DEFINE VALUES FOR fR, and fG:
  fR = 2^16; fG = 2^8; fB = 1;
# ------------------------------------------------------------
# DEFINE STRING VARIABLES FOR POPUP WINDOWS:
  string t$,p$,p1$,p2$,p3$,p4$,p5$,p6$,p7$,p8$,p9$;
  string p10$,p11$,p12$,p13$,p14$,p15$,p16$,p17$,p18$,p19$;
  string p20$,p21$;
# ------------------------------------------------------------
# CLEAR CONSOLE WINDOW & REQUEST REPOSITIONING:
  p1$ = "CONSOLE-WINDOW ADJUSTMENT:\n";
  p2$ = "* REPOSITION the CONSOLE WINDOW.\n";
  p3$ = "* Then, CLICK OK.";
  p$  = p1$ + p2$ + p3$;
  PopupMessage(p$);
# ------------------------------------------------------------
# DEFINE proc checkHisto(Band)
# PURPOSE: Check that Input Raster has a Full (Unsampled)
#          Histogram.  If Not, Then Recompute Histogram.
  proc checkHisto (raster Band) begin
     local numeric sampleInt;
     sampleInt = HistogramGetSampleInterval(Band);
     if (sampleInt > 1) begin
        DeleteHistogram(Band); CreateHistogram(Band,0);
     end
     else if (sampleInt == -1) then	begin
        CreateHistogram(Band,0);
     end
  end
# ------------------------------------------------------------
# USER INPUTS:
# ENHANCEDMENT DEFAULTS:
  redderW       = 1.18;
  brighterW     = 1.00;
  brightenDarkW = 1.43;
  redderL       = 0.95;
  brighterL     = 1.00;
  brightenDarkL = 1.25;
# ------------------------------------------------------------
# TNTmips VERSION / PATCH INPUT:
  p1$ = "VERSION / PATCH ENTRY:\n";
  p2$ = "   Yes: Running TNTmips V7.1 With PATCH\n";
  p3$ = "        Dated July 13, 2005, or LATER\n";
  p4$ = "    No: Running Earlier VERSION or PATCH.";
  p$ = p1$ + p2$ + p3$ + p4$;
  fCLR = PopupYesNo(p$,1);
  if (fCLR == 1) then begin
     fR = 1; fB = 2^16;
  end
# ------------------------------------------------------------
# ACCEPT ENHANCEMENT DEFAULTS:
  p$ = "Do You Want to Apply Default ENHANCEMENTS?";
  d =  PopupYesNo(p$,0);
# ------------------------------------------------------------
# WATER-MASK OPTION:
  p1$ = "WATER-MASK OPTION ENTRY:\n";
  p2$ = "   OPTIONS:\n";
  p3$ = "      1: Create a NEW WATERMASK Raster.\n";
  p4$ = "      2: Use an EXISTING WATERMASK Raster.\n";
  p5$ = "         Existing Raster Must Match SRFI Rasters.\n";
  p6$ = "OPTION ENTERED:";
  p$  = p1$ + p2$ + p3$ + p4$ + p5$ + p6$;
  m = PopupNum(p$,2,1,2,0);
# ------------------------------------------------------------
# LAND-IMAGE OPTION:
  p1$ = "LAND-IMAGE OPTION ENTRY:\n";
  p2$ = "   OPTIONS:\n";
  p3$ = "      1: COLOR INFRARED IMAGE (CIR).\n";
  p4$ = "      2. NATURAL COLOR IMAGE.\n";
  p5$ = "      3: GRAYSCALE (GREEN BAND ONLY) IMAGE.\n";
  p6$ = "      4: GRAYSCALE (NIR BAND ONLY) IMAGE.\n";
  p7$ = "OPTION ENTERED:";
  p$  = p1$ + p2$ + p3$ + p4$ + p5$ +p6$ +p7$;
  tLP = PopupNum(p$,4,1,4,0);
# ------------------------------------------------------------
# MAKE WATER-COLORS REDDER:
  p1$ = "REDDER-WATER-COLORS PARAMETER ENTRY:\n"; 
  p2$ = "VALUE OF redderW ENTERED:";
  p$ = p1$ + p2$;
  if (d == 0) then begin
     redderW = PopupNum(p$,redderW,0.1,2,2);
  end
# ------------------------------------------------------------
# MAKE ALL-WATER-COLORS BRIGHTER:
  p1$ = "BRIGHTER-WATER-COLORS PARAMETER ENTRY:\n";
  p2$ = "VALUE FOR brighterW ENTERED:";
  p$ = p1$ + p2$;
  if (d == 0) then begin
     brighterW = PopupNum(p$,brighterW,0.1,2,2);
  end
# ------------------------------------------------------------
# MAKE DARK-WATER-COLORS BRIGHTER:
  p1$ = "BRIGHTEN-DARK-WATER-COLORS PARAMETER ENTRY:\n";
  p2$ = "VALUE OF brightenDarkW ENTERED:";
  p$ = p1$ + p2$;
  if (d == 0) then begin
     brightenDarkW = PopupNum(p$,brightenDarkW,0.1,2,2);
  end
# ------------------------------------------------------------
# MAKE LAND-COLORS REDDER:
  p1$ = "REDDER-LAND-COLORS PARAMETER ENTRY:\n";
  p2$ = "VALUE OF redderL ENTERED:";
  p$ = p1$ + p2$;
  if (d == 0) then begin
     if (tLP < 3) then begin
        redderL = PopupNum(p$,redderL,0.1,2,2);
     end
  end
# ------------------------------------------------------------
# MAKE ALL-LAND-COLORS BRIGHTER:
  p1$ = "BRIGHTER-LAND-COLORS PARAMETER ENTRY:\n";
  p2$ = "VALUE OF brighterL ENTERED:";
  p$ = p1$ + p2$;
  if (d == 0) then begin
     brighterL = PopupNum(p$,brighterL,0.1,2,2);
  end
# ------------------------------------------------------------
# MAKE DARK-LAND-COLORS BRIGHTER:
  p1$ = "BRIGHTEN-DARK-LAND-COLORS PARAMETER ENTRY:\n";
  p2$ = "VALUE OF brightenDarkL ENTERED:";
  p$ = p1$ + p2$;
  if (d == 0) then begin
     brightenDarkL = PopupNum(p$,brightenDarkL,0.1,2,2);
  end
# ------------------------------------------------------------
# LAND-WATER BOUNDARY CONTROL PARAMETERS:
  if (m == 1) then begin
     p1$ = "LINE-EQUATION MULTIPLIER ENTRY:\n";
     p2$ = "   RANGE: 0.00 to 10.00\n";
     p3$ = "VALUE OF facBL ENTERED:";
     p$ = p1$ + p2$ + p3$;
     facBL = PopupNum(p$,0.16,0.0,10,2);
     p1$ = "LINE-EQUATION SRFINA OFFSET ENTRY:\n";
     p2$ = "   RANGE: 1 to 2000\n";
     p3$ = "VALUE OF offNA ENTERED:";
     p$ = p1$ + p2$ + p3$;
     offNA = PopupNum(p$,925,1,3000,0);
  end
# ------------------------------------------------------------
# WRITE TITLE & AUTHOR INFORMATION:
  clear();
  writeTitle();
# ------------------------------------------------------------
# PRINT USER INPUTS TO CONSOLE WINDOW:
  if (m == 1) then begin
     printf("A NEW WATER-MASK IS BEING CREATED.\n\n");
  end
  if (m == 2) then begin
     printf("AN EXISTING WATER-MASK IS BEING USED.\n");
     printf("NOTE: Existing WATER-MASK Must Match");
     printf(" SRFI rasters.\n\n");
  end
  if (tLP == 1) then begin
     printf("LAND PIXELS WILL HAVE CIR COLORS.");
  end
  if (tLP == 2) then begin
     printf("LAND PIXELS WILL HAVE NATURAL COLORS.");
  end
  if (tLP == 3) then begin
     printf("LAND PIXELS WILL HAVE GREEN-BAND GRAY TONES.");
  end
  if (tLP == 4) then begin
     printf("LAND PIXELS WILL HAVE NIR-BAND GRAY TONES.");
  end
  printf("\n\n");
  printf("IMAGE ENHANCEMENT PARAMETERS FOR WATER PIXELS:\n");
  printf("         redderW = %4.2f\n",redderW);
  printf("       brighterW = %4.2f\n",brighterW);
  printf("   brightenDarkW = %4.2f\n\n",brightenDarkW);
  printf("IMAGE ENHANCEMENT PARAMETERS FOR LAND PIXELS:\n");
  if (tLP < 3) then begin
     printf("         redderL = %4.2f\n",redderL);
  end
  printf("       brighterL = %4.2f\n",brighterL);
  printf("   brightenDarkL = %4.2f\n",brightenDarkL);
  printf("\n");
  if (m == 1) then begin
     printf("WATERMASK CONTROL PARAMETERS:\n");
     printf("        facBL = %4.2f\n",facBL);
     printf("        offNA = %4d\n\n",offNA);
  end
# ------------------------------------------------------------
# OPEN SRFIsfc RASTERS:
  printf("OPEN SRFIsfc RASTERS (ANY APPROPRIATE SOURCE):\n");
  printf("   WARNING!  MUST be SURFACE-RELATED.\n");
  printf("   SRFIBL");
  GetInputRaster(SRFIBL);
  nlins = NumLins(SRFIBL); ncols = NumCols(SRFIBL);
  stype$ = RastType(SRFIBL);
  checkHisto(SRFIBL);
  printf("  SRFIGL");
  GetInputRaster(SRFIGL,nlins,ncols,stype$);
  checkHisto(SRFIGL);
  printf("  SRFIRL");
  GetInputRaster(SRFIRL,nlins,ncols,stype$);
  checkHisto(SRFIRL);
  printf("  SRFINA");
  GetInputRaster(SRFINA,nlins,ncols,stype$);
  checkHisto(SRFINA);
  printf("\n\n");
# ------------------------------------------------------------
# IF m == 2, OPEN WATER-MASK RASTER:
  if (m == 2) then begin
     printf("OPEN WATERMASK RASTER.");
     GetInputRaster(WATERMASK,nlins,ncols,"binary");
     checkHisto(WATERMASK);
     IgnoreNull(WATERMASK);
     printf("\n\n");
  end
# ------------------------------------------------------------
# IF m == 1, CREATE NEW OUTPUT RASTER(S:
  printf("CREATE NEW OUTPUT RASTER(S):\n");
  if (m == 1) then begin
     printf("   WATERMASK");
     GetOutputRaster(WATERMASK,nlins,ncols,"binary");
     IgnoreNull(WATERMASK);
     CopySubobjects(SRFIBL,WATERMASK,"GEOREF");
     printf("  IMAGE");
     GetOutputRaster(IMAGE,nlins,ncols,"24-bit color RGB");
     IgnoreNull(IMAGE);
     CopySubobjects(SRFIBL,IMAGE,"GEOREF");
  end
# ------------------------------------------------------------
# IF m == 2, CREATE NEW IMAGE RASTER ONLY:
  if (m == 2) then begin
     printf("   IMAGE");
     GetOutputRaster(IMAGE,nlins,ncols,"24-bit color RGB");
     IgnoreNull(IMAGE);
     CopySubobjects(SRFIBL,IMAGE,"GEOREF");
  end
  printf("\n\n");
# ------------------------------------------------------------
# PRODUCE VALUES FOR OUTPUT WATERMASK PIXELS:
  if (m == 1) then begin
     printf("FILLING WATERMASK RASTER WITH VALUES.");
        for each SRFINA begin
           x = SRFIBL; nc = IsNull(x);
           if (nc == 0) then begin
              wm = 1; yt = round(facBL * x + offNA);
              y = SRFINA;
              if (y > yt) then wm = 0;
           end
           WATERMASK = wm;
        end
     printf("\n\n");
  end
# ------------------------------------------------------------
# PRODUCE VALUES FOR OUTPUT IMAGE RASTER WATER-PIXELS:
  srfiGLmaxW = 1500 / brighterW;
  srfiRLmaxW = srfiGLmaxW / (redderW^1.51);
  srfiBLmaxW = srfiGLmaxW * redderW;
  pW = 1 / brightenDarkW;
  printf("DERIVED ENHANCEMENT FACTORS FOR WATER PIXELS:\n");
  printf("   srfiBLmaxW = %4d\n",srfiBLmaxW);
  printf("   srfiGLmaxW = %4d\n",srfiGLmaxW);
  printf("   srfiRLmaxW = %4d\n",srfiRLmaxW);
  printf("           pW = %4.2f\n\n",pW);
  for i=1 to 65535 begin
     v = 1 + round(254*(((i - 1) / srfiBLmaxW)^pW));
     if (v < 1) then v = 1;
     if (v > 255) then v = 255;
     sBL_8[i] = v;
  end
  for i=1 to 65535 begin
     v = 1 + round(254*(((i - 1) / srfiGLmaxW)^pW));
     if (v < 1) then v = 1;
     if (v > 255) then v = 255;
     sGL_8[i] = v;
  end
  for i=1 to 65535 begin
     v = 1 + round(254*(((i - 1) / srfiRLmaxW)^pW));
     if (v < 1) then v = 1;
     if (v > 255) then v = 255;
     sRL_8[i] = v;
  end
  if (tLP == 1) then begin
     srfiRLmaxL = 5500 / brighterL;
     srfiNAmaxL = srfiRLmaxL / redderL;
     srfiGLmaxL = srfiRLmaxL * (redderL^1.01);
     srfiBLmaxL = srfiRLmaxL * (redderL^1.68);
  end
  if (tLP == 2) then begin
     srfiGLmaxL = 3951 / brighterL;
     srfiBLmaxL = srfiGLmaxL * redderL;
     srfiRLmaxL = srfiGLmaxL / (redderL^1.65);
     srfiNAmaxL = srfiGLmaxL / (redderL^1.97);
  end
  if (tLP == 3) then begin
     srfiGLmaxL = 3951 / brighterL;
     srfiBLmaxL = srfiGLmaxL * redderL;
     srfiRLmaxL = srfiGLmaxL / (redderL^1.65);
     srfiNAmaxL = srfiGLmaxL / (redderL^1.97);
  end
  if (tLP == 4) then begin
     srfiNAmaxL = 5800 / brighterL;
     srfiRLmaxL = srfiNAmaxL * redderL;
     srfiGLmaxL = srfiNAmaxL * (redderL^1.99);
     srfiBLmaxL = srfiNAmaxL * (redderL^2.64);
  end
  pL = 1 / brightenDarkL;
  printf("DERIVED ENHANCEMENT FACTORS FOR LAND PIXELS:\n");
  if (tLP == 2) then begin
     printf("   srfiBLmaxL = %4d\n",srfiBLmaxL);
  end
  if (tLP < 4) then begin
     printf("   srfiGLmaxL = %4d\n",srfiGLmaxL);
  end
  if (tLP < 3) then begin
     printf("   srfiRLmaxL = %4d\n",srfiRLmaxL);
  end
  if (tLP == 1 or tLP == 4) then begin
     printf("   srfiNAmaxL = %4d\n",srfiNAmaxL);
  end
  printf("           pL = %4.2f\n\n",pL);
  printf("COLORIZING THE WATER PIXELS.");
  for each WATERMASK begin
     wm = WATERMASK;
     if (wm == 1) then begin
        v = SRFIBL; iB = sBL_8[v]; v = SRFIGL;
        iG = sGL_8[v]; v = SRFIRL; iR= sRL_8[v];
        IMAGE = iR * fR + iG * fG + iB * fB; 
     end
  end
  printf("\n\n");
# ------------------------------------------------------------
# PRODUCE VALUES FOR OUTPUT IMAGE RASTERS LAND-PIXELS:
  for i=1 to 65535 begin
     v = 1 + round(254*(((i - 1) / srfiBLmaxL)^pL));
     if (v < 1) then v = 1;
     if (v > 255) then v = 255;
     sBL_8[i] = v;
  end
  for i=1 to 65535 begin
     v = 20 + round(235*(((i - 1) / srfiGLmaxL)^pL));
     if (v < 1) then v = 1;
     if (v > 255) then v = 255;
     sGL_8[i] = v;
  end
  for i=1 to 65535 begin
     v = 1 + round(254*(((i - 1) / srfiRLmaxL)^pL));
     if (v < 1) then v = 1;
     if (v > 255) then v = 255;
     sRL_8[i] = v;
  end
  for i=1 to 65535 begin
     v = 1 + round(254*(((i - 1) / srfiNAmaxL)^pL));
     if (v < 1) then v = 1;
     if (v > 255) then v = 255;
     sNA_8[i] = v;
  end
  printf("COLORIZING THE LAND PIXELS.");
  for each WATERMASK begin
     wm = WATERMASK;
     if (wm == 0) then begin
        v = SRFIGL; nc = IsNull(v);
        if (nc == 0) then begin
           if (tLP <> 2) then begin
              iB = sGL_8[v]; v = SRFIRL; iG = sRL_8[v];
              v = SRFINA; iR = sNA_8[v];
           end
           if (tLP == 2) then begin
              v = SRFIBL; iB = sBL_8[v]; v = SRFIGL;
              iG = sGL_8[v]; v = SRFIRL; iR = sRL_8[v];
           end
           if (tLP == 3) then begin
              iG = iB; iR = iB;
           end
           if (tLP == 4) then begin
              iB = iR; iG = iR;
           end
           IMAGE = iR * fR + iG * fG + iB * fB;
        end
     end
  end
  printf("\n\n");
  printf("CREATING HISTOGRAMS & PYRAMIDS FOR IMAGE RASTERS.");
# ------------------------------------------------------------
# CREATE HISTOGRAMS & PYRAMIDS FOR OUTPUT RASTERS:
  SetNull(IMAGE,0); CreateHistogram(IMAGE,0);
  CreatePyramid(IMAGE,0);
  if (m == 1) then begin
     CreateHistogram(WATERMASK,0); CreatePyramid(WATERMASK,0);
  end
# ------------------------------------------------------------
# CLOSE or DELETE RASTERS:
  CloseRaster(SRFIBL); CloseRaster(SRFIGL);
  CloseRaster(SRFIRL); CloseRaster(SRFINA);
  CloseRaster(WATERMASK); CloseRaster(IMAGE);
  printf("\n\n");
  printf("TO SAVE THE CONSOLE WINDOW TEXT AS A REPORT:\n");
  printf("   1. RIGHT-CLICK IN THE CONSOLE WINDOW.\n");
  printf("   2. SELECT THE Save As... OPTION.\n");
  printf("   3. NAVIGATE TO THE DESIRED LOCATION.\n");
  printf("   4. PROVIDE A REPORT NAME (or OVERWRITE).\n");
  printf("   5. CLICK OK.");


Back Home ©MicroImages, Inc. 2013 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

25 March 2009

page update: 26 May 11