public void RasterBandPickValueTool() { GRasterLayer rasterLayer = new GRasterLayer(fullFilename); IRasterBandCursorTool pRasterBandCursorTool = new GRasterBandCursorTool(); pRasterBandCursorTool.Visit(rasterLayer.BandCollection[0]); double normalValue = pRasterBandCursorTool.PickNormalValue(100, 100); //the col and row should be odd number double[] rangeNormalValue = pRasterBandCursorTool.PickRangeNormalValue(100, 100, 3, 3); double rawValue = pRasterBandCursorTool.PickRawValue(100, 100); //the col and row should be odd number double[] rangeRawValue = pRasterBandCursorTool.PickRangeRawValue(100, 100, 3, 3); // Assert.AreEqual(normalValue, 0.62204724409448819); Assert.AreEqual(string.Join(",", rangeNormalValue), "0.645669291338583,0.637795275590551,0.661417322834646,0.614173228346457,0.622047244094488,0.645669291338583,0.614173228346457,0.618110236220472,0.622047244094488"); Assert.AreEqual(rawValue, 159); Assert.AreEqual(string.Join(",", rangeRawValue), "165,163,169,157,159,165,157,158,159"); }
public JobCOVRaster(GRasterBand target1band, GRasterBand target2band) { _t = new Thread(() => { IRasterBandCursorTool pRasterBandCursorTool1 = new GRasterBandCursorTool(); IRasterBandCursorTool pRasterBandCursorTool2 = new GRasterBandCursorTool(); pRasterBandCursorTool1.Visit(target1band); pRasterBandCursorTool2.Visit(target2band); // int seed = 0; int totalPixels = target1band.Width * target1band.Height; Bitmap bitmap = new Bitmap(target1band.Width, target1band.Height); Graphics g = Graphics.FromImage(bitmap); // for (int i = 0; i < target1band.Width; i++) { for (int j = 0; j < target1band.Height; j++) { double[] raw1 = pRasterBandCursorTool1.PickRangeRawValue(i, j, 3, 3); double[] raw2 = pRasterBandCursorTool2.PickRangeRawValue(i, j, 3, 3); double cov = ConvarianceIndex.CalcuteConvarianceIndex(raw1, raw2); //拉伸-1 - 1 int gray = Convert.ToInt32((cov + 1.0) * 20); Color c = Color.FromArgb(gray, gray, gray); Pen p = new Pen(c); SolidBrush brush = new SolidBrush(c); g.FillRectangle(brush, new Rectangle(i, j, 1, 1)); Process = (double)(seed++) / totalPixels; } } //save result string fullFileName = Directory.GetCurrentDirectory() + @"\tmp\" + DateTime.Now.ToFileTimeUtc() + ".png"; bitmap.Save(fullFileName); // Summary = "计算完成"; Complete = true; OnTaskComplete?.Invoke(Name, fullFileName); }); }
public static (int[, ] matrix, double kappa, int actionsNumber, double oa) Calcute(GRasterLayer truthLayer, GRasterLayer predLayer) { //statical label band graph IRasterBandStatisticTool pBandStaticTool = new GRasterBandStatisticTool(); pBandStaticTool.Visit(truthLayer.BandCollection[0]); Dictionary <int, List <Point> > memory = pBandStaticTool.StaisticalRawGraph; //key index List <int> Keys = memory.Keys.ToList(); int actionsNumber = Keys.Count; int[,] matrix = new int[actionsNumber, actionsNumber]; IRasterBandCursorTool pBandCursorTool = new GRasterBandCursorTool(); pBandCursorTool.Visit(predLayer.BandCollection[0]); // pBandStaticTool.Visit(predLayer.BandCollection[0]); var m = pBandStaticTool.StaisticalRawGraph; // for (int i = 0; i < actionsNumber; i++) { int key = Keys[i]; List <Point> points = memory[key]; //计算realKey类分类结果,存入混淆矩阵 points.ForEach(p => { int rawType = (int)pBandCursorTool.PickRawValue(p.X, p.Y); int indexType = Keys.IndexOf(rawType); if (indexType != -1) { matrix[i, indexType]++; } }); } // Create a new multi-class Confusion Matrix var cm = new GeneralConfusionMatrix(matrix); // int totalNum = cm.NumberOfSamples; //p0 double p0 = 0; for (int i = 0; i < actionsNumber; i++) { p0 += Convert.ToDouble(matrix[i, i]); } //pc double pc = 0; for (int i = 0; i < actionsNumber; i++) { pc += Convert.ToDouble(cm.ColumnTotals[i]) * Convert.ToDouble(cm.RowTotals[i]); } pc = pc / totalNum; // double kappa = (p0 - pc) / (totalNum - pc); double oa = p0 / totalNum; // return(matrix, kappa, actionsNumber, oa); }