Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static int[][] LineStructuralElementGenerator(int angle, int structuralElementSize)
- {
- angle %= 180;
- var above90Deg = angle > 90;
- angle %= 91;
- var alpha = angle * Math.PI / 180;
- var columns = (int) Math.Ceiling(structuralElementSize * Math.Cos(alpha)) + 1;
- var rows = (int) Math.Ceiling(structuralElementSize * Math.Sin(alpha)) + 1;
- columns -= columns % 2 == 0 ? 1 : 0;
- rows -= rows % 2 == 0 ? 1 : 0;
- var structuralElement = new int[rows][];
- for (var i = 0; i < rows; i++) structuralElement[i] = new int[columns];
- var lineGradient = ((double) rows - 1) / ((double) columns - 1);
- if (!double.IsInfinity(lineGradient))
- for (var i = 0; i < columns; i++)
- {
- var y = rows - lineGradient * i;
- structuralElement[(int) y - 1][i] = 1;
- }
- else
- for (var i = 0; i < rows; i++)
- structuralElement[i][0] = 1;
- for (var i = 0; i < rows; i++)
- {
- var correctLine = false;
- for (var j = 0; j < columns; j++)
- if (structuralElement[i][j] == 1)
- correctLine = true;
- if (correctLine) continue;
- var correctColumn = 0;
- if (i <= rows / 2)
- for (var j = 0; j < columns; j++)
- {
- if (structuralElement[i - 1][j] != 1) continue;
- correctColumn = j;
- break;
- }
- else
- for (var j = 0; j < columns; j++)
- {
- if (structuralElement[i + 1][j] != 1) continue;
- correctColumn = j;
- break;
- }
- structuralElement[i][correctColumn] = 1;
- }
- if (!above90Deg) return structuralElement;
- for (var i = 0; i < rows; i++)
- for (var j = 0; j < columns / 2; j++)
- {
- var tmp = structuralElement[i][j];
- structuralElement[i][j] = structuralElement[i][columns - 1 - j];
- structuralElement[i][columns - 1 - j] = tmp;
- }
- return structuralElement;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement