public static void estimateStatistics(IRaster outRaster, rstPixelType pType)
 {
     IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
     for (int i = 0; i < rsbco.Count; i++)
     {
         IRasterBand rsBo = rsbco.Item(i);
         IRasterStatistics rsBStatso = rsBo.Statistics;
         if (rsBStatso == null)
         {
             rsBStatso = new RasterStatistics();
         }
         switch (pType)
         {
             case rstPixelType.PT_CHAR:
                 rsBStatso.Maximum = Char.MaxValue;
                 rsBStatso.Minimum = Char.MinValue + 1;
                 break;
             case rstPixelType.PT_FLOAT:
                 rsBStatso.Maximum = Single.MaxValue;
                 rsBStatso.Minimum = Single.MinValue + 1;
                 break;
             case rstPixelType.PT_LONG:
                 rsBStatso.Maximum = long.MaxValue;
                 rsBStatso.Minimum = long.MinValue + 1;
                 break;
             case rstPixelType.PT_SHORT:
                 rsBStatso.Maximum = short.MaxValue;
                 rsBStatso.Minimum = short.MinValue + 1;
                 break;
             case rstPixelType.PT_U1:
                 rsBStatso.Maximum = 1;
                 rsBStatso.Minimum = 0;
                 break;
             case rstPixelType.PT_U2:
                 rsBStatso.Maximum = 3;
                 rsBStatso.Minimum = 0;
                 break;
             case rstPixelType.PT_U4:
                 rsBStatso.Maximum = 15;
                 rsBStatso.Minimum = 0;
                 break;
             case rstPixelType.PT_UCHAR:
                 rsBStatso.Maximum = 255;
                 rsBStatso.Minimum = 0;
                 break;
             case rstPixelType.PT_ULONG:
                 rsBStatso.Maximum = ulong.MaxValue-1;
                 rsBStatso.Minimum = 0;
                 break;
             case rstPixelType.PT_USHORT:
                 rsBStatso.Maximum = ushort.MaxValue-1;
                 rsBStatso.Minimum = 0;
                 break;
             default:
                 break;
         }
     }
 }
 public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.focalType statType,double cells)
 {
     IRasterBandCollection rsbci = (IRasterBandCollection)inRaster;
     IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
     for (int i = 0; i < rsbci.Count; i++)
     {
         IRasterBand rsBi = rsbci.Item(i);
         IRasterBand rsBo = rsbco.Item(i);
         IRasterStatistics rsBStatsi = rsBi.Statistics;
         IRasterStatistics rsBStatso = rsBo.Statistics;
         if (rsBStatsi == null)
         {
             continue;
         }
         if (rsBStatso == null)
         {
             rsBStatso = new RasterStatistics();
         }
         switch (statType)
         {
             case rasterUtil.focalType.MAX:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.MIN:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.SUM:
                 rsBStatso.Maximum = rsBStatsi.Maximum*cells;
                 rsBStatso.Minimum = rsBStatsi.Minimum*cells;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation*cells;
                 rsBStatso.Mean = rsBStatsi.Mean*cells;
                 break;
             case rasterUtil.focalType.MEAN:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.MODE:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.MEDIAN:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.VARIANCE:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.STD:
                 rsBStatso.Mean = rsBStatsi.StandardDeviation;
                 rsBStatso.Maximum = rsBStatso.Mean*1.96;
                 rsBStatso.Minimum = rsBStatso.Mean-(rsBStatso.Maximum-rsBStatso.Mean);
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum-rsBStatso.Mean)/3;
                 break;
             case rasterUtil.focalType.UNIQUE:
                 rsBStatso.Maximum = cells;
                 rsBStatso.Minimum = 1;
                 rsBStatso.Mean = cells / 2;
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3;
                 break;
             case rasterUtil.focalType.ENTROPY:
                 rsBStatso.Maximum = cells*0.4*(-1*0.4*Math.Log(0.4));
                 rsBStatso.Minimum = 0;
                 rsBStatso.Mean = rsBStatso.Maximum / 2;
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3;
                 break;
             case rasterUtil.focalType.ASM:
                 rsBStatso.Maximum = 1;
                 rsBStatso.Minimum = 0;
                 rsBStatso.Mean = rsBStatso.Maximum / 2;
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3;
                 break;
             default:
                 break;
         }
     }
 }
 public static void estimateStatistics(double rasterValue, IRaster outRaster)
 {
     IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
     for (int i = 0; i < rsbco.Count; i++)
     {
         IRasterBand rsB = rsbco.Item(i);
         IRasterStatistics rStat = rsB.Statistics;
         if (rStat == null)
         {
             rStat = new RasterStatistics();
         }
         rStat.Minimum = rasterValue;
         rStat.Maximum = rasterValue;
         rStat.Mean = rasterValue;
         rStat.StandardDeviation = 0;
     }
 }
        public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.localType localType)
        {
            IRasterBandCollection rsbci = (IRasterBandCollection)inRaster;
            double[] bMaxArr = new double[rsbci.Count];
            double[] bMinArr = new double[rsbci.Count];
            double[] bMeanArr = new double[rsbci.Count];
            double[] bStdArr = new double[rsbci.Count];
            double[] bModeArr = new double[rsbci.Count];
            double[] bMedianArr = new double[rsbci.Count];
            IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
            IRasterStatistics rsStatso = rsbco.Item(0).Statistics;

            if (rsStatso == null)
            {
                rsStatso = new RasterStatistics();
            }
            for (int i = 0; i < rsbci.Count; i++)
            {
                IRasterBand rsBi = rsbci.Item(i);
                IRasterStatistics rsBStatsi = rsBi.Statistics;
                if (rsBStatsi == null)
                {
                    continue;
                }
                bMaxArr[i] = rsBStatsi.Maximum;
                bMinArr[i] = rsBStatsi.Minimum;
                bMeanArr[i] = rsBStatsi.Mean;
                bStdArr[i] = rsBStatsi.StandardDeviation;
            }
            switch (localType)
            {
                case rasterUtil.localType.MAX:
                    rsStatso.Maximum = bMaxArr.Max();
                    rsStatso.Minimum = bMinArr.Max();
                    rsStatso.Mean = bMeanArr.Max();
                    rsStatso.StandardDeviation = bStdArr.Max();
                    break;
                case rasterUtil.localType.MIN:
                    rsStatso.Maximum = bMaxArr.Min();
                    rsStatso.Minimum = bMinArr.Min();
                    rsStatso.Mean = bMeanArr.Min();
                    rsStatso.StandardDeviation = bStdArr.Min();
                    break;
                case rasterUtil.localType.MAXBAND:
                case rasterUtil.localType.MINBAND:
                    rsStatso.Maximum = rsbci.Count;
                    rsStatso.Minimum = 1;
                    rsStatso.Mean = rsbci.Count/2;
                    rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3;
                    break;
                case rasterUtil.localType.SUM:
                    rsStatso.Mean = bMeanArr.Sum();
                    rsStatso.Maximum = bMaxArr.Sum();
                    rsStatso.Minimum = bMinArr.Sum();
                    rsStatso.StandardDeviation = bStdArr.Sum();
                    break;
                case rasterUtil.localType.MULTIPLY:
                    rsStatso.Mean = iterValues(bMeanArr,localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.DIVIDE:
                    rsStatso.Mean = iterValues(bMeanArr, localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.SUBTRACT:
                    rsStatso.Mean = iterValues(bMeanArr, localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.POWER:
                    rsStatso.Mean = iterValues(bMeanArr, localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.MEAN:
                    rsStatso.Mean = bMeanArr.Average();
                    rsStatso.Maximum = bMaxArr.Average();
                    rsStatso.Minimum = bMinArr.Average();
                    rsStatso.StandardDeviation = bStdArr.Average();
                    break;
                case rasterUtil.localType.VARIANCE:
                    double stdMean = bStdArr.Average();
                    rsStatso.Mean = Math.Pow(stdMean,2);
                    rsStatso.Maximum = Math.Pow(stdMean*1.65,2);
                    rsStatso.Minimum = Math.Pow(stdMean-(stdMean*0.65),2);
                    rsStatso.StandardDeviation = Math.Pow(stdMean*.21666666,2);
                    break;
                case rasterUtil.localType.STD:
                    rsStatso.Mean = bStdArr.Average();
                    rsStatso.Maximum = rsStatso.Mean*1.65;
                    rsStatso.Minimum = rsStatso.Mean - (rsStatso.Mean*0.65);
                    rsStatso.StandardDeviation = rsStatso.Mean*.21666666;
                    break;
                case rasterUtil.localType.MODE:
                    rsStatso.Mean = bModeArr.Average();
                    rsStatso.Maximum = bModeArr.Max();
                    rsStatso.Minimum = bModeArr.Min();
                    rsStatso.StandardDeviation = rsStatso.Mean * 0.2166666;
                    break;
                case rasterUtil.localType.MEDIAN:
                    rsStatso.Mean = bMedianArr.Average();
                    rsStatso.Maximum = bMedianArr.Max();
                    rsStatso.Minimum = bMedianArr.Min();
                    rsStatso.StandardDeviation = rsStatso.Mean * 0.2166666;
                    break;
                case rasterUtil.localType.UNIQUE:
                    rsStatso.Maximum = rsbci.Count;
                    rsStatso.Minimum = 1;
                    rsStatso.Mean = rsbci.Count/2;
                    rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3;
                    break;
                case rasterUtil.localType.ENTROPY:
                    rsStatso.Maximum = (-1*0.4*Math.Log(0.4))*(rsbci.Count*.4);
                    rsStatso.Minimum = 0;
                    rsStatso.Mean = (rsStatso.Maximum-rsStatso.Minimum)/2;
                    rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3;
                    break;
                default:
                    break;
            }
        }
 public static void estimateStatistics(object inRaster1, object inRaster2, IRaster outRaster, esriRasterArithmeticOperation arithmeticType)
 {
     if (inRaster1 is Raster&&inRaster2 is IScalar)
     {
         IRasterBandCollection rsbci = (IRasterBandCollection)inRaster1;
         IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
         double[] sc = (double[])((IScalar)inRaster2).Value;
         for (int i = 0; i < rsbci.Count; i++)
         {
             IRasterBand rsBi = rsbci.Item(i);
             IRasterBand rsBo = rsbco.Item(i);
             IRasterStatistics rsBStatsi = rsBi.Statistics;
             IRasterStatistics rsBStatso = rsBo.Statistics;
             if (rsBStatsi == null)
             {
                 continue;
             }
             if (rsBStatso == null)
             {
                 rsBStatso = new RasterStatistics();
             }
             double vl = sc[i];
             switch (arithmeticType)
             {
                 case esriRasterArithmeticOperation.esriRasterDivide:
                     rsBStatso.Minimum = rsBStatsi.Minimum / vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum / vl;
                     rsBStatso.Mean = rsBStatsi.Mean / vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation / vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMinus:
                     rsBStatso.Minimum = rsBStatsi.Minimum - vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum - vl;
                     rsBStatso.Mean = rsBStatsi.Mean - vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation - vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMode:
                     rsBStatso.Minimum = rsBStatsi.Minimum % vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum % vl;
                     rsBStatso.Mean = rsBStatsi.Mean % vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation % vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMultiply:
                     rsBStatso.Minimum = rsBStatsi.Minimum * vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum * vl;
                     rsBStatso.Mean = rsBStatsi.Mean * vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation * vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterPlus:
                     rsBStatso.Minimum = rsBStatsi.Minimum + vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum + vl;
                     rsBStatso.Mean = rsBStatsi.Mean + vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation + vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterPower:
                     rsBStatso.Minimum = Math.Pow(rsBStatsi.Minimum,vl);
                     rsBStatso.Maximum = Math.Pow(rsBStatsi.Maximum,vl);
                     rsBStatso.Mean = Math.Pow(rsBStatsi.Mean,vl);
                     rsBStatso.StandardDeviation = Math.Pow(rsBStatsi.StandardDeviation, vl);
                     break;
                  default:
                     break;
             }
         }
     }
     else if(inRaster1 is Scalar&&inRaster2 is Raster)
     {
         IRasterBandCollection rsbci = (IRasterBandCollection)inRaster2;
         IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
         double[] sc = (double[])((IScalar)inRaster1).Value;
         for (int i = 0; i < rsbci.Count; i++)
         {
             IRasterBand rsBi = rsbci.Item(i);
             IRasterBand rsBo = rsbco.Item(i);
             IRasterStatistics rsBStatsi = rsBi.Statistics;
             IRasterStatistics rsBStatso = rsBo.Statistics;
             if (rsBStatsi == null)
             {
                 continue;
             }
             if (rsBStatso == null)
             {
                 rsBStatso = new RasterStatistics();
             }
             double vl = sc[i];
             switch (arithmeticType)
             {
                 case esriRasterArithmeticOperation.esriRasterDivide:
                     rsBStatso.Minimum = rsBStatsi.Minimum / vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum / vl;
                     rsBStatso.Mean = rsBStatsi.Mean / vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation / vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMinus:
                     rsBStatso.Minimum = rsBStatsi.Minimum - vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum - vl;
                     rsBStatso.Mean = rsBStatsi.Mean - vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation - vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMode:
                     rsBStatso.Minimum = rsBStatsi.Minimum % vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum % vl;
                     rsBStatso.Mean = rsBStatsi.Mean % vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation % vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMultiply:
                     rsBStatso.Minimum = rsBStatsi.Minimum * vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum * vl;
                     rsBStatso.Mean = rsBStatsi.Mean * vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation * vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterPlus:
                     rsBStatso.Minimum = rsBStatsi.Minimum + vl;
                     rsBStatso.Maximum = rsBStatsi.Maximum + vl;
                     rsBStatso.Mean = rsBStatsi.Mean + vl;
                     rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation + vl;
                     break;
                 case esriRasterArithmeticOperation.esriRasterPower:
                     rsBStatso.Minimum = Math.Pow(rsBStatsi.Minimum, vl);
                     rsBStatso.Maximum = Math.Pow(rsBStatsi.Maximum, vl);
                     rsBStatso.Mean = Math.Pow(rsBStatsi.Mean, vl);
                     rsBStatso.StandardDeviation = Math.Pow(rsBStatsi.StandardDeviation, vl);
                     break;
                 default:
                     break;
             }
         }
     }
     else
     {
         IRasterBandCollection rsbci1 = (IRasterBandCollection)inRaster1;
         IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
         IRasterBandCollection rsbci2 = (IRasterBandCollection)inRaster1;
         for (int i = 0; i < rsbci1.Count; i++)
         {
             IRasterBand rsBi1 = rsbci1.Item(i);
             IRasterBand rsBi2 = rsbci2.Item(i);
             IRasterBand rsBo = rsbco.Item(i);
             IRasterStatistics rsBStatsi1 = rsBi1.Statistics;
             IRasterStatistics rsBStatsi2 = rsBi2.Statistics;
             IRasterStatistics rsBStatso = rsBo.Statistics;
             if (rsBStatsi1 == null||rsBStatsi2==null)
             {
                 continue;
             }
             if (rsBStatso == null)
             {
                 rsBStatso = new RasterStatistics();
             }
             switch (arithmeticType)
             {
                 case esriRasterArithmeticOperation.esriRasterDivide:
                     rsBStatso.Minimum = rsBStatsi1.Minimum / rsBStatsi2.Minimum;
                     rsBStatso.Maximum = rsBStatsi1.Maximum / rsBStatsi2.Maximum;
                     rsBStatso.Mean = rsBStatsi1.Mean / rsBStatsi2.Mean;
                     rsBStatso.StandardDeviation = rsBStatsi1.StandardDeviation / rsBStatsi2.StandardDeviation;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMinus:
                     rsBStatso.Minimum = rsBStatsi1.Minimum - rsBStatsi2.Maximum;
                     rsBStatso.Maximum = rsBStatsi1.Maximum - rsBStatsi2.Minimum;
                     rsBStatso.Mean = (rsBStatsi1.Mean + rsBStatsi2.Mean)/2;
                     rsBStatso.StandardDeviation = (rsBStatsi1.StandardDeviation + rsBStatsi2.Minimum)/2;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMode:
                     rsBStatso.Minimum = rsBStatsi1.Minimum % rsBStatsi2.Minimum;
                     rsBStatso.Maximum = rsBStatsi1.Maximum % rsBStatsi2.Maximum;
                     rsBStatso.Mean = rsBStatsi1.Mean % rsBStatsi2.Mean;
                     rsBStatso.StandardDeviation = rsBStatsi1.StandardDeviation % rsBStatsi2.StandardDeviation;
                     break;
                 case esriRasterArithmeticOperation.esriRasterMultiply:
                     rsBStatso.Minimum = rsBStatsi1.Minimum / rsBStatsi2.Minimum;
                     rsBStatso.Maximum = rsBStatsi1.Maximum / rsBStatsi2.Maximum;
                     rsBStatso.Mean = rsBStatsi1.Mean / rsBStatsi2.Mean;
                     rsBStatso.StandardDeviation = rsBStatsi1.StandardDeviation / rsBStatsi2.StandardDeviation;
                     break;
                 case esriRasterArithmeticOperation.esriRasterPlus:
                     rsBStatso.Minimum = rsBStatsi1.Minimum + rsBStatsi2.Maximum;
                     rsBStatso.Maximum = rsBStatsi1.Maximum + rsBStatsi2.Minimum;
                     rsBStatso.Mean = (rsBStatsi1.Mean + rsBStatsi2.Mean)/2;
                     rsBStatso.StandardDeviation = (rsBStatsi1.StandardDeviation + rsBStatsi2.Minimum)/2;
                     break;
                 case esriRasterArithmeticOperation.esriRasterPower:
                     rsBStatso.Minimum = Math.Pow(rsBStatsi1.Minimum, rsBStatsi2.Minimum);
                     rsBStatso.Maximum = Math.Pow(rsBStatsi1.Maximum, rsBStatsi2.Maximum);
                     rsBStatso.Mean = Math.Pow(rsBStatsi1.Mean, rsBStatsi2.Mean);
                     rsBStatso.StandardDeviation = Math.Pow(rsBStatsi1.StandardDeviation, rsBStatsi2.StandardDeviation);
                     break;
                 default:
                     break;
             }
         }
     }
 }
 public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.transType transType)
 {
     IRasterBandCollection rsbci = (IRasterBandCollection)inRaster;
     IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
     for (int i = 0; i < rsbci.Count; i++)
     {
         IRasterBand rsBi = rsbci.Item(i);
         IRasterBand rsBo = rsbco.Item(i);
         IRasterStatistics rsBStatsi = rsBi.Statistics;
         IRasterStatistics rsBStatso = rsBo.Statistics;
         if (rsBStatsi == null)
         {
             continue;
         }
         if (rsBStatso == null)
         {
             rsBStatso = new RasterStatistics();
         }
         switch (transType)
         {
             case rasterUtil.transType.LOG10:
                 rsBStatso.Maximum = Math.Log10(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Log10(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Log10(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Log10(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.LN:
                 rsBStatso.Maximum = Math.Log(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Log(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Log(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Log(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.EXP:
                 rsBStatso.Maximum = Math.Exp(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Exp(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Exp(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Exp(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.EXP10:
                 rsBStatso.Maximum = Math.Pow(10,rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Pow(10, rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Pow(10, rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Pow(10, rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ABS:
                 rsBStatso.Maximum = Math.Abs(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Abs(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Abs(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Abs(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.SIN:
                 rsBStatso.Maximum = Math.Sin(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Sin(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Sin(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Sin(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.COS:
                 rsBStatso.Maximum = 1;
                 rsBStatso.Minimum = -1;
                 rsBStatso.StandardDeviation = Math.Cos(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Cos(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.TAN:
                 rsBStatso.Maximum = Math.Tan(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Tan(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Tan(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Tan(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ASIN:
                 rsBStatso.Maximum = Math.Asin(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Asin(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Asin(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Asin(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ACOS:
                 rsBStatso.Maximum = Math.Acos(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Acos(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Acos(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Acos(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ATAN:
                 rsBStatso.Maximum = Math.Atan(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Atan(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Atan(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Atan(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.RADIANS:
                 rsBStatso.Maximum = rsBStatsi.Maximum*Math.PI/180;
                 rsBStatso.Minimum = rsBStatsi.Minimum * Math.PI / 180;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation * Math.PI / 180;
                 rsBStatso.Mean = rsBStatsi.Mean * Math.PI / 180;
                 break;
             default:
                 break;
         }
     }
 }