Introduction

Background

Faced with the current challenge of combating global warming, developing timber construction is a priority. Wood, archetypal bio-sourced material, meets the need to decarbonise the atmosphere by acting as a carbon sink, while at the same time adding comfort and aesthetics to buildings. Yet, the use of timber in the building industry is constrained by the difficulty to accurately estimate the highly variable properties of wood. Like many other natural materials, wood is a multi-scale heterogeneous material, whose physical and mechanical properties derive from its micro, meso, and macro structures, which are optimised to fulfil the functions of wood within the tree. One of the most influential properties defining the strength, stiffness and shape stability of sawn timber is the fibre direction within it, strongly related to the number, shape and size of knots. Further insight into the relationship between fibre orientation and knot geometry is essential for the development of precise mechanical models for timber, with the aim of improving current strength grading methodologies.

Fibre deviation models

Fig. 1
figure 1

Illustration of Foley’s model of knot and growth layer geometry and fibre orientation. Figure adapted from (Foley 2003) with kind permission

There are currently relatively few models of fibre deviation near knots. Most of these are based on the flow-grain analogy developed by Bodig and Jayne (1982), according to which the fibre deviation near a knot can be linked to the potential streamlines of a fluid as it navigates around an elliptical obstacle. The inspiration for this flow-grain analogy stems from the striking visual resemblance between streamlines and the actual grain patterns observed on longitudinal-tangential surfaces. Bodig and Jayne (1982) supposed that this configuration optimises sap flow within the trunk. However, this can be largely called into question given the complex mechanisms of fluid transport in the xylem (Penvern et al. 2020). An alternative approach for characterising the direction of fibres near knots involves assuming that the fibres align themselves with the principal stresses experienced during tree growth, as proposed by Mattheck (1997). Based on Shigo’s description of the branch-stem junction (Shigo 1985), Mattheck (1997) supposes that fibres follow comparable spindle-shaped lines circumnavigating the knots as they do for medullary rays. To ascertain the fibre orientation based on this assumption, an iterative process incorporating finite element analysis can be employed. Lang and Kaliske (2013) examined and compared models that relied on principal stresses and the flow-grain analogy. They found that both models yielded comparable and reasonable results when considering fibre orientation around a circular knot, while the flow-grain analogy computation was more stable. However, none of the above-mentioned models describe the out-of-plane deviation of the fibre around the knot, related to the growth-layer bump formed around a branch. To extend the 2D mathematical flow-grain description of the fibre deviation in the vicinity of a knot, Foley (2003) suggested a mathematical description of both knots (\(2{\text {nd}}\) degree polynomial equations) and growth layer (exponential equations) geometry, on the basis of 11 Norway spruce (Picea abies) knots cross-sections inspection. In this model, the longitudinal-tangential component of the 3D fibre direction is computed using a laminar potential flow, while the radial component of the 3D fibre direction is computed so that fibres follow the growth layers (see Fig. 1).

A number of recent papers (Lukacevic et al. 2019; Huber et al. 2022; Rais et al. 2021; Olsson et al. 2018; Hu et al. 2018b; Ehrhart et al. 2018) have used this latter model for studies of sawn timber. In particular, Lukacevic et al. (2019) chose to use Foley’s model to define the fibre orientation of modelled timber boards. The knots were detected on the boards’ surface and modelled in a simplified way as truncated cones. They concluded, after having modified the fibre deviation region in the vicinity of single or multiple close-by knots, that this method pictured well the boards’ stiffness determined using digital image correlation (DIC) observations during a bending test. They noticed that while the fibre deviation parameters controlling the fibre course in the LT-plane had rather small influences on the simulated stiffness profiles, the results were very sensitive to the pith location and growth layer and knot geometries. Following this result, Habite and Olsson (2022) suggested another model in which the position of the pith was determined using a self-developed deep-learning algorithm (Habite et al. 2020); the growth layer and knot geometries were represented with the full set of model parameters suggested by Foley; the fibres were supposed to take the shortest path from the tree’s root to the top following the growth rings, this way simplifying the computation and avoiding any flow-grain analogy. The modelled fibre orientation was compared with surface fibre angle measurements on the surface. They observed that the model gave a more spread-out fibre deviation compared to the direct measurements but did not show to what extent the difference was due to the estimated sizes and shapes of the knots and to what extent it was due to the fibre orientation model. They concluded that data on the actual geometry of growth rings and fibre deviations would be necessary to calibrate the model and that the collection of a sufficient amount of such data should be given high priority in further research.

Computed tomography and laser scanning

To obtain and visualise micrometre resolution data of fibre orientation in the close surroundings of a knot, Hu et al. (2022) performed computed tomography (CT) scans of a Norway spruce specimen, of initial size \({75}(L) \times {75}(T) \times {107}(R)\,\hbox {mm}^{3}\) containing a knot, at 4 different resolutions. Indeed, present X-ray tomography devices do not allow sufficiently large image sizes to observe at the same time a knot and the surrounding fibres. First, the whole specimen was scanned at low resolution to picture the knot and growth layers. Then, smaller pieces selected in the upper region of the knot were cut from the specimen and scanned again with higher resolution. On the last two levels, resolutions as high as \({7}\,\upmu \hbox {m}\) and \({2.6}\,\upmu \hbox {m}\) were obtained, which was sufficient to identify lumen of the individual fibres. However, the sizes of specimens on these levels were only \({9.5} \times {9.5} \times {50}\,\hbox {mm}^{3}\) and \({3.5} \times {3.5} \times {20}\,\hbox {mm}^{3}\), respectively. This study is valuable as it reveals the intricate pattern of fibre directions in the region above the knot, yet it would be very complicated, time-consuming and expensive, if not impossible, to obtain complete data on fibre orientation within larger volumes of wood containing one or several knots. Thus, other methods must be considered when aiming at data on fibre orientations around complete knots.

Nevertheless, X-ray tomography is a valuable tool for non-destructive observation of timbers’ inside. At log scale, it allows to get 3D pictures of the approximate pith location and knot geometry. At board scale, it allows to get 3D pictures of the growth layers. Such data may be used to calibrate Foley’s model as investigated by Hu and Olsson (2023), or model fibre deviation using assumptions which rely uniquely on the growth layers geometry, such as the previously mentioned "shortest path" developed by Habite et al. (2020) or the "lowest curvature path" developed by Huber and Olofsson (2023). Yet, the fibre deviation obtained still needs to be compared to true experimental fibre deviation data.

Fig. 2
figure 2

Hu et al. (2018a) protocol and results: a illustration of the Norway spruce specimen and planing layout; b overlaid quiver plot of corresponding A1 and A2 fibre directions determined using laser dot scanning; c determined fibre directions within one growth layer measured fibre direction, and corresponding top (d) and lateral (e) views. Figure adapted from (Hu et al. 2018a) with kind permission

The current most common method to determine fibre orientation for softwood is based on laser dot scanning (Schlotzhauer et al. 2018; Besseau et al. 2020). It consists in analysing the diffusion pattern of laser spots pointed onto the board. By the so-called tracheid effect, laser light diffuses preferentially in the fibre direction, making the laser spot the shape of an ellipse whose major axis corresponds to the projected fibre orientation onto the board’s surface (Nyström 2003; Kienle et al. 2008). This measurement method can be used in industrial processes for the computation of indicating properties to grade sawn timber. However, laser scanning does not provide reliable data on the so-called diving angle of the fibres, i.e. the fibre direction out of the scanned plane. Attempts to relate the ellipse ratio to the diving angle of wood specimens with knots have shown that the relationship between these two entities is rather weak (Briggert et al. 2018). As a matter of fact, the ellipse shape is affected by many other parameters, like wood density (Purba et al. 2020b), or earlywood and latewood changes, or by the scanned surface orientation (LR or LT) (Besseau et al. 2020) or the moisture content (Purba et al. 2020a). Therefore, in the absence of appropriate models for the 3D orientation of fibres inside the wood, Rais et al. (2021), Olsson et al. (2013; 2017; 2018) and Briggert et al. (2020) suggested rather simple ways to interpolate the inner wood local fibre direction from the surface fibre angle measurement to define the local strength of sawn timber.

In the meantime, Hu et al. (2018a) proposed a destructive method to obtain 3D fibre orientation based on this laser dot scanning. The method involves scanning a wood sample in two orthogonal directions using successive planing operations. More precisely, as laser point scans can only provide the orientation of surface-projected fibres, it was assumed that the selected Norway spruce knot had a plane of symmetry running through it, so that the 3D fibre direction around the knot could be reconstructed from the fibre directions measured on the seriate orthogonal planes on either side of this plane of symmetry.

This was done as follows: let \(\vec {v}\) be the fibre direction, this direction may be decomposed so that \(\vec {v}= (\vec {v_x}, \vec {v_y},\vec {v_z})_{(\vec {x},\vec {y},\vec {z})}\) where \((\vec {x},\vec {y},\vec {z})\) defines the specimen global coordinate system with axes parallel to the specimen edges, cut so that the yz plane corresponds to the plane of symmetry (Fig. 2a). Thereby, after splitting the specimen into two halves through its assumed plane of symmetry, Hu et al. (2018a) measured on one half the \(\vec {v_x}\) and \(\vec {v_y}\) fibre direction components with laser dots scanning of the revealed inner wood surfaces from consecutive planing operations in the z-direction. Meanwhile, \(\vec {v_y}\) and \(\vec {v_z}\) fibre direction components were measured on the second half of the specimen with laser dots scanning of the revealed inner wood surfaces from consecutive planing operations in the x-direction (Fig. 2b).

After 3D fibre direction reconstruction along one growth layer, Hu et al. (2018a) presented results where fibre directions coincided well with the orientation of the growth layers (Fig. 2c–e). Yet again, this investigation method for measuring 3D fibre angles remains time-consuming and it cannot be applied to a timber board scale, containing knots with arbitrary orientation. It requires specimens that are split along an approximate plane of symmetry through an isolated and symmetrical knot.

Objectives and assumptions

The present research aims at the development of an accessible laboratory method to determine the 3D fibre orientation within sawn timber containing knots. The work is inspired by that of Hu et al. (2018a), and the main objective is to remedy the severe limitation implied by the requirement of a plane of symmetry through a specimen containing a knot. The idea is to make use of the fact that fibres follow growth layers and thus determine the 3D fibre direction of sawn timber from the planing plane fibre direction and growth-layer geometry data obtained throughout a wood specimen by consecutive planing operations in one single direction.

Materials and methods

Principle

Fig. 3
figure 3

Illustration of the 3D fibre direction vector, \(\vec {v}\), its projection on the xy plane \(\vec {u}\) and the normal direction vector to the growth layer at the same position

To determine the 3D fibre direction within a timber piece, multiple planing in a single direction of the whole considered specimen was performed. In the example of Fig. 3, the planing direction is \(\vec {z}\). For each revealed inner wood xy plane, at a given z altitude, the in-plane fibre angles \(\alpha\), defined as the angle between the y-axis and the major axis of the laser dot scattering ellipse, were measured by laser dot scanning.

Let \(\vec {v}\) be the 3D fibre direction in the specimen. As shown in Fig. 3, this direction \(\vec {v}\) can be decomposed in an out-of-plane direction \(v_z \vec {z}\) and an in-plane direction \(\vec {u}\). \(\vec {u}\), the projected fibre direction onto the xy plane, can be computed from the in-plane fibre angles measurements as:

$$\begin{aligned} \vec {u} = \left( \begin{array}{c}\sin \alpha \\ \cos \alpha \\ 0\end{array}\right) _{(\vec {x},\vec {y},\vec {z})} \end{aligned}$$
(1)

Thus, the 3D fibre direction \(\vec {v}\) may be expressed as follows:

