@@ -9,29 +9,6 @@ public SobelGradientComputator(VolumeDataset dataset) : base(dataset)
9
9
{
10
10
}
11
11
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
-
35
12
private static readonly float [ , , ] kernelx = new float [ , , ]
36
13
{
37
14
{ { - 1 , 0 , 1 } , { - 2 , 0 , 2 } , { - 1 , 0 , 1 } } ,
@@ -53,6 +30,30 @@ private float Convolve(int x, int y, int z, float[,,] matrix)
53
30
{ { 1 , 2 , 1 } , { 2 , 4 , 2 } , { 1 , 2 , 1 } }
54
31
} ;
55
32
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
+
56
57
public override Vector3 ComputeGradient ( int x , int y , int z , float minValue , float maxRange )
57
58
{
58
59
// TODO
@@ -61,13 +62,9 @@ public override Vector3 ComputeGradient(int x, int y, int z, float minValue, flo
61
62
return Vector3 . zero ;
62
63
}
63
64
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 ) ;
69
66
70
- float divident = maxRange ;
67
+ float divident = maxRange * 12 ;
71
68
72
69
return new Vector3 ( gradient . x / divident , gradient . y / divident , gradient . z / divident ) ;
73
70
}
0 commit comments