1 Introduction

Disturbances in density-stratified fluids can be observed in laboratory experiments by taking advantage of the variations of refractive index they induce. Such visualization techniques discovered 300 years ago by Hooke (1665) include interferometry, shadowgraph and schlieren. A review of these methods is presented in Merzkirch (1974) and Settles (2001). The common physical principle behind all these non-intrusive techniques is the variation of the propagation speed and/or direction of light inferred by the density perturbations.

Interferometry measures density variations. In this method, parallel light is split into two beams, one is undisturbed, the other passes through the disturbed density field which results in a phase shift of its light rays. When both beams are merged and projected on a screen, interferences that occur are visualized as dark and bright fringes.

The shadowgraph method (Dvorak 1880) is sensitive to the second derivatives of density. Initially parallel light rays of a collimated beam are refracted when they encounter a lateral change in the refractive index gradient. The image obtained shows a pattern of dark or light regions corresponding to the focused or defocused rays. This method has a simple setup for qualitative measurements. It is especially well suited to the study of shock waves or turbulence in high-speed flows, but it is less sensitive to phenomena involving gradual changes in the refractive index.

Schlieren techniques are sensitive to density gradients and have often been used to visualize internal waves in continuously stratified fluids (Mowbray 1967; Stevenson 1969). The classical setup behind this method uses a collimated light beam, focused with a lens or with mirrors. At the focal point, a knife-edge is placed to block part of the light source. When passing through a media with density variations, the beam is distorted and focuses imperfectly. The image projected onto a screen via another lens shows brighter and darker regions due to positive and negative density gradients. Toepler (1864) developed different practical schlieren arrangements to observe various phenomena in homogeneous media. Since then, numerous improvements or adjustments were proposed such as the Moiré-Fringe method (Schardin 1942; Weinberg 1963) or color Schlieren (Elsinga et al. 2004), which enable quantitative measurements. Classical schlieren and interferometry however require precise optical systems which, though sensitive, can be difficult to implement in a laboratory.

Quantitative measurements of density gradient fields have recently been obtained using the “synthetic schlieren” method (Dalziel et al. 2000; Sutherland et al. 1999) and using the “Background Oriented Schlieren” (BOS) (Meier 2002; Raffel et al. 2000). In these particular techniques, a camera looks through a disturbance at an object–image typically composed of horizontal lines or random dots. The image is distorted by the perturbations in the density gradient field, which differentially bend the light rays as they travel through the tank. The differences between the two techniques lie in the algorithm used to analyze the data and derive the density gradient field, and in their applications (dynamics of internal gravity waves and compressible flows respectively). Quantitative validations of BOS exist for two-dimensional flows (Elsinga et al. 2004) and in the special three-dimensional axisymmetric case (Venkatakrishnan and Meier 2004; Venkatakrishnan 2005), though this tomography technique could be used in any fully three-dimensional flows.

Synthetic schlieren has been successfully used in flows with spanwise-uniform disturbances to measure the amplitude of internal gravity waves generated by a vertically oscillating cylinder in a stratified fluid (Sutherland et al. 1999, 2000; Sutherland and Linden 2002). In these experiments the wavefield is essentially two-dimensional with isopycnal surfaces stretching and compressing uniformly along the width of the tank. A single camera aligned with the cylinder axis is used to detect the apparent deformation of the object–image and to deduce the corresponding wavefield. For example, the camera can measure the vertical displacement, Δz, of horizontal lines in the object–image relative to the initial unperturbed object–image. From this displacement, the vertical density gradient perturbation field can be reconstructed.

The initial background density profile \({\bar{\rho}}(z)\) establishes the initial squared buoyancy frequency:

$$ N_o^2 = - \frac{g}{\rho_o}\frac{{\rm d}{\bar{\rho}}}{{\rm d}z}, $$
(1)

where g is the acceleration of gravity and ρ o the characteristic density of water. N o represents the natural frequency of vertical oscillations of displaced fluid. In a perturbed system, we assume that the squared buoyancy frequency can be decomposed into a steady state and perturbation term, N 2  =  N 2 o  +  ΔN 2, where \(\Updelta N^2 \equiv - \frac{g}{\rho_o}\frac{\partial\rho}{\partial z}\) is the change in the squared buoyancy frequency given in terms of vertical gradients of the perturbation density field ρ.

If the wave is uniform across the tank in the direction of visualization (say the y-axis), then ΔN 2 is a constant along that direction. At a particular height z, the vertical displacement of the object–image is then given in terms of ΔN 2 by (Sutherland et al. 1999)

$$ \Updelta z(x,z) = \left[\gamma \left(\frac{n_{\rm w}}{n_{\rm a}} L_s L + \frac{1}{2}L^2 \right) \right] \Updelta N^2(x,z) $$
(2)

where \(\gamma = \frac{1}{g}\frac{\rho_o}{n_{\rm w}}\frac{\Updelta n} {\Updelta\rho} \simeq 1.878\times 10^{-4}\ {\rm s}^2/\hbox{cm},\quad n_{\rm a}=1\) and n w = 1.333 are the refractive indices for air and water respectively. Here we assume a linear relationship between the change in density of salt water Δρ and the refractive index Δn (Weast 1981). The light ray travels a distance L s in the air from the object–image to the tank and a distance L through the tank itself. The initial perturbation field ΔN 2(x,z) that generated the observed displacement of the lines in the object–image is retrieved by inverting Eq. (2), through simple scalar division of the term in square brackets. Measurements of frequency and wavenumber can then be used together with linear theory to estimate such fields as velocity and vertical displacement.

Instead of using horizontal lines to obtain measurements of the vertical density gradient, an initial object–image made of randomly positioned dots gives information about both horizontal and vertical fluctuations (Dalziel et al. 2000). This method employs a pattern-matching algorithm and has likewise been successfully tested with oscillating cylinder experiments.

Quantitative synthetic schlieren has been extended to the case of three-dimensional axisymmetric disturbances (Onu et al. 2003) and was used to measure the amplitude of waves generated by an oscillating sphere in a uniformly stratified fluid (Flynn et al. 2003). Making use of the symmetry of this problem, the perturbation field ΔN 2 is a function of height z and of the radial distance R from the vertical axis. The vertical displacement of the object–image is given in terms of ΔN 2 by (Onu et al. 2003)

$$ \Updelta z (x,z) = \gamma \left\{\frac{n_{\rm w}}{n_{\rm a}} L_s \int\limits_0^{L} \Updelta N^2(R,z) \hbox{d} y + \int\limits_0^{L}\!\int\limits_0^{y} \Updelta N^2(R,z) \hbox{d} {\hat{y}} \hbox{d} y \right\}, $$
(3)

in which \(R=\sqrt{x^2+y^2}.\) To retrieve the initial perturbation field, the right-hand side of Eq. (3) was discretized in polar coordinates to form a matrix system of equations. An LU-decomposition scheme was then used to invert the matrix and the amplitude of the wavefield ΔN 2(R,z), was determined. Yick et al. (2007) made some recent modifications of this method to study microscale disturbances for which horizontal density gradient perturbations are predominant.

A modified synthetic Schlieren technique was developed by Scase and Dalziel (2006) to measure the “breadth-averaged” density gradients created by a fully three-dimensional perturbation. They applied this method to study internal waves generated by towing a sphere through a density stratified fluid. Good results compared to theoretical prediction were obtained. However this method did not procure three-dimensional information on the flow.

If the disturbance is fully three-dimensional, the relationship between the displacement of the horizontal lines and the change in density is more complicated. It is generally not possible to invert it exactly because the system is ill-posed: there is less information than data points. However, approximate solutions can be found using inverse tomography. At each level z, the two-dimensional disturbance ΔN 2 can be reconstructed from the Δz profiles obtained from visualizations at different angles of perspective. Among the reconstruction methods that exist, some uses the Fourier domain such as convolution back-projection. These are commonly used in X-ray imaging for example, but are less accurate when few perspectives are performed. Another approach, which is used in the present paper, is to reformulate the problem as a set of linear algebraic equations (Kak and Slaney 1988; Muralidhar 2002).

In Sect. 2, we briefly describe how the wave amplitudes are computed and determined from the displacement of initially horizontal lines visualized from different perspectives through the experiment. The inverse tomography program is tested on two idealized displacement fields generated either from a Gaussian perturbation of the squared buoyancy frequency field, or from a Gaussian perturbation multiplied in amplitude by a sine function. Results are presented and discussed in Sect. 3 and the effectiveness of the density wavefield reconstruction is summarized in Sect. 4.

2 Theory

2.1 Synthetic schlieren method

The inverse tomography program described in this paper is tested on idealized numerical experiments. Eventually, though not in the present paper, it will be applied to real laboratory data from experiments using the synthetic schlieren method. In such experiments, a camera or a series of cameras will be used to measure the apparent deformation of an object–image made of horizontal lines from one or many perspectives.

We assume that the distortions occur due to disturbances in a square tank measuring L by L in the horizontal. Multiple perspectives can be obtained in two distinct ways: we can use up to four cameras to observe the same experiment from the four sides of the square tank or we can use a single camera looking from one side of the tank and repeat the experiment several times, turning the orientation of the experiment within the tank with respect to the line of sight of the camera. For example, if the perturbations of the density gradient are generated by towing an object across the tank, the experiment can be repeated with the object towed at different angles compared to the fixed direction of the camera.

The displacement of the horizontal lines seen by the camera results from the vertical deflection of the light rays traveling through this tank where fluctuations of the index of refraction exist. These come from perturbations of the background density gradient field measured in terms of ΔN 2, which is generally a function of three-dimensional space and time.

Here we consider the disturbance at a fixed time and at a fixed vertical level z. The challenge is to reconstruct ΔN 2(x,y) given general measurements of Δz(χ), in which χ ≡ x for a disturbance field recorded by a camera looking parallel to the y-axis; χ ≡ y for a camera looking parallel to the x-axis; and generally, χ ≡ x sinϕ  +  y cosϕ for a camera looking at an angle ϕ counterclockwise from the x-axis.

The relation between ΔN 2 and the displacement Δz of the light ray is found by applying Snell’s law along the ray path:

$$ \Updelta z(\chi) = \gamma \left\{\frac{n_{\rm w}}{n_{\rm a}} L_s \int\limits_0^{L} \Updelta N^2(\chi_{\perp},\chi) \hbox{d} \chi_{\perp} + \int\limits_0^{L}\!\int\limits_0^{\chi_{\perp}} \Updelta N^2({\widehat{\chi}}_{\perp}, \chi) \hbox{d} {\widehat{\chi}}_{\perp} \hbox{d} \chi_{\perp} \right\}, $$
(4)

where \(\chi_{\perp} = -x \cos{\phi} + y \sin{\phi}\) is the direction of the ray (or line of sight of the camera), perpendicular to χ. For example, if the ray is parallel to the y-axis \((\phi = 90^\circ, \chi \equiv x, \chi_{\perp} \equiv y),\)

$$ \Updelta z(x) = \gamma \left\{\frac{n_{\rm w}}{n_{\rm a}} L_s \int\limits_0^{L} \Updelta N^2(x,y) \hbox{d} y + \int\limits_0^{L}\!\int\limits_0^{y} \Updelta N^2(x,{\hat{y}}) \hbox{d} {\hat{y}} \hbox{d} y \right\} $$
(5)

If ΔN 2 is constant in the x-direction, the perturbation is two-dimensional and the special case of Eq. (2) is retrieved (Sutherland et al. 1999). Similarly the axisymmetric case corresponds to ΔN 2 depending on the radial distance only.

To reconstruct the initial perturbation field ΔN 2 from multiple perspectives, equations of the form (4) are combined, discretized and numerically inverted. The ΔN 2 field can then be used to estimate the amplitude of the waves, and its evolution in time provides an estimate of the velocity and density perturbation fields (Sutherland et al. 1999) to get the complete structure of the wavefield.

2.2 Discretization of the problem

A single camera measures a discrete set of values Δz i ) during an experiment. These are determined at equally spaced intervals corresponding to the midpoint of each pixel i = 1,..., n χ, in which n χ is the horizontal resolution of the camera:

$$ {\varvec{\Updelta}}{{\mathbf{z}}} = \left(\Updelta z(\chi_1), \Updelta z(\chi_2), \ldots, \Updelta z(\chi_{n_{\chi}}) \right). $$
(6)

The right hand side of (4) can be discretized by representing ΔN 2 in Cartesian coordinates \(\left({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} \equiv \Updelta N^2 (x_i, y_j)\right)\) or polar coordinates \(\left({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} \equiv \Updelta N^2 (R_i, \theta_j)\right)\) as illustrated in Fig. 1.

Fig. 1
figure 1

Horizontal cross-section showing the grid and notations used to discretize Eq. (4) in a Cartesian coordinates and b polar coordinates

For simplicity, we consider the case of a camera pointing parallel to the positive y-direction, for which χ ≡ x and \(\chi_{\perp} \equiv y.\) The inversion methods used for each discretization are discussed below.

2.2.1 Cartesian discretization

When using Cartesian coordinates, the tank is divided into n x × n y cells in the x and y directions (Fig. 1a), which gives a vector of length n x n y for the ΔN 2 field, defined as

$$ \begin{aligned} {\varvec{\Updelta}} {{\mathbf{N}}}^{2} &= \left(\Updelta N^2(x_1,y_1), \Updelta N^2(x_1,y_2), \ldots, \Updelta N^2(x_1,y_{n_y}), \right. \\ \,&\quad \left. \Updelta N^2(x_2,y_1), \ldots , \Updelta N^2(x_2,y_{n_y}), \ldots , \Updelta N^2(x_{n_x},y_{n_y})\right). \end{aligned} $$
(7)

In the case of only one perspective, with the camera pointing parallel to the y-axis, we consider each path of the n x equally spaced rays x i that traverse through cells of constant size Δy ij . The relationship (5) between the vertical displacement and the perturbation squared buoyancy field can be discretized to a matrix equation

$$ {\varvec{\Updelta}} {{\mathbf{z}}} = {{\mathbf{G}}} {\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} = \gamma \left(L_s \frac{n_{\rm w}}{n_{\rm a}} {{\mathbf{G}}}_{{\mathbf{1}}} + {{\mathbf{G}}}_{{\mathbf{2}}} \right) {\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}. $$
(8)

The matrix G contains informations on the geometric properties of the system. The matrices G 1 and G 2 are defined for the ray x i by a finite series expansion technique (Censor 1983) as

$$ \int\limits_0^{L} \Updelta N^2 {\rm d}y \simeq \sum_{j=1}^{n_y} \Updelta N^2(x_i,y_j) \Updelta y_{ij} \equiv {{\mathbf{G}}}_{{\mathbf{1}}} {\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} $$
(9)

and

$$ \begin{aligned} \int\limits_0^L \int\limits_0^y \Updelta N^2 \hbox{d} \hat{y} \hbox{d} y &\simeq \sum_{k=1}^{n_y} \Updelta y_{ik} \sum_{j=1}^k \Updelta y_{ij} \Updelta N^2\left(x_i,y_j\right) \\ &\equiv {{\mathbf{G}}}_{{\mathbf{2}}} {\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}. \end{aligned} $$
(10)

In this case, the matrix G has dimensions n x × n x n y . Likewise, the line of sight of the camera can be oriented along the x-axis (χ ≡ −x) to observe the displacement Δz(y i ). Then G has dimensions n y × n x n y . Generally, the camera can be oriented along a line of sight at any angle ϕ from the x-axis. Assuming that the horizontal resolution of the camera does not change, it is convenient to choose n x  = n y n χ. The \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles observed through the different perspectives are generated by the same \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field and the contribution of each perspective are gathered together to write a single matrix equation (8). Thus, if the number n χ of rays considered in each direction is the same, performing n p perspectives of the same experiment (typically four perpendicular views) increases the size of the G-matrix to n p n χ × n 2χ . The system is better constrained since more equations are involved, but the number of unknowns remains equal, and the precision of the result of the inversion significantly improves as we shall see in Sect. 3.

2.2.2 Polar discretization

The perturbation \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field can be discretized using polar coordinates as shown in Fig. 1b. The domain is divided into n r equally spaced circles of width ΔR and n θ radial lines intersecting at the center of the tank, which define n θ sectors of equal area. The ΔN 2 field is then an (n r n θ) component vector

$$ \begin{aligned} {\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} &= \left(\Updelta N^2(r_1,\theta_1), \Updelta N^2(r_1,\theta_2), \ldots, \Updelta N^2(r_1,\theta_{n_{\theta}}), \right. \\ & \quad \left. \Updelta N^2(r_2,\theta_1), \ldots , \Updelta N^2(r_{n_r},\theta_{n_{\theta}})\right) \end{aligned} $$
(11)

where \(r_i=(i+\frac{1}{2}) \Updelta R\) refers to the average of the inner and outer radii of the ith ring and θ j  =  2π(j + 1)/n θ refers to the sectors such that they are never in line with the camera. No particular assumption is made on the outermost ring. However in typical laboratory experiments, disturbances at side walls are insignificant and we can assume ΔN 2 = 0 outside the largest ring.

In polar coordinates, the size Δy ij and the number of the cells traversed by a light ray are no longer constant and have to be calculated (Fig. 1b). These depend on which circles and which sectors the light ray passes through and are determined algorithmically. When the position of the ray considered is close to the middle of the tank, more cells are traversed than for a light ray near the tank edges. Besides this, the matrix G is computed in a similar way as in Cartesian coordinates, using sectors and circles instead of x and y positions. Its size is n χ × n r n θ.

Adding other perspectives is simply achieved numerically by rotating the grid (i.e. the radial lines and sectors) of an angle corresponding to the direction of the new perspective, with the camera still pointing in the positive y-direction. If the angle of rotation is not a multiple of 90°, the size of the cells changes.

2.3 Inversion methods

During an experiment, discrete values of \({\varvec{\Updelta}} {{\mathbf{z}}}\) are measured and values of the squared buoyancy field \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) can be deduced by inverting the matrix G. The discretized version of the disturbance field reconstruction problem (8) is a linear algebraic system of equation that can be solved by various inversion techniques. However, G is a sparse matrix having on the order of n p n 2χ non-zero elements out of the n p n 3χ entries of G in Cartesian coordinates. The degree of sparsity of G is similar for the polar coordinates grid. It is singular even when the resolution in the x and y direction is chosen to be the same as the number of data points in the displacement profile \({\varvec{\Updelta}} {{\mathbf{z}}}\) (equal to the resolution of the camera).

In our approach, G can be inverted by a pseudo-inverse technique. It uses a preconditioning parameter to modify the ill-conditioned system of equations into a solvable problem (Zhdanov 2002). The eigenvalues of the symmetric matrix G T G are shifted by the regularization parameter μ to enable inversion of the well-conditioned system \(({{\mathbf{G}}}^T{{\mathbf{G}}}+\mu I){\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} = {{\mathbf{G}}}^T {\varvec{\Updelta}} {{\mathbf{z}}}.\) The inversion uses the standard LU-decomposition scheme, which entails O(n 6χ ) steps.

A better inversion process uses a Bi-Conjugate Gradient (CG) method (Golub and Van Loan 1996). Results obtained are similar to the pseudo-inverse technique, with the advantage that it takes only a fraction of the time to run computationally. The iterative CG scheme efficiently calculates the solution of large sparse systems, by evaluating successive approximation of the solution. The residuals corresponding to the iterates are minimized with a least square algorithm. This process is much less time consuming for computation since no matrix inverse has to be calculated. Instead, several matrix multiplication operations are performed, making the method more efficient for sparse matrices. These are stored in a compressed row-index format (which is not feasible for LU-decomposition) yielding to significant saving in memory usage. For comparison, the total computational time to solve the inverse problem on a SGI machine for n χ = 40 is about 20 min using LU-decomposition but only a few seconds using the CG scheme. This second method was retained for the inverse tomography program described here.

To increase the rate of convergence of this method, one could use a preconditioning parameter. Weighting is also available to apply to the input data \({\varvec{\Updelta}} {{\mathbf{z}}}\) or to the final \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field obtained either by multiplying the resultant field with a Gaussian or multiplying and running the CG scheme a second time, or by including the weight within the CG algorithm. The disadvantage of weighting is that it implies an a-priori knowledge of the shape of the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field. This program has also the option to add smoothing of the resulting \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field through first, second derivatives or a Laplacian. None of the above weighting methods are used in the idealized examples presented here. However, these options could be useful in practical applications when the recorded experimental data are noisy (see Sect. 3.4).

3 Results

The three dimensional inverse program was tested using three different idealized squared buoyancy fields \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}.\) In the axisymmetric case, a Gaussian disturbance was centered at the middle of a square domain of width and breadth L = 20 cm: \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} = A \exp{\left[ -\left(x^2 + y^2 \right) / (2 \sigma^2) \right]},\) with A = 1 s−2 and σ = 3 cm. In the fully three-dimensional case, the disturbance was a Gaussian multiplied by a sine function: \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} = A \sin{\left[k_x x + k_y y\right]} \exp{\left[-\left(x^2 + y^2 \right) / (2\sigma^2)\right]},\) with k x  = k y  = 1/3 cm−1. The corresponding displacement \({\varvec{\Updelta}} {{\mathbf{z}}}\) is computed by the forward problem Eq. (8) for any number of perspectives. The displacement profiles are then input to the inverse tomography code and the results are compared with the original \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field.

Since experimental data are often noisy, we tested the ability of the program to reconstruct the same \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field from \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles altered by white noise. A third test case with no underlying azimuthal symmetry was produced, simulating a plane wave packet. The disturbance is a sinusoidal plane wave in the y-direction with an elliptical Gaussian envelope \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}} = A \sin{\left[k_y y\right]} \exp{\left[- x^2 / (2\sigma_x^2)\right]} \exp{\left[- y^2 / (2\sigma_y^2)\right]},\) with A = 1 s−2, k y  = 1 cm−1, σ x  = 4 cm and σ y  = 3 cm.

3.1 Gaussian disturbance

The Gaussian \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field is shown in Fig. 2a. The initial resolution for the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field is n x × n y  = 512 × 512. The corresponding displacement profile \({\varvec{\Updelta}} {{\mathbf{z}}}\) obtained by solving the forward problem is shown in Fig. 2b. This profile corresponds to the displacement seen by a camera heading in either the x or y direction due to the symmetry of the disturbance, with n x  = n y  = 512 points.

Fig. 2
figure 2

a Initial Gaussian shape for the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) perturbation field. Gray-scale contours in (s−2). b Corresponding displacement field \({\varvec{\Updelta}} {{\mathbf{z}}}\) obtained by the forward solution, as seen by a camera with its line of sight in both the x and y directions. By symmetry these two perspectives give the same \({\varvec{\Updelta}} {{\mathbf{z}}}\) observations

Figure 3 shows results for the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field obtained from the \({\varvec{\Updelta}} {{\mathbf{z}}}\) profile shown in Fig. 2b by the inverse tomography program using Cartesian coordinates. In Fig. 3a, only one perspective is taken and the line of sight of the camera is aligned with the y-axis, pointing in the positive direction (as represented). The inverse tomography process converges to a solution where most of the perturbation arises in the vicinity of the wall closer to the camera, with little variations along the y-axis. Having only one camera using Cartesian discretization of the domain is not sufficient to reconstruct the correct initial perturbation field \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}.\)

Fig. 3
figure 3

\({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field obtained from the inverse tomography in Cartesian coordinates for the initial Gaussian hump displacement field \({\varvec{\Updelta}} {{\mathbf{z}}}\) (n χ = 512) shown in Fig. 2, using a a single perspective with the camera aligned with the y-axis, pointing in the positive direction (as sketched), b two perspectives by adding a camera along the positive x-axis (as sketched), c three perspectives with an additional view along the negative y-axis and d four perspectives with an additional view along the negative x-axis

In Fig. 3b an additional perspective is obtained using a camera oriented along the positive x-axis. The maximum perturbation is now located at the center of the domain with an amplitude approaching the initial Gaussian \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field. Increasing the number of perspectives (Fig. 3b–d) clearly improves the accuracy of the reconstructed \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field. However, the cross-pattern that emerges persists even with three and four perspectives (Fig. 3c, d respectively) and the amplitude of the center part of the disturbance is underestimated (A max  = 0.6 A).

A much better result is found by performing the inversion in polar rather than Cartesian coordinates. More accurate \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) profiles can be reconstructed even at low resolution.

Results obtained using 4 perspectives, 40 rings and no sectors are presented in Fig. 4a. The cross-pattern does not appear and contour levels show very good agreement with the initial \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field of Fig. 2a. The maximum amplitude difference between the resulting \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field and the original Gaussian field do not exceed 5%. Since this maximum amplitude difference can be locally high for a given pixel, we chose to present accuracy of the results using the standard error σE defined as

$$ \sigma_{\rm E} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} \left({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}_{\rm meas.} - {\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}_{\rm orig.}\right)^2}, $$
(12)

where n is the number of cells in the domain. In this case with no sectors, the standard error σE is less than 1.3%. This inversion program with no sectors can thus be used to determine the structure and evolution of axisymmetric fluid dynamics problems using the synthetic schlieren technique (Onu et al. 2003).

Fig. 4
figure 4

\({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field obtained after inversion of the “Gaussian hump” \({\varvec{\Updelta}} {{\mathbf{z}}}\) profile in polar coordinates, using n χ = 512 points, 40 circles, 4 perspectives and a no sector, or b 17 sectors

Adding 17 sectors (Fig. 4b) reduces even further the differences. However, when the number of sectors is further increased, the Gaussian shape is maintained but local discrepancies occur and the accuracy of the results is lost (σE  = 4.8% for 33 sectors for example). In this case, the resolution and thus the number of values for \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) to be calculated increases, the system of equations to be solved is close to becoming under-constrained and the inverse method has more difficulty converging towards the solution.

For good inversion at low resolution, the number of sectors should not be proportional to the number of perspectives (e.g. using 16 sectors with 4 perspectives). In that case, the symmetry in the discretization leads to a matrix G having redundant rows due to repeated structure with each perspective and so provides no additional information.

Since the results obtained are more accurate in polar coordinates than using Cartesian coordinates, and since adding multiple perspectives is more easily achieved, we will use the polar discretization thereafter.

3.2 Sine Gaussian disturbance

Here we examine a Gaussian disturbance multiplied in amplitude by a sinusoid. This is shown in Fig. 5a, with a resolution of n x × n y  = 512 × 512. Solving the forward problem gives the corresponding displacement \({\varvec{\Updelta}} {{\mathbf{z}}}\) that one would observe using synthetic schlieren (Fig. 5b). The distortions of the horizontal lines and thus the \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles are not the same when the object–image is observed from different perspectives since the symmetry is broken in this problem. The \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles observed with a camera positioned along the positive y-axis (black line, \({\varvec{\Updelta}} {{\mathbf{z}}}(x)\)) and along the positive x-axis (dashed line, \({\varvec{\Updelta}} {{\mathbf{z}}}(L-y)\)) are given in Fig. 5b. These profiles are of opposite sign since the wavenumbers of the sine function in the x and y direction are equal in our example (k x  = k y ). Thus the dashed line in Fig. 5b is also the \({\varvec{\Updelta}} {{\mathbf{z}}}\) profile that one would observe from the negative y-direction, and the black line the displacement observed from the negative x-direction. Perspectives made at other angles generate different \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles. Using these profiles as input for the inverse tomography program in polar coordinates give the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) fields presented in Fig. 6 for n r  = 40 circles and n χ = 512.