$$\begin{aligned} \vec {v} = \left( \begin{array}{c}v_x\\ v_y\\ v_z\end{array}\right) _{(\vec {x},\vec {y},\vec {z})} = \vec {u} + v_z \vec {z} = \left( \begin{array}{c}\sin \alpha \\ \cos \alpha \\ v_z \end{array}\right) _{(\vec {x},\vec {y},\vec {z})} \end{aligned}$$
(2)

To determine the out-of-plane component \(v_z\), the fact that fibres are directed within the growth layer surface is utilised.

If \(\vec {n}= \left( \begin{array}{c}n_x\\ n_y\\ n_z\end{array}\right) _{(\vec {x},\vec {y},\vec {z})}\) is the growth layer normal direction, then \(\vec {v}\) is orthogonal to it, so \(\vec {v}.\vec {n} = 0\) or \((\vec {u} + v_z \vec {z}).\vec {n} = 0\), hence:

$$\begin{aligned} v_z = - \frac{\vec {u}\cdot \vec {n}}{n_z} \end{aligned}$$
(3)

To get \(\vec {n}\), the growth layers were reconstructed by image processing of colour scans of the successively revealed wood surfaces. Having \(\vec {u}\) and \(\vec {n}\) in the whole timber piece, it is thus possible to compute the fibre direction \(\vec {v}\). From \(\vec {v}\) it is then possible to get the projected (yz) out-of-plane angle \(\beta\), which differs from the out-of-plane "diving" angle \(\gamma\). These projected and full out-of-plane angles will be later used for comparison with the projected fibre angle measured on the initial specimen knot lateral face and method uncertainty assessment respectively (see “Results” section).

$$\begin{aligned} \beta&= \arctan {\left( \frac{v_z}{v_y}\right) } \\ \gamma&= \arctan {\left( \sqrt{\tan ^2{\beta } + \tan ^2{\alpha }}\right) } \end{aligned}$$
Fig. 4
figure 4

Synthetic description of the proposed method to determine 3D fibre orientation in sawn timber

A synthetic description of the method is given in Fig. 4.

3D data collection

Reference frame and planing layout

Fig. 5
figure 5

Scheme of wood specimen successive planing phases in defined global coordinate system; a Initial Douglas fir specimen before successive planings in the radial direction, portrayed by the thin red lines to reach approximate knot centre and pith location; b Douglas fir specimen explored volume through successive planings in the radial direction, portrayed by thin blue lines, in two parallel stretches, as a result of a preliminary split, with the saw kerf portrayed by a green line (colour figure online)

A Douglas fir specimen containing a complete, isolated knot, was selected and prepared such that the pith of the trunk aligned with one of the edges of the specimen. The specimen encompasses 34 annual rings. The observed live knot region persists until the 12th ring (starting from the pith), followed by a transition zone of about six rings. The knot was considered dead from the 18th ring on-wards. The specimen was first 2 mm planed four times in the tangential x-direction, as defined in Fig. 5a, to reach the assumed log pith location, so that the local coordinate system (xyz) corresponded approximately to the (TLR) coordinate system of the log at the knot centre. A laser dot scanning of the yz plane of the knot close cross-section, at \(x={-2}\,\text{mm}\) (x = 0 being the approximate knot center location and so an approximate plane of symmetry) was then carried out. The measured angle corresponds to the out-of-plane angle \(\beta\) shown in Fig. 3. After each planing, colour scans of the specimen visible surfaces at 600 dpi were achieved using a Toshiba multi-function scanner e-STUDIO2515AC. Following these operations, in order to obtain data of the fibre directions within it, the entire specimen of dimension \(48.6(x) \times 360(y) \times 210(z)\,\hbox {mm}^{3}\) was fully planed, 2 mm at a time, in the approximate radial z-direction. In order to speed up the process, the specimen was split in halves prior to these radial planings, such that two surfaces could be scanned simultaneously, as illustrated in Fig. 5b.

Colour scans

Prior to these radial planing operations, a ruler was engraved on both yz-faces of the specimen, so that the corresponding z-coordinates of the stack slices could be recorded (Fig. 6). The z-coordinates of the xy planes revealed by planing ranged from [-1.8 to 96.2] and from [103.5–201.5], in steps of 2 mm.

Fig. 6
figure 6

Illustration of the 600 dpi colour scans obtained before the radial planings with the engraved ruler visible (blue box). Next-to-be-planed face is marked by a hand plane icon (colour figure online)

After each \(-{2}\,\hbox {mm}\) planing, all sides were scanned with a 600 dpi resolution i.e. \({23.62}\,\hbox {px}\,\hbox {mm}^{-1}\), by means of the previously mentioned multi-function printer, as shown in Fig. 7c. This 2 mm pitch was chosen to ensure the surface quality obtained after planing with a SCM S520 planer, whereas the colour scan resolution of 600 dpi was chosen in accordance with Hu et al. (2018a).

In-plane fibre direction measurements

Fig. 7
figure 7

a Picture of the self-developed laboratory laser dot scanner; b annotated picture of scattered laser dot ellipse; c colour scan at \(z=103.5\); d corresponding scattered laser dot ellipses ratios at \(z=103.5\); e scattered laser dot ellipses major axis to \(\vec {y}\) angles, related to the in-plane fibre angles, at \(z=103.5\). The red area on (d) and red contour on c, e correspond to a threshold of the laser dot data ratio between the semi-major and semi-minor axis of the scattered ellipse at 1.2 (colour figure online)

