/// <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"); } }