Esempio n. 1
0
        /// <summary>
        /// Отрисовать картинку в видимом диапозоне
        /// </summary>
        /// <param name="redChannelFileName"></param>
        /// <param name="greenChannelFileName"></param>
        /// <param name="blueChannelFileName"></param>
        /// <param name="imageInfo"></param>
        /// <param name="resultFileName"></param>
        public static void DrawNaturalColor(string redChannelFileName, string greenChannelFileName,
                                            string blueChannelFileName, CuttedImageInfo imageInfo, string resultFileName)
        {
            var redChannel   = new LandsatNormilizedSnapshotReader(redChannelFileName);
            var greenChannel = new LandsatNormilizedSnapshotReader(greenChannelFileName);
            var blueChannel  = new LandsatNormilizedSnapshotReader(blueChannelFileName);

            //Коэф. для увеличения яркости
            var factor = 3.0f;

            int x = 0, y = 0;

            using (var bitmap = new Bitmap(imageInfo.Width, imageInfo.Height))
            {
                for (var row = imageInfo.Row; row < imageInfo.Row + imageInfo.Height; row++)
                {
                    double[] redBuffer   = redChannel.ReadScanline(row);
                    double[] greenBuffer = greenChannel.ReadScanline(row);
                    double[] blueBuffer  = blueChannel.ReadScanline(row);
                    for (var col = imageInfo.Col; col < imageInfo.Col + imageInfo.Width; col++)
                    {
                        var redValue   = CalculateValue(redBuffer[col], factor);
                        var greenValue = CalculateValue(greenBuffer[col], factor);
                        var blueValue  = CalculateValue(blueBuffer[col], factor);
                        var color      = Color.FromArgb(redValue, greenValue, blueValue);

                        //отображение зеленой картинки
                        //var color = Color.FromArgb((byte) Math.Ceiling(redValue * 0.3f)
                        //    , (byte)Math.Ceiling(greenValue * 0.59f)
                        //    , (byte)Math.Ceiling(blueValue * 0.11f));

                        bitmap.SetPixel(y, x, color);

                        y++;
                    }

                    y = 0;
                    x++;
                }

                bitmap.Save(resultFileName, ImageFormat.Png);
            }

            redChannel.Dispose();
            greenChannel.Dispose();
            blueChannel.Dispose();
        }
        public static double[,] ReadBufferByIndexes(CuttedImageInfo cuttedImageInfo, LandsatNormilizedSnapshotReader reader)
        {
            var buffer = new double[cuttedImageInfo.Height, cuttedImageInfo.Width];
            int i = 0, j = 0;

            for (var x = cuttedImageInfo.Row; x < cuttedImageInfo.Row + cuttedImageInfo.Height; x++)
            {
                foreach (var data in reader.ReadCuttedline(x, cuttedImageInfo.Col, cuttedImageInfo.Width))
                {
                    buffer[i, j] = data;
                    j++;
                }

                j = 0;
                i++;
            }
            reader.Dispose();
            return(buffer);
        }
        public void CalculateNDWI(string channel5, string channel6, CuttedImageInfo cuttedImageInfo, string resultFolder)
        {
            var nirChannel  = new LandsatNormilizedSnapshotReader(channel5);
            var swirChannel = new LandsatNormilizedSnapshotReader(channel6);
            var ndwiRanges  = new List <Legend.Range>
            {
                new Legend.Range(-1.0, -0.8, Color.FromArgb(153, 92, 0)),
                new Legend.Range(-0.8, -0.6, Color.FromArgb(171, 122, 44)),
                new Legend.Range(-0.6, -0.4, Color.FromArgb(184, 146, 81)),
                new Legend.Range(-0.4, -0.2, Color.FromArgb(194, 158, 101)),
                new Legend.Range(-0.2, 0, Color.FromArgb(222, 206, 175)),
                new Legend.Range(0, 0.2, Color.FromArgb(141, 221, 252)),
                new Legend.Range(0.2, 0.4, Color.FromArgb(77, 161, 250)),
                new Legend.Range(0.4, 0.6, Color.FromArgb(41, 111, 217)),
                new Legend.Range(0.6, 0.8, Color.FromArgb(13, 66, 158)),
                new Legend.Range(0.8, 1.0, Color.FromArgb(4, 19, 89)),
            };
            var legend     = new Legend(ndwiRanges.ToArray());
            var nirBuffer  = ClipImageHelper.ReadBufferByIndexes(cuttedImageInfo, nirChannel);
            var swirBuffer = ClipImageHelper.ReadBufferByIndexes(cuttedImageInfo, swirChannel);

            // using (var bmp = DrawLib.CreateImageWithLegend(cuttedImageInfo.Width, cuttedImageInfo.Height, @"..\..\Content\NDWI.png"))
            using (var bmp = new Bitmap(cuttedImageInfo.Width, cuttedImageInfo.Height))
            {
                for (var row = 0; row < cuttedImageInfo.Height; row++)
                {
                    for (int col = 0; col < cuttedImageInfo.Width; col++)
                    {
                        var operator1 = nirBuffer[row, col] - swirBuffer[row, col];
                        var operator2 = nirBuffer[row, col] + swirBuffer[row, col];

                        var ndwi = operator1 / operator2;

                        bmp.SetPixel(col, row, legend.GetColor(ndwi));
                    }
                }

                bmp.Save(resultFolder + "\\ndwi.png");
            }
        }