After each radial planing operation, the revealed wood surfaces were scanned using a self-developed laboratory laser dot scanner. The scanner is supplied with a 5 mW laser source at 650 nm and a Basler Ace acA2000-\({165}\,\upmu \hbox {m}\) camera (exposure time of 8 ms), equipped with a 25 mm optical lens to measure laser dot elliptic scattering (resolution of \({17.65}\,\hbox {px}\,\hbox {mm}^{-1}\)), mounted on a XY-plotter (Fig. 7a). This device allowed taking pictures of the laser dot scattering in a \({2}\,\hbox {mm} \times {2}\,\hbox {mm}\) grid (Fig. 7b) and covered an area of \({46}\,\hbox {mm} \times {360}\,\hbox {mm}\) larger than the planed faces’ dimensions of size \({40.6}\,\hbox {mm} \times {360}\,\hbox {mm}\), after each radial planing operation. The camera focus i.e. the distance between the specimen scanned face and the camera was kept constant during the process using a positioning tool. After thresholding of the laser dot scattering grayscale images, the areas, angles (\(\alpha\)) and ratios between the semi-major and semi-minor axes of the best-fitting ellipses were computed numerically using the function cv2.fitEllipse() (Bradski 2000) in Python at each position of the defined grid (Fig. 7d–e). The mean length and standard deviation of the major and minor axis of the elliptically shaped light spot after the applied thresholding were approximately \({6.75}\,\hbox {mm} \pm {1.41}\,\hbox {mm}\) and \({4.13}\,\hbox {mm} \pm {0.52}\,\hbox {mm}\) respectively. The ellipses ratio strongly varies between latewood and earlywood for Douglas fir (Besseau et al. 2020), here between 1.3 and 2.3. It may therefore be used to approximately locate growth rings. This was used to match the laser dot and colour scans data, as explained in the following section. The ratio can also be used to detect knots (Jolma and Mäkynen 2008). The red area and contours depicted in Fig. 7c–e mark areas where the ellipse ratio is below 1.2 thus provided a rough estimate of the knot region. Other methods should though be considered for determining the size of knots.

Colocalisation

A central concern of the data collection procedure was to obtain accurate referencing/mapping between laser dot data and colour images due to the usage of different devices.

Fig. 8
figure 8

Colocalisation process to determine offset between laser dot and colour scans (colour figure online)

Because small shifts could occur during the colour scans, a first colocalisation stage of the data was applied. This object-based colocalisation (ImageJ Wiki 2023) was achieved by making use of the ratio between major and minor axes of the laser dot elliptical scattering. The knot and annual ring pattern visible on the ellipses ratio data was colocalised with respect to the colour scan images on which the annual ring and knot pattern was visible as well. Because of the very different resolution between the colour scan, at \({23.62}\,\hbox {px}\,\hbox {mm}^{-1}\), and the laser dot scan at \({0.5}\,\hbox {px}\,\hbox {mm}^{-1}\), it was chosen to work at an intermediate scale of \({1}\,\textrm{mm} \times {1}\,\textrm{mm}\), implying a \(2 \times bilinear-upscaling\) of the laser dot scans data, and a \(1:23.62 \quad bilinear-downscaling\) of the colour scans data. This was achieved using the function cv2.resize() with cv2.INTER_AREA (Bradski 2000). Thus, a joint grid with a resolution of \({1}\,\hbox {mm}(x)\times {1}\,\hbox {mm}(y)\times {2}\,\hbox {mm}\) of the colour scan data and laser dot scan data was obtained in a corresponding volume of size \({354}\,\hbox {mm} \times {37}\,\hbox {mm} \times ({100}\,\hbox {mm} + {100}\,\hbox {mm})\) of co-referenced data. The rotation, offsets and cropping parameters of the colour scans were recorded. The colocalisation process to get a joint colour and laser dot data stack is presented in Fig. 8.

Identification of boundaries between annual rings

Fig. 9
figure 9

Growth layer boundaries reconstruction process from semi-automated segmentation

Growth layer boundary surfaces were obtained through the stacking of detected growth layers on the colour scans (Fig. 9a). Because the growth layer boundaries observed on the colour scans form non-parametric and segmented lines of non-uniform colour, the identification of boundary layers between annual rings was made semi-automatically. First, a watershed segmentation on filtered colour scan images (10 px-radius median filter to remove noise) was achieved by a short macro in the image processing software Fiji using the MorphoLibJ library. This provides several mathematical morphology methods and plugins created at the INRA-IJPB Modeling and Digital Imaging lab for ImageJ (Schindelin et al. 2012; Legland et al. 2016) (Fig. 9b). Then, all segments of a same growth layer were manually identified by a unique colour according to an initial colour map of the growth layer built on the knot cross-section (Fig. 9c). When it was no longer possible to distinguish the "lower" ring from the "upper" ring as it approached the knot, the latter joined the grey area delimiting the knot region. The segmented colour scans were downscaled using a nearest neighbour interpolation, so as to maintain colour. Thereafter a mask of each growth layer and the knot was generated by colour thresholding after cropping and data re-alignment according to the colocalisation recorded rotation, offsets and cropping parameters (see Fig. 8). Ring boundaries were thereupon drawn as the intersection of the dilated masks of neighbouring growth layers (Fig. 9d).

Fig. 10
figure 10

a Visualisation oh the \(18{\text {th}}\) growth ring (meshed surface) and corresponding point cloud (coloured dots); b computed normals to the growth surface marked; c computed fibre directions marked (colour figure online)

Once growth layer boundaries for each couple of neighbouring growth layers and for each colour scan have been drawn, a subpoints set of those lines of about a point every 2 mm, corresponding to the planing depth, was extracted to obtain a fairly regular surface sampling. These subpoints were loaded as a point cloud in Open3D, an open-source python library that supports rapid treatment of 3D data (Zhou et al. 2018), to compute z-positive oriented normals at each sub-point using the \(open3d.geometry.estimate\_normals\) function. The point cloud and normal direction computed for the \(18{\text {th}}\) ring boundary can be seen in Fig. 10a and b respectively. Once this normal direction was computed, the xy in-plane fibre angle \(\alpha\) at the corresponding data grid location was used to compute the 3D fibre angle using Eqs. (1) and (3) at each point of the point cloud as shown Fig. 10c.

3D fibre direction computation in the whole specimen