Fig. 5
figure 5

a Initial \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field is a Gaussian hump modulated by a sine function (n χ = 512). b Corresponding \({\varvec{\Updelta}} {{\mathbf{z}}}\) obtained by the forward solution for a perspective along the positive y-direction (line) and along the positive x-direction (dashed line)

Fig. 6
figure 6

\({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) fields obtained by inversion in polar coordinates of \({\varvec{\Updelta}} {{\mathbf{z}}}\) corresponding to the initial sine modulated Gaussian disturbance shown in Fig. 5a, using 40 circles and a 4 perspectives, 17 sectors, b 4 perspectives, 33 sectors, c 4 perspectives, 45 sectors, or d 6 perspectives, 33 sectors

We are able to retrieve the initial perturbation field with very good accuracy. Figure 6a, b show that increasing the number of sectors improve the precision of the results. For 17 sectors, the standard error σE between the resulting \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field and Fig. 5a is less than 4.4%. This error reduces to 3.0% when 33 sectors are used.

However, one limitation of the inversion procedure arises when the number of sectors increases further (45 sectors in Fig. 6c). Spurious effects appear and the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field looses accuracy. In the example of Fig. 6c, σE increases to 6.6%. When the resolution of the reconstructed disturbance is too high for fixed input \({\varvec{\Updelta}} {{\mathbf{z}}},\) the method used for the inverse tomography fails to converge to the correct solution. In general, the accuracy goes from better to worse when n r n θ  > 0.87 n p n χ.

Nevertheless, results can be further improved by having multiple perspectives with no significant calculation cost. When 6 perspectives and 33 sectors are used (Fig. 6d), the difference with the initial \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field is negligible (σE  < 2.5%). Adding more perspectives also enhances the resolution of the reconstructed field: when n p n χ increases, a larger number of sectors can be considered before spurious effects occur.

3.3 Plane wave packet

A third test case was examined to validate the use of polar discretization in an experimental situation with no underlying azimuthal symmetry. The disturbance generated by a plane wave packet is shown in Fig. 7a with a resolution of n x × n y  = 512 × 512 in Cartesian coordinates and the corresponding displacement, \({\varvec{\Updelta}} {{\mathbf{z}}},\) observed from a perspective viewed along the y (line) and x (dashed line) directions are plotted on Fig. 7d.

Fig. 7
figure 7

Initial plane wave with an elliptical Gaussian envelope for the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) perturbation field a in Cartesian coordinates with a resolution of n x × n y  = 512 × 512, b discretized in polar coordinates with 17 sectors and 40 circles. Corresponding \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles obtained by the forward solution for a perspective along the positive y-direction (line) and along the positive x-direction (dashed-line) for d the Cartesian discretization (as in a) and for e the polar discretization (as in b). c \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field obtained by inversion of \({\varvec{\Updelta}} {{\mathbf{z}}}\) in polar coordinates shown in e, using 4 perspectives, 17 sectors and 40 circles

This initial \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field is discretized in a polar coordinates system using 17 sectors and 40 circles (Fig. 7b). The standard error σe resulting from this coarse resolution is 10%. The corresponding \({\varvec{\Updelta}} {{\mathbf{z}}}\) profile derived by solving the forward problem shown in Fig. 7e is similar to that determined from the Cartesian coordinate system (Fig. 7d), with the differences again attributed to the coarse resolution used in the former case. Profiles of \({\varvec{\Updelta}} {{\mathbf{z}}}\) determined from four perspectives taken from the polar representation of \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) were used as input for the inverse tomography program in polar coordinates. The reconstructed \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field, shown in Fig. 7c, is well reproduced with a standard error σe < 1% determined by comparing Figs. 7b and c, though the comparison may not appear qualitatively as good due to the gray scale chosen to represent the fields.

