===== Programa LEGAL ===== // COnverte RGB para IHS // Adapted from Foley, VanDam 2nd.Ed.(p.592) // given r,g,b on [0 ... 1], // return (s,l) on [0 ... 1] h [0...360, -1= UNDEFINED] { Imagem i1, i2, i3, i4, i5 ("CAT_Imagem"); MNT m1, m2, m3, m4, m5 ("CAT_MNT"); MNT hue ("CAT_MNT"); MNT maxv ("CAT_MNT"); MNT red, green, blue ("CAT_MNT"); MNT iszero, minvl ("CAT_MNT"); MNT dltvl ("CAT_MNT"); MNT hue6 ("CAT_MNT"); MNT sat ("CAT_MNT"); hue = Novo( Nome = "H_235" , ResX = 5 , ResY = 5 , Escala = 10000 ); maxv = Novo( Nome = "V_235" , ResX = 5 , ResY = 5 , Escala = 10000 ); red = New(Name="TMP_HSV_R",ResX=5,ResY=5,Escala=10000); green = New(Name="TMP_HSV_G",ResX=5,ResY=5,Escala=10000); blue = New(Name="TMP_HSV_B",ResX=5,ResY=5,Escala=10000); minvl = New(Name="TMP_MIN",ResX=5,ResY=5,Escala=10000); dltvl = New(Name="TMP_DLT",ResX=5,ResY=5,Escala=10000); sat = New(Name="TMP_SAT",ResX=5,ResY=5,Escala=10000); hue6 = New(Name="TMP_H6",ResX=5,ResY=5,Escala=10000); i1 = Recupere( Nome = "RapidEye2014_1" ); i2 = Recupere( Nome = "RapidEye2014_2" ); i3 = Recupere( Nome = "RapidEye2014_3" ); i4 = Recupere( Nome = "RapidEye2014_4" ); i5 = Recupere( Nome = "RapidEye2014_5" ); m1 = New(Name="TMP_M1",ResX=5,ResY=5,Escala=10000); m2 = New(Name="TMP_M2",ResX=5,ResY=5,Escala=10000); m3 = New(Name="TMP_M3",ResX=5,ResY=5,Escala=10000); m4 = New(Name="TMP_M4",ResX=5,ResY=5,Escala=10000); m5 = New(Name="TMP_M5",ResX=5,ResY=5,Escala=10000); //Assume input image range 0-65535, output range 0-1 // m1 = Digital(i1)/65535.; // m2 = Digital(i2)/65535.; // m3 = Digital(i3)/65535.; // m4 = Digital(i4)/65535.; // m5 = Digital(i5)/65535.; m1 = Digital(i1)/19978.; m2 = Digital(i2)/18635.; m3 = Digital(i3)/15604.; m4 = Digital(i4)/13950.; m5 = Digital(i5)/11244.; m1 = m1 > 1. ? 1. : m1 ; m2 = m2 > 1. ? 1. : m2 ; m3 = m3 > 1. ? 1. : m3 ; m4 = m4 > 1. ? 1. : m4 ; m5 = m5 > 1. ? 1. : m5 ; red = m2; green = m3; blue = m5; // max := Maximum(r,g,b) maxv = (red >= green ) && (red >= blue ) ? red : (blue >= green) ? blue : green; // min := Minimum(r,g,b) minvl = (red <= green ) && (red <= blue) ? red : (blue <= green ) ? blue : green; // if max <> 0 then // s := (max-min)/max // else s := 0 dltvl = maxv - minvl; sat = (maxv == 0.0) ? 0.0 : dltvl/maxv; // if s = 0 then // h := UNDEFINED hue6 = (sat == 0.0) ? 0.0 : ( // else // begin // delta := max-min // if r = max then // h := (g-b)/delta (red == maxv) ? 60.0 * ((green - blue) / dltvl) : ( // else if g = max then // h := 2 + (b-r)/delta (green == maxv) ? 60.0 * (2.0 + ((blue - red) / dltvl)) : ( // else if b = max then // h := 4 + (r-g)/delta 60.0 * (4.0 + ((red - green) / dltvl)) ))); // h := h*60 // if h < 0 then // h := h + 360 hue = (sat == 0.0) ? -1.0 : ((hue6 < 0.0) ? hue6 + 360. : hue6); //DetetaH235 Tematico slc ("Aguas"); // hue = Recupere( Nome = "H_235" ); slc =Novo(Nome = "H_235_95_98N", ResX = 5, ResY = 5, Escala = 10000); slc = Atribua ( CategoriaFim = "Aguas" ) { "1-WATER" : (hue >= 16 && hue < 35), //W90% 16-35 "2-WATER95" : (hue >= 35 && hue < 36) || //W95% 324-36 (hue >= 0 && hue < 16) || (hue >= 324 && hue <= 360), "3-WATER90" : (hue >= 36 && hue < 37) || //W98% 308-37 (hue >= 308 && hue < 324), "4-WATER80" : (hue >= 37 && hue < 160) //NW98% 37-160 }; //Min MNT minv ("CAT_MNT"); minv = New(Name="Min_12345",ResX=5,ResY=5,Escala=10000); // min := Minimum(r,g,b) minv = (m1 <= m2) && (m1 <= m3) && (m1 <= m4) && (m1 <= m5) ? m1 : (m2 <= m3) && (m2 <= m4) && (m2 <= m5) ? m2 : (m3 <= m4) && (m3 <= m5) ? m3 : (m4 <= m5) ? m4 : m5; Tematico slc2 ("Aguas"); slc2 =Novo(Nome = "H_235_95_98N_Min4Cla", ResX = 5, ResY = 5, Escala = 10000); slc2 = Atribua ( CategoriaFim = "Aguas" ) { "1-WATER" : (slc.Class == "1-WATER" ) && //W90% 16-35 (minv < 0.425), //Min %99.5 "2-WATER95" : (slc.Class == "2-WATER95") && //W95% 324-36 (minv < 0.425), //Min %99.5 "3-WATER90" : (slc.Class == "3-WATER90") && //W98% 308-37 (minv < 0.425), //Min %99.5 "4-WATER80" : (slc.Class == "4-WATER80") && //NW98% 37-160 (minv < 0.32), //Min %90 "5-WATER70" : (slc.Class == "4-WATER80") && //NW98% 37-160 (minv < 0.335), //Min %95 "6-WATER60" : (slc.Class == "4-WATER80") && //NW98% 37-160 (minv < 0.375), //Min %99 "7-WATER50" : (slc.Class == "4-WATER80") && //NW98% 37-160 (minv < 0.425) //Min %99.5 }; }