Because the points extracted from the different ring boundaries are distributed unevenly and sparsely throughout the specimen, the obtained normals direction data set form a sparse unstructured 3D data set (see Fig. 8). Therefore, to compute the fibre direction at each point of the joint grid, growth layers’ normals were linearly interpolated using the Scipy Python library interpolation function griddata. Thus, having both \(\vec {u}\) the in-plane fibre angle by a \(2 \times bilinear-upscaling\) of the laser dot scans data, and \(\vec {n}\) the growth normal direction for each point of the joint grid, the 3D fibre direction in the specimen co-referenced data volume was computed using Eq. (3).

Assessment of the accuracy of the computed fibre orientation

Sources of uncertainties

The combination of the measured in-plane fibre angle and evaluated growth layer boundary surface in Eq. (3) to determine the 3D fibre orientation inside the wood specimens propagates several uncertainties, which are listed below.

Laser dot and colour scans alignment with the reference frame

For the Douglas fir specimen, alignment of laser dots and colour scans at each z-position was ensured by the growth layer boundary-based colocalisation analysis (see “Colocalisation” section). It is supposed that thanks to the positioning tool (see “In-plane fibre direction measurements” section) the laser dot scanning alignment in between z-positions was flawless, but shifts would have induced slight errors in the results shown.

Laser dot measurement

The in-plane fibre angles \(\alpha\) were measured on laser dot scattering ellipses, which would induce an uncertainty of \(\pm {0.9}^{\circ }\) for Douglas fir LT-planed surfaces according to Besseau et al. (2020).

Growth layer boundaries reconstruction

The growth layer boundaries were obtained using mathematical morphology methods. The growth layer boundaries obtained were compared to the visually assessed ones on ten different \(z-slices\) of a second wood specimen, and a maximum offset of 20 px, i.e. 0.847 mm was recorded.

Normals estimation uncertainty

The normals estimation function provided by the Open3D library simplifies the problem of determining the normal to a point on the surface into a calculation of the plane passing as close as possible to the k neighbouring points considered, which amounts to a least-square plane fitting estimation problem. The solution for estimating the surface normal was thus reduced to an analysis of the eigenvectors and eigenvalues (or PCA—Principal Component Analysis) of the covariance matrix built from the nearest neighbours of the query point (Rusu 2010).

Fig. 11
figure 11

3D plot illustrating the 400th point of the 5th growth-layer covariance matrix principal components accounting for neighbouring points in a 6 mm-radius. Eigenvectors norm are multiplied by 20 and divided by the corresponding eigenvalues as a power of 1/5 for the sake of understanding, these vectors are denoted \(\vec {n_\lambda }\), \(\vec {t_\mu }\) and \(\vec {u_\nu }\). \(\lambda\), \(\mu\) and \(\nu\) values of the 400th point of the 5th growth-layer are \(9.42 \cdot 10^{-3}\), 6.12, 13.4 respectively

Let \(\vec {p}_i (x_i,y_i,z_i)\) be the position vectors of the k neighbouring points of the growth layer point positioned at \(\vec {p}\)  and \(\vec {\bar{p}}(\bar{x},\bar{y},\bar{z})\) the 3D centroid of the nearest neighbours, the corresponding covariance matrix \(\mathcal {C}\) is defined as:

$$\begin{aligned} \begin{aligned} \mathcal {C}(\vec {p})&= \frac{1}{k}\sum _{i=1}^{k}{\cdot (\vec {p}_i-\vec {\bar{p}})\cdot (\vec {p}_i-\vec {\bar{p}})^{T}}\\&= \dfrac{1}{k}\sum _{i=1}^k \begin{bmatrix} (x_i-\bar{x})^2 &{} (x_i-\bar{x})(y_i-\bar{y}) &{} (x_i-\bar{x})(z_i-\bar{z}) \\ &{} (y_i-\bar{y})^2 &{} (y_i-\bar{y})(z_i-\bar{z}) \\ \text {sym} &{} &{} (z_i-\bar{z})^2 \\ \end{bmatrix}_{(\vec {x},\vec {y},\vec {z})} \end{aligned} \end{aligned}$$

This matrix is symmetric and positive semi-definite. It is therefore diagonalisable and its eigenvalues represent the variances of the neighbouring points’ positions to the point cloud centroid, in the directions of the covariance matrix eigenvectors.

$$\begin{aligned} \mathcal {C}(\vec {p}) = \lambda _p \cdot \vec {n_p} \otimes \vec {n_p} + \mu _p \cdot \vec {t_p} \otimes \vec {t_p} + \nu _p \cdot \vec {u_p} \otimes \vec {u_p} \end{aligned}$$

where \(\lambda _p\) is the smallest eigenvalue of the covariance matrix, and hence \(\vec {n_p}\) is the approximate normal to the surface layer at \(\vec {p}\). \(\mu _p\), \(\nu _p\), are the other two bigger eigenvalues, and \(\vec {t_p}\) and \(\vec {u_p}\) their corresponding eigenvectors.

Using the perturbation theory, it is possible to determine the error due to the misplacement of one point describing the ring boundary layer (Liviu 2016):

$$\begin{aligned} \dfrac{{d}\vec {n_p}}{{d}\vec {p}_i} = \dfrac{\vec {t_p}}{\lambda _p-\mu _p} \left[ \vec {t_p} \cdot \dfrac{\partial \mathcal {C}(\vec {p})}{\partial \vec {p}_i} \cdot \vec {n_p} \right] + \dfrac{\vec {u_p}}{\lambda _p-\nu _p} \left[ \vec {u_p} \cdot \dfrac{\partial \mathcal {C}(\vec {p})}{\partial \vec {p}_i} \cdot \vec {n_p} \right] \end{aligned}$$

Assuming that \(d\vec {p}_i = dx_{p_i} \vec {x} + dy_{p_i} \vec {y}\), with \(\left\Vert d\vec {p}_i \right\Vert \le {0.85}\,\hbox {mm}\) (corresponding to the 20 px ring boundary potential mismatch), as:

