66 std::clamp( i.x(), 0, size().x() - 1 ),
67 std::clamp( i.y(), 0, size().y() - 1 ),
68 std::clamp( i.z(), 0, size().z() - 1 ),
73void VolumeGrid::computeGradients() {
74 m_gradient.resize( m_data.size() );
77#pragma omp parallel for firstprivate( s )
78 for (
int k = 0; k < s.z(); ++k ) {
79 for (
int j = 0; j < s.y(); ++j ) {
80 for (
int i = 0; i < s.x(); ++i ) {
81 Eigen::Matrix<ValueType, 3, 1> s1;
82 Eigen::Matrix<ValueType, 3, 1> s2;
83 s1( 0 ) = sample( { i - 1, j, k } );
84 s2( 0 ) = sample( { i + 1, j, k } );
85 s1( 1 ) = sample( { i, j - 1, k } );
86 s2( 1 ) = sample( { i, j + 1, k } );
87 s1( 2 ) = sample( { i, j, k - 1 } );
88 s2( 2 ) = sample( { i, j, k + 1 } );
89 IndexType idx { i, j, k };
90 Eigen::Matrix<ValueType, 3, 1> gradient = s2 - s1;
91 m_gradient[*linearIndex( idx )] = {
92 gradient[0], gradient[1], gradient[2], sample( { i, j, k } ) };