private float Correct(double value, ref KalmanFilter filter) { if (filter == null) { filter = factory.Create(); } var corrected = new float[2, 1]; var measurement = new Matrix<float>(1, 1) { [0, 0] = (float) value };
public static Rgb PostProcessPixel(System.Drawing.Point centralPixel, Mat data, double[, ,] edgeMat) { System.Drawing.Point[] neighbours = GetNeighbours(centralPixel); if (neighbours != null) { var centralRgb = GetRgb(centralPixel, data); var rgb1 = GetRgb(neighbours[0], data); var rgb2 = GetRgb(neighbours[1], data); var rgb3 = GetRgb(neighbours[2], data); var rgb4 = GetRgb(neighbours[3], data); var rgb5 = GetRgb(neighbours[4], data); var rgb6 = GetRgb(neighbours[5], data); var rgb7 = GetRgb(neighbours[6], data); var rgb8 = GetRgb(neighbours[7], data); var d0 = Math.Abs(rgb4.Red - rgb5.Red) + Math.Abs(rgb4.Green - rgb5.Green) + Math.Abs(rgb4.Blue - rgb5.Blue); var d45 = Math.Abs(rgb6.Red - rgb3.Red) + Math.Abs(rgb6.Green - rgb3.Green) + Math.Abs(rgb6.Blue - rgb3.Blue); var d90 = Math.Abs(rgb7.Red - rgb2.Red) + Math.Abs(rgb7.Green - rgb2.Green) + Math.Abs(rgb7.Blue - rgb2.Blue); var d135 = Math.Abs(rgb8.Red - rgb1.Red) + Math.Abs(rgb8.Green - rgb1.Green) + Math.Abs(rgb8.Blue - rgb1.Blue); var dList = new[] { d0, d45, d90, d135 }; var maxD = dList.Max(); System.Drawing.Point point = new System.Drawing.Point(); if (maxD == d0) { var distance1 = ColorDistance(rgb4, centralRgb); var distance2 = ColorDistance(rgb5, centralRgb); if (distance1 < distance2) { point = neighbours[3]; } else { point = neighbours[4]; } } else if (maxD == d45) { var distance1 = ColorDistance(rgb6, centralRgb); var distance2 = ColorDistance(rgb3, centralRgb); if (distance1 < distance2) { point = neighbours[5]; } else { point = neighbours[2]; } } else if (maxD == d90) { var distance1 = ColorDistance(rgb7, centralRgb); var distance2 = ColorDistance(rgb2, centralRgb); if (distance1 < distance2) { point = neighbours[6]; } else { point = neighbours[1]; } } else if (maxD == d135) { var distance1 = ColorDistance(rgb8, centralRgb); var distance2 = ColorDistance(rgb1, centralRgb); if (distance1 < distance2) { point = neighbours[7]; } else { point = neighbours[0]; } } var edgeVal = edgeMat[point.Y, point.X, 0]; var centerEdgeVal = edgeMat[centralPixel.Y, centralPixel.X, 0]; if (centerEdgeVal > edgeVal) { return GetRgb(point, data); } } return GetRgb(centralPixel, data); }