This example demonstrates the effectiveness of reconstructing a non-axisymmetric field under coarse resolution. A better representation of the original analytic waveform would be possible if a higher resolution polar grid was used. But in general, this requires either a camera with a higher spatial resolution (larger n χ) or more perspectives (as explained in Sect. 3.2). The latter aproach may be time consuming depending on the experimental setup, but involves little additional computational time in processing data (see Sect. 2.3) and would fully depict the complexity of a three-dimensional perturbation field. But even in the scenario of a very coarse resolution illustrated in Fig. 7, we still capture the main quantitative aspects of the perturbation field.

3.4 Noisy data

In this last case, we test the sensitivity of the method when noisy data are entered. We introduce 10% of random noise in the \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles corresponding to the previous sine Gaussian disturbance (Fig. 5). The result of the inverse tomography program used in polar coordinates with 4 perspectives, n r  = 40 circles and n θ = 17 sectors is shown on Fig. 8a. The standard error between this \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field and the original is σE = 25%, which is large compared to the σE = 4.4% obtained with the equivalent reconstructed \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field using idealized \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles as presented on Fig. 6a with the same discretization (see Sect. 3.2).

Fig. 8
figure 8

\({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field obtained after inversion of the “sine Gaussian hump” \({\varvec{\Updelta}} {{\mathbf{z}}}\) profile in polar coordinates in which 10% of white noise has been added, using n χ = 512 points, 17 sectors, 40 circles, 4 perspectives, a without smoothing, b with a second derivative smoothing

However, the program offers the possibility to add smoothing to the resulting \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field. When a basic second derivative filter with a trade off parameter of 1% is used (Fig. 8b) the standard error decreases to σE = 8.3%, which is a reasonably good agreement with the expected result. The accuracy of the reconstructed field can be further improved by increasing the number of perspectives. Though at the time of writing, real experimental results are not available, this tomography method is reliable, even with noisy data input.

4 Discussion and conclusions

We have adapted the synthetic schlieren technique to measure the amplitude of waves arising from fully three-dimensional perturbations. This requires multiple perspectives of the wavefield and implementation of an inverse tomography method. A Bi-Conjugate Gradient method is used as a computationally efficient method to invert the vertical displacement profiles of a simple object–image into the corresponding squared buoyancy \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) perturbation field.

Applied to three idealized circumstances, accurate results were obtained using polar rather than Cartesian coordinates. Generally, the resolution n r n θ desired for the \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) field should not be larger than the number of data points n p n χ in the system \({\varvec{\Updelta}} {{\mathbf{z}}} = G {\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}\) so that it is not under-constrained. The most accurate results from the inverse tomography are obtained when n r n θ  < 0.87 n p n χ. Increasing the number of perspectives improves the precision of the reconstructed wavefield. Spurious effects also arise when the number of sectors is proportional to the number of perspectives. Some regularization parameter for smoothing of the reconstructed field is required to obtain a reliable solution in the presence of noise in the input data, and the tomography method remains equally efficient.

In practice, the \({\varvec{\Updelta}} {{\mathbf{z}}}\) profiles are measured at a number of vertical heights z s , given by the vertical resolution of the camera. Repeating the inverse tomography process iteratively for these heights allows a complete three-dimensional reconstruction of the initial perturbation field \({\varvec{\Updelta}} {{\mathbf{N}}}^{{\mathbf{2}}}.\)

Two types of experiments are now feasible, either using simultaneous perspectives at right angles with two cameras recording the experiment, or having a single camera recording the experiment repeated several times at different angles with respect to the camera to simulate the different perspectives. These involve simple axis rotations in the polar coordinate system, but involve performing the same laboratory experiment several times.

This advance in the synthetic schlieren technique will provide a powerful new tool for analyzing disturbances in stratified fluids and, in particular, for examining the amplitude of internal waves generated by complex topography, towed objects, plumes and turbulent wakes. Laboratory experiments will help to determine more accurately the role of internal waves in energy transport.

This study is limited to \({\varvec{\Updelta}} {{\mathbf{z}}}\) determined from images of horizontal lines. Using a dot pattern to obtain information on both horizontal and vertical fluctuations is more difficult to compute and will be the next enhancement of the synthetic schlieren method.