$$\begin{aligned} \dfrac{\partial \mathcal {C}(\vec {p})}{\partial x_{p_i}}= & {} \dfrac{1}{k} \begin{bmatrix} 2 (x_{p_i}-\bar{x}) &{}\quad (y_{p_i}-\bar{y}) &{}\quad (z_{p_i}-\bar{z}) \\ &{}\quad 0 &{}\quad 0 \\ \text {sym.} &{} &{}\quad 0 \\ \end{bmatrix} _{(\vec {x},\vec {y},\vec {z})}\nonumber \\{} & {} \& \dfrac{\partial \mathcal {C}(\vec {p})}{\partial y_{p_i}} = \dfrac{1}{k} \begin{bmatrix} 0 &{}\quad (x_{p_i}-\bar{x}) &{}\quad 0 \\ &{}\quad 2 (y_{p_i}-\bar{y}) &{}\quad (z_{p_i}-\bar{z}) \\ \text {sym.} &{} &{}\quad 0 \\ \end{bmatrix} _{(\vec {x},\vec {y},\vec {z})}\nonumber \\ d\vec {n_p}= & {} \max \limits _{(dx_{p_i}, dy_{p_i}) \in \{-0.6,0,0.6\}^2} \left( \sum _i^k \overrightarrow{\mathcal {A}(\vec {p})} dx_{p_i} + \sum _i^k \overrightarrow{\mathcal {B}(\vec {p})} dy_{p_i} \right) \nonumber \\ \text {where} \qquad \overrightarrow{\mathcal {A}(\vec {p})}= & {} \dfrac{\partial \vec {n_p}}{\partial x_{p_i}} = \dfrac{\vec {t_p}}{\lambda _p-\mu _p} \left[ \vec {t_p} \cdot \dfrac{\partial \mathcal {C}(\vec {p})}{\partial x_{p_i}} \cdot \vec {n_p} \right] + \dfrac{\vec {u_p}}{\lambda _p-\nu _p} \left[ \vec {u_p} \cdot \dfrac{\partial \mathcal {C}(\vec {p})}{\partial x_{p_i}} \cdot \vec {n_p} \right] \nonumber \\{} & {} \& \qquad \overrightarrow{\mathcal {B}(\vec {p})} = \dfrac{\partial \vec {n_p}}{\partial y_{p_i}} = \dfrac{\vec {t_p}}{\lambda _p-\mu _p} \left[ \vec {t_p} \cdot \dfrac{\partial \mathcal {C}(\vec {p})}{\partial y_{p_i}} \cdot \vec {n_p} \right] \nonumber \\{} & {} + \dfrac{\vec {u_p}}{\lambda _p-\nu _p} \left[ \vec {u_p} \cdot \dfrac{\partial \mathcal {C}(\vec {p})}{\partial y_{p_i}} \cdot \vec {n_p} \right] \end{aligned}$$
(4)

Looking closer at these formulae, firstly, as \(\dfrac{\partial \mathcal {C}(\vec {p})}{\partial x_{p_i}}\) and \(\dfrac{\partial \mathcal {C}(\vec {p})}{\partial y_{p_i}}\) are products in \(\frac{1}{k}\), it appears that the greater the number k of nearest neighbour points, the lower the uncertainty about \(\vec {n}\). This is true in the sense that the greater the number of points considered, the less sensitive the covariance matrix will be to a small variation in the position of these points. However, increasing the number of points considered implies looking at a larger point cloud, which no longer allows strong curves to be observed. This is why, in the open3D normal estimation function an arbitrary maximum radius search of 6 mm was set (see Fig. 11), which accounts for the maximum curvature wished to be observed (Mitra and Nguyen 2003). In Fig. 11, the eigenvector directions are represented as stretched or reduced as a function of the associated eigenvalues to highlight the direction normal to the rings thus identified. They are denoted \(\vec {n_\lambda }\), \(\vec {t_\mu }\) and \(\vec {u_\nu }\).

Secondly, \(\dfrac{\partial \mathcal {C}(\vec {p})}{\partial x_{p_i}}\) and \(\dfrac{\partial \mathcal {C}(\vec {p})}{\partial y_{p_i}}\) depends on the choice of displacement combination \((dx_{p_i}, dy_{p_i})\) applied to the considered point and neighbouring points. Having the same displacement applied to all the points would lead to a simple translation of the points, no change of the points sample normal and \(d\vec {n_p} = \vec {0}\). Therefore, to evaluate the uncertainty over the fibre direction calculation, the displacement combination \((dx_{p_i}, dy_{p_i})\) (\((dx_{p_i}, dy_{p_i}) \in \{-0.6,0,0.6\}^2\) so that \(\left\Vert d\vec {p}_i \right\Vert \le {0.85}\,\textrm{mm}\)) is chosen so that \(\Vert d\vec {n_p} \Vert\) is maximised, \(d\vec {n_p}\) being orthogonal to \(\vec {n}\) by nature.

Total uncertainty estimation

Differentiating Eqs. (1) and (3), fibre direction uncertainty may be estimated by:

$$\begin{aligned} d\vec {v} = d\vec {u}+ dv_z \vec {z} = d\vec {u} + \left( d\vec {u}\cdot \dfrac{\vec {n}}{n_z}\right) \vec {z} + \dfrac{\vec {u} \cdot (n_z.d\vec {n} - dn_z.\vec {n})}{n_z^2} \vec {z} \end{aligned}$$
(5)

with

  • \(d\vec {u} = d\alpha \left( \begin{array}{c}\cos \alpha \\ sin\, \alpha \\ 0\end{array}\right) _{(\vec {x},\vec {y},\vec {z})}\), \(d\alpha = \pm 0.9^{\circ }\) (Besseau et al. 2020)

  • \(d\vec {n}\) may be computed using Eq. (4)

Fig. 12
figure 12

Illustration of the angular uncertainties on the fibre direction

As a matter of representation, the uncertainty on ring layers’ normal direction may be depicted by \(\delta = (\vec {v}, \vec {v}+d\vec {v})\) the angle between the computed fibre direction, and the perturbed one.

