Skip to content

Commit e4ad5de

Browse files
committed
optimise
1 parent 9c9f3a8 commit e4ad5de

File tree

1 file changed

+26
-29
lines changed

1 file changed

+26
-29
lines changed

Assets/Scripts/Gradients/SobelGradientComputator.cs

+26-29
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,6 @@ public SobelGradientComputator(VolumeDataset dataset) : base(dataset)
99
{
1010
}
1111

12-
private float GetData(int x, int y, int z)
13-
{
14-
return data[x + y * dimX + z * (dimX * dimY)];
15-
}
16-
17-
private float Convolve(int x, int y, int z, float[,,] matrix)
18-
{
19-
float result = 0;
20-
for (int iz = 0; iz <= 2; iz++)
21-
{
22-
for (int iy = 0; iy <= 2; iy++)
23-
{
24-
for (int ix = 0; ix <= 2; ix++)
25-
{
26-
float matrixValue = matrix[iz, iy, ix];
27-
float dataValue = GetData(x + ix - 1, y + iy - 1, z + iz - 1);
28-
result += matrixValue * dataValue;
29-
}
30-
}
31-
}
32-
return result;
33-
}
34-
3512
private static readonly float[,,] kernelx = new float[,,]
3613
{
3714
{ { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } },
@@ -53,6 +30,30 @@ private float Convolve(int x, int y, int z, float[,,] matrix)
5330
{ { 1, 2, 1 }, { 2, 4, 2 }, { 1, 2, 1 } }
5431
};
5532

33+
private float GetData(int x, int y, int z)
34+
{
35+
return data[x + y * dimX + z * (dimX * dimY)];
36+
}
37+
38+
private Vector3 ConvolveWithKernels(int x, int y, int z)
39+
{
40+
Vector3 result = Vector3.zero;
41+
for (int iz = 0; iz <= 2; iz++)
42+
{
43+
for (int iy = 0; iy <= 2; iy++)
44+
{
45+
for (int ix = 0; ix <= 2; ix++)
46+
{
47+
float dataValue = GetData(x + ix - 1, y + iy - 1, z + iz - 1);
48+
result.x += kernelx[iz, iy, ix] * dataValue;
49+
result.y += kernely[iz, iy, ix] * dataValue;
50+
result.z += kernelz[iz, iy, ix] * dataValue;
51+
}
52+
}
53+
}
54+
return result;
55+
}
56+
5657
public override Vector3 ComputeGradient(int x, int y, int z, float minValue, float maxRange)
5758
{
5859
// TODO
@@ -61,13 +62,9 @@ public override Vector3 ComputeGradient(int x, int y, int z, float minValue, flo
6162
return Vector3.zero;
6263
}
6364

64-
float dx = Convolve(x, y, z, kernelx);
65-
float dy = Convolve(x, y, z, kernely);
66-
float dz = Convolve(x, y, z, kernelz);
67-
68-
Vector3 gradient = new Vector3(dx, dy, dz);
65+
Vector3 gradient = ConvolveWithKernels(x, y, z);
6966

70-
float divident = maxRange;
67+
float divident = maxRange * 12;
7168

7269
return new Vector3(gradient.x / divident, gradient.y / divident, gradient.z / divident);
7370
}

0 commit comments

Comments
 (0)