public static CanvasEdgeVO CreateEdgesFromCanvas(CanvasPixel canvasPixel) { CanvasEdgeVO result = new CanvasEdgeVO(canvasPixel.Width, canvasPixel.Height); EdgePoint[] dest = result.Data; Pixel[] source = canvasPixel.Data; Pixel[] matrix = new Pixel[9]; for (int y = 0; y < canvasPixel.Height; y++) { for (int x = 0; x < canvasPixel.Width; x++) { int index = y * canvasPixel.Width + x; matrix[0] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, -1, -1, index); matrix[1] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, 0, -1, index); matrix[2] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, 1, -1, index); matrix[3] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, -1, 0, index); matrix[4] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, 0, 0, index); matrix[5] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, 1, 0, index); matrix[6] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, -1, 1, index); matrix[7] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, 0, 1, index); matrix[8] = CreateEdgesFromCanvas_GetPixel(canvasPixel, x, y, 1, 1, index); (GradientDirection direction, int intensity)gResult = DirectionGradientBO.Detect(matrix); dest[index] = new EdgePoint(gResult.direction, gResult.intensity); } } return(result); }
private void EdgesWriteToFile(CanvasEdgeVO dataCE, string fileName) { using (TextWriter tw = new StreamWriter(fileName, false, UTF8Encoding.UTF8)) { // zapsani data na vystup for (int y = 0; y < dataCE.Height; y++) { for (int x = 0; x < dataCE.Width; x++) { int index = y * dataCE.Width + x; Core.EdgeDetector.EdgePoint gResult = dataCE.Data[index]; if (gResult.Intensity < 1) { tw.Write("."); } else { if (gResult.Direction == GradientDirection.askewFall) { tw.Write("\\"); } else if (gResult.Direction == GradientDirection.askewRaise) { tw.Write("/"); } else if (gResult.Direction == GradientDirection.horizontal) { tw.Write("-"); } else if (gResult.Direction == GradientDirection.vertical) { tw.Write("|"); } else if (gResult.Direction == GradientDirection.none) { tw.Write("."); } } } tw.WriteLine(); } } }
public static void EdgeReducer(CanvasEdgeVO dataCE, int threshold) { CanvasEdgeVO tmpCE = new CanvasEdgeVO(dataCE.Width, dataCE.Height); tmpCE.Clear(); for (int y = 0; y < dataCE.Height; y++) { int diff = 0; for (int x = 0; x < dataCE.Width; x++) { int index = y * dataCE.Width + x; EdgePoint oneEdge = dataCE.Data[index]; if (oneEdge.Direction == GradientDirection.vertical || oneEdge.Direction == GradientDirection.askewRaise) { diff += oneEdge.Intensity; if (diff > threshold) { oneEdge.Intensity = diff; tmpCE.Data[index] = oneEdge; diff = 0; } } } } for (int x = 0; x < dataCE.Width; x++) { int diff = 0; for (int y = 0; y < dataCE.Height; y++) { int index = y * dataCE.Width + x; EdgePoint oneEdge = dataCE.Data[index]; if (oneEdge.Direction == GradientDirection.horizontal || oneEdge.Direction == GradientDirection.askewFall) { diff += oneEdge.Intensity; if (diff > threshold) { if (tmpCE.Data[index].Intensity < diff) { oneEdge.Intensity = diff; tmpCE.Data[index] = oneEdge; } diff = 0; } } } } // prepiseme vysledek Array.Copy(tmpCE.Data, dataCE.Data, tmpCE.Data.Length); }