Furthermore, \(\delta\) can be decomposed (see Fig. 12) in:

$$\begin{aligned} \delta = \delta _{du} + \delta _{dv_z} \qquad \text {with} \qquad \left\{ \begin{aligned} \delta _{du}&= \left( \vec {v}, \vec {v} \pm d\vec {u} \right) \\ \delta _{dv_z}&= \left( \vec {v}, \vec {v} + \left( d\vec {u}\cdot \dfrac{\vec {n}}{n_z} + \dfrac{\vec {u} \cdot (n_z.d\vec {n} - dn_z.\vec {n})}{n_z^2} \right) \vec {z} \right) \\ \end{aligned} \right. \end{aligned}$$

where \(\delta _{du}\) is the angular uncertainty in the xy plane solely due to the ellipse of the laser point measurement uncertainty; \(\delta _{dv_z}\) is the out-of-plane angular uncertainty due to the impact of the laser point scattering measurement uncertainty and the neighbouring points normal direction computation uncertainty when making the fibre direction orthogonal to the growth layers.

Because \(d\vec {u}\) through \(d\alpha\), and \(d\vec {n}\) through \(dx_{p_i}\), \(dy_{p_i}\) may be positive or negative, the error will be maximised when \(\left( d\vec {u}\cdot \dfrac{\vec {n}}{n_z}\right)\) and \(\dfrac{\vec {u} \cdot (n_z.d\vec {n} - dn_z.\vec {n})}{n_z^2}\) are both pointing in the same direction, toward \(\vec {z}\) when \(v_z\) is negative and toward \(-\vec {z}\) when \(v_z\) is positive (Fig. 12). Therefore, an upper bound of the angular uncertainty about the 3D fibre direction may be given by:

$$\begin{aligned} \delta ^* = \delta _{du}^* + \delta _{dv_z}^* \qquad \text {with} \qquad \left\{ \begin{aligned} \delta _{du}^*&= \left( \vec {v}, \vec {v} + d\vec {u} \right) \qquad \text {with } d\alpha \text { arbitrarily positive}\\ \delta _{dv_z}^*&= \left( \vec {v}, \vec {v} + \left( \left|d\vec {u}\cdot \dfrac{\vec {n}}{n_z} \right|+ \left|\dfrac{\vec {u} \cdot (n_z.d\vec {n} - dn_z.\vec {n})}{n_z^2} \right|\right) \vec {z} \right) \\ \end{aligned} \right. \end{aligned}$$
(6)

Results

Only one direct angle measurement was carried out on an yz plane, namely at \(x = -{2}\,{mm}\), which is 2 mm from the plane at \(x = 0\) that best resembles a plane of symmetry through the centre of the pith of the knot. The plane at \(x = -{2}\,\hbox {mm}\) was scanned before the specimen was split into two halves. The result of this measurement (Fig. 13b) is compared to the result of the yz-projected computed fibre direction (Fig. 13a) at \(x={2}\,\hbox {mm}\), since this plane should approximately mirror the plane at \(x = -{2}\,\hbox {mm}\). To facilitate the comparison, a third figure (Fig. 13c) shows an overlay of both results, where it is possible to observe the correspondence between computed and measured diving angles. The region surrounding the knot, shaded in grey, was defined according to the area for which the laser dot scattering ellipses ratio is below 1.2 (see “In-plane fibre direction measurements” section). Indeed, ellipse ratios below this value are due to high out-of-plane fibre deviation or dense knot wood. In this region, the growth-layer identification ended, and the ellipses’ main direction was uncertain, so neither the computed fibre directions nor the measured fibre directions can be relied upon.

Fig. 13
figure 13

Comparison of the measured and computed yz projected out-of-plane angle \(\beta\) of the Douglas fir specimen knot near-cross-section showing: a the quiver plot of the computed yz projected out-of-plane angle fibre angle at \(x = {2}\,\hbox {mm}\); b the quiver plot of the measured yz projected out-of-plane angle fibre angle at \(x={-2}\,\hbox {mm}\); c the overlaid quiver plots of the measured and computed yz plane fibre angle. Drawn red lines and shadowed area picture the knot’s approximate boundaries. The blue circle shows a disturbance possibly due to an undeveloped neighbouring knot also visible in Fig. 14; d shows the corresponding picture of the specimen at \(x={-2}\,\hbox {mm}\) (colour figure online)

In the lower part of the images \([\approx {0}\,\hbox {mm}< z < {65}\,\hbox {mm}]\), the results, i.e. measured vs computed fibre directions, seem to differ considerably. The computed fibre deviation at \(x = {2}\,\hbox {mm}\) appears overall wider than the fibre deviation measured at \(x = -{2}\,\hbox {mm}\), particularly at the birth of the knot. Yet the differences, though partly attributable to the measurement uncertainty near the pith, can mainly be explained by the fact that the knot is not really symmetrical and that the plane at \(x=0\) is not a true plane of symmetry either. In particular, the effect of an undeveloped neighbouring knot, highlighted with blue encirclement, can be observed in Figs. 13a, c and 14. Therefore, both sets of results (Fig. 13a, b) show plausible fibre direction, except for the computed fibre direction very close to the knot (Fig. 13b) and at the edge of the specimen, where the growth layer computation is uncertain due to the lack of neighbouring points.

Fig. 14
figure 14

Streamline plot of the integrated computed yz projected out-of-plane direction field at \(x={2}\,\hbox {mm}\) (to avoid edge effect and lacking data) overlaid on the corresponding mirror colour scan at \(x=-{2}\,\hbox {mm}\) to the knot centre (\(x={0}\,\hbox {mm}\)). Beneath the streamline plot, the colour scan at \(z={19.8}\,\hbox {mm}\), positioned as indicated by the red line, shows the eventual disturbing undeveloped neighbouring knot (colour figure online)

By integrating the computed fibre directions from the grid, it is possible to draw streamlines of the computed fibre directions as can be seen in Fig. 14, which was done using matplotlib.pyplot.streamplot function (Hunter 2007). Looking at these streamlines at \(x={2}\,\hbox {mm}\) in relation to the colour scan at \(x=-{2}\,\hbox {mm}\), it can be observed that the fibre direction follows well the visible growth rings in the upper part of the specimen \([\approx {65}\,\hbox {mm}< z < {200}\,\hbox {mm}]\), up to a dive angle of approximately \({50}^{\circ }\), until only a few millimetres away from the knot boundary. This shows that the random noise resulting from a division by a small \(n_z\) value may to some extent be filtered by integration of the fibre direction by the streamplot function. Closer to the pith \([\approx {0}\,\hbox {mm}< z < {65}\,\hbox {mm}]\)n, the broader aspect of the fibre deviation stands out. Still, again this can mainly be related to a mismatch of symmetry between the position of the colour scan (\(x = -{2}\,\hbox {mm}\)) and that of the plotted streamlines (\(x ={2}\,\hbox {mm}\)). The overall very smooth change of streamline directions over the surface indicates that there is, overall, very little noise in the calculated fibre directions.

Fig. 15
figure 15

Angular uncertainty spacial and numerical distribution computed at the specimen growth layers sample points: a Out-of-plane, in-plane, and total angular uncertainty distribution over the growth layers sample points; b 3D point cloud of the growth layer sample points, with the color of the points indicating the computed relative uncertainty and the black segments representing the fibre directions

In Fig. 15a, the angular uncertainty, assessed using Eq. (6) is displayed. The angular uncertainty due solely to the laser dot scattering measurement \(\delta _{du}^*\) is negligible in comparison with the second term \(\delta _{dv}^*\) related to the computation for making the fibre direction orthogonal to the growth layers. This was expected, as when \(n_z = 0\), i.e. when the growth layer is orthogonal to the planing plane, the computation method (see Eq. 2) becomes ill-conditioned. It is indeed impossible to define the true 3D fibre direction with the proposed calculation method, as no matter how much the fibre direction \(\vec {v}\) is tilted with respect to the in-plane fibre direction \(\vec {u}\), it will remain in the growth layer. Thus, the more the growth layers are inclined to the planing plane, the more \(\frac{1}{n_z}\) diverges, and the higher the uncertainty of the 3D fibre is. This explains the greater fibre orientation computation uncertainty close to the pith, and close to the knot, as illustrated in Fig. 15b, where many growth layer points at the knot’s border appear in red, meaning a great fibre direction computation uncertainty. The points close to the pith do not show in this figure, but show a great computation uncertainty too, as illustrated by the erratic fibre directions depicted by black segments at the base of the specimen. It is important to note that the uncertainty induced by the division by a value of \(n_z\) close to zero is random. It is therefore possible to reduce its effect by smoothing the data, as was the case for the streamlines (Fig. 14).

Fig. 16
figure 16

Angular uncertainty as a function of the out-of-plane angle box plot over all the growth layers sample points. The box shows the quartiles of the dataset while the whiskers extend to show the rest of the distribution, except for points that are determined to be “outliers” when lying within 1.5 of the inter-quartile-ranges of the lower and upper quartile, represented as black diamonds

Knowing that the computation uncertainty is driven by the growth layer inclination to the planing planes, after looking at the distribution of the angular uncertainty as a function of the out-of-plane angle \(\gamma\) (Fig. 16), we can observe that the computation uncertainty, becomes preponderant from a fibre out-of-plane angle of \(\gamma\) about \({50}^{\circ }\). From this point, the angular uncertainty equals the out-of-plane angle, meaning that it is no longer possible to distinguish the angle value from the computation induced noise. It should be recalled that the plotted uncertainty is an upper bound, as the estimated total uncertainty angle is obtained for the worse combination of neighbouring points’ displacement for the normal computation (see “Normals estimation uncertainty” section), along with the worse ellipse angle shift. A more detailed study of the statistical error of the proposed computation method would enable a more accurate analysis of the 3D fibre direction computation skewness and dispersion. Nonetheless, this plot shows well the computation accuracy dependence on the fibre out-of-plane angle.

Conclusion and perspectives

The proposed method is innovative as it allows the determination of the three-dimensional fibre orientation on the scale of sawn timber, based on the simple fact that fibres belong to a growth layer, and using relatively simple tools (planing, and colour and laser dot scanners). Nevertheless, selecting the appropriate tools for measuring fibre angles or reconstructing the wood growth layers must be tailored to the specific wood species being studied. Although laser point scanning works well for many species, it can be less effective for others, especially among hardwoods. Additionally, for species with less visually distinctive wood rings compared to Douglas fir, densitometric measurement may be a better method for reconstructing growth layer.

This laboratory method enables a quantitative assessment of three-dimensional fibre orientation around knots. When the inclination between growth layers and the investigated planed surfaces is below \({50}^{\circ }\), the method provides accurate results. For the investigated specimen and knot, this corresponds to a very close distance to the knot and pith themselves. For other specimens, containing one or several knots with different orientations in relation to the investigated/scanned planes, it may be within other sub-volumes of the specimen that the determined fibre directions are uncertain. To obtain a favourable orientation of knots in relation to investigated wood surfaces, the planing layout may then be adapted to the board sawing pattern. In any case, when applied to structural size sawn timber the method should provide accurate data of fibre orientation except within certain, rather limited sub-volumes within the board. These sub-volumes would be easily identified considering the angle between the scanned surface and the growth layers. With respect to the mechanical properties of the sawn timber, high level of uncertainty for angle values of \({50}^{\circ }\) and more between fibre direction and longitudinal board direction is of less importance, since most of the stiffness and strength (about \({90}\%\)) is already lost at a grain angle of about \({30}^{\circ }\).

The true capabilities of this technique can be reliably evaluated if a sufficient number of specimens are analysed. In a further study, the method should be applied to timber boards containing numerous knots with different orientations in relation to the scanned planes. The obtained data of fibre orientation should be employed for calibration of mathematical models for fibre orientation.