Fringe Pattern (FP) denoising–normalisation consists of removing background illumination variations, normalising contrast and filtering noise, which means transforming an FP corresponding to the mathematical model
into the normalised FP modelled by
Here, is the pixel position, is the background illumination, is the fringe contrast, is the phase map and is an additive or correlated noise. Such a normalisation can be represented by the transformation
present useful reviews of challenges related to FP analysis and a good list of proposed solutions. There is a consensus that FP analysis can be seen as a pipeline that involves the following steps: denoising, normalisation, phase extraction and phase unwrapping, even if some of these steps are merged by some methods. For example, the denoising, the normalisation and the phase extraction can be accomplished using the two-dimensional Windowed Fourier Transform (WFT), the wavelet transform (WT), [4, 5] or a Gabor Filter Bank (GFB) based method . As is noted in Refs. [4, 5]
, WFT and FT have limitations in dealing with FPs when phase discontinuities are present or the field of view is not the full image. As we will show in this work, the same limitation applies for the GFB approach. These techniques estimate a transformation of the form (3), for a central pixel in an image neighbourhood (image patch or weighted image window).
WFT, WT and GFB methods rely upon the assumption that the neighbourhood of a pixel of interest (image patch) has an almost constant frequency and phase, i.e.locally, the phase map is close to being a plane. The limitation of the mentioned methods occur at patches were the main assumption is violated; i.e., at phase discontinuities. Figure 1 shows a denoised-filtered FP computed with a GFB based method and with our proposal. Further information on alternative strategies for FP normalisation can be found in Ref. . However, methods based on local spectral analysis (e.g., WFT, WT and GFB) have shown to be very robust general methods for dealing with high noise levels [4, 5, 6, 7, 8]. In this work, we propose to implement such a transformation (3) with a Deep Neural Network (DNN).
Neural Networks (NNs) are known for being universal approximators . Early attempts to use a NN for FP analysis are of limited application since they are based on simple multilayer schemes. In particular, in Ref.  a multilayer NN is trained for computing the phase and its gradient at the central pixel of an image patch. Instead, our proposal computes the restoration for the entire image patch. In addition, our work is based on a deep auto–encoder NN that allows us to deal with noise and large illumination changes.
2 Brief review of the auto–encoder
The auto–encoders were originally devised to compress (codify) and decompress (decodify) data vectors. Fig. 2 shows a scheme of a basic auto–encoder, where one can observe its two main components:
The decoder takes the compressed data and computes a reconstruction of the original data . This is expressed by
where is a weights matrix and is a bias and is the activation function.
In this case, given a training dataset , the auto–encoder (coder and decoder) is trained by solving an optimisation problem of the form:
where represents a metric or divergence measure. The auto–encoder illustrated in Fig. 2, has a hidden layer associated with the coded variable and produces an output of the same dimension as the original data .
Image analysis models based on DNNs have demonstrated their ability to represent diverse transformations to map an input image onto an output image
. Auto–encoders are one kind of NNs that can map a tensor into another tensor (a tensor is a multidimensional array). In this work, we deal with monochromatic images that are represented as tensors of order two. RGB-codified images can be represented as tensors of order three.
In this work we propose to use a deep auto–encoder for performing image restoration.
3.1 U–net model for image segmentation
The auto–encoders motivated the development of the fully convolutional U–net model for image classification (segmentation) 
. The loss function for the U–net is of the form
where is a segmentation of , and represent the encoder and decoder stages, respectively; finally, is the vector of the auto–encoder parameters. For each input image, fully convolutional models produces an image of labels of the same size as the input , unlike standard convolutional networks whose output is a single value. One can note important differences between the classical auto–encoder and the U–net:
U–net is a Deep model; i.e., the number of layers in U–net is substantially larger than the number of layers in the classic auto–encoder.
U–net implements convolutional 2D filters so that, the weights of each layer are codified into an array of matrices (a 3D tensor) and produces a vector of processed images (a 3D tensor). On the other hand, classical auto–encoders vectorise the input image and therefore the pixel’s spatial relationships are lost. Figure 3 illustrates the U–net architecture: connections, number of layers and dimension of the input and output of each layer. The graphical representation used in Refs. [12, 14] allows one to visualise the NN–convolutions (filters) and the dimensional changes of the processed data. Herein, we use such a representation for illustrating our deep architecture.
The input of a decoder layer in U–net is the concatenation of the output tensor of the previous layer and output tensor of the symmetric encoder layer (so–called “skip links”); see Fig. 3. The purpose of skip links can be understood in the context of residual–nets : they allow to construct the solution using both, coarse and processed data.
The residual–net combines and by means of an addition, while U–net learns a more general form to combine the data. For a better understanding, the residual–net version of the auto–encoder in equation (5) is . In contrast, the U–net version is written as , where is the function learned by the model to combine the data. In any case, skip–links tackle the well–known problem of “vanishing–gradient” on deep networks and improve the training process .
As in standard convolutional DNNs, U–net follows the thumb–rule for processing inputs tensors: the encoding layers increase the number of channels (filters) of the input tensor, and reduce its spatial dimension, while the decoding layers shrink the number of channels and extend the spatial dimensions of the processed tensors. Therefore, one improves the computational efficiency by applying a reduced number of filters on tensors with larger spatial dimension and a larger number of filters on spatial small–sized tensors. In the training stage, the filters are optimised for detecting the useful features that allow the U–net to correctly classify the pixels.
3.2 V–net model: An improved U–net for image restoration
Since classification (image segmentation) and regression (image restoration) may require different features, in this work we propose an improvement of the U–net designed to achieve image restoration instead of image segmentation. Despite the computational cost that it implies, our network applies a larger number of filters on the input tensor (original image) in order to capture local details and achieve a precise restoration. Also, as opposed to the standard U–net, we reduce the number of filters as the layers are deeper on the encoder. Thus, the deepest layer in the encoder stage (bottom layer on Figure 3) produces a tensor with the smallest dimension (spatial size and number of channels). These characteristics distinguish our architecture and provide our DNN with an advantage for the regression task. We call our improved model “V–net” because it uses tensors with few channels on deeper layers.
The V–net encoder is composed by a sequence of encoding blocks (Down–Blocks), followed by the decoder, which consist of a sequence of decoding blocks (Up–Blocks), and a Tail (composed by two last convolutional layers), see Fig. 3. The th Down–Block, , starts by applying two convolutional layers with channels of size . This number determines the amount of output channels at each stage. A complete description of each encoding and decoding block architectures is illustrated in Fig. 4.
In our implementation, we set (number of spatial-size levels); and the number of channels , , is determined by the number of channels in the previous Down–Block following the rule . The same occurs with the number of channels for each Up–Block. In our model, the respective number of channels is set as , for . Although more general configurations for the number of channels can be implemented, we have chosen as global parameter the number of channels in the last Down–Block (bottom level), and the other ’s are determined by as is indicated in Fig. 3.
In the following, we denote by the output tensor of the th Down–Block, , as well as the second input of the ()th Up–Block, . Each tensor has dimensions (number of channels, number of rows, number of columns), . In particular, is the input tensor for the model, and equals the dimension of each input patch. Similarly, denotes the first input tensor of the th Up–Block, , as well as the output for the ()th Up–Block, . Each tensor has the same dimensions as has . In particular, , and corresponds to the output tensor of the last Up–Block. We will denote by the final output of the model.
Now, we shall describe the mathematics of all components in our proposed model. We start with equations defining the operations in each Down–Block:
Apply a 2D convolution with filters of :
where is the th kernel (of size ), , of the first convolution in the th Down–Block; note that the 2D convolution is implemented by sliding a kernel with the same number of channels than the convolved data among the rows and columns of the input tensor. The output of this convolution is the tensor of dimension . Since we use padding, the number of rows and columns for the input tensor and the convolved one are equal: we extend borders of the input tensor with zeros—one rows of zeros above and bellow, and one column of zeros to the left and another to the right.
Apply the tensorial activation function :
where is a tensorial activation function applied to each entry of the tensor . Our implementation uses Rectified Linear function (ReLU) as in the standard implementation of the U–net:
Apply a second 2D convolution with filters of :
where is the th kernel (of size ), , of the second convolution.
Apply the activation function :
Note that we use the same activation after the convolutions 1 and 2 on the Down–Block.
Apply a dropout of in the training stage. Generate a binary random mask with of zeros (the reminder entries are set to one) with a size equal to and compute
where is the element–wise product. The zero entries of turn off the corresponding outputs in the responses and such a dropout mask is kept constant for each training data batch. This mask acts as a regulariser that avoids to be trapped by a bad
local minima in the early training epochs.
Apply a MaxPooling of
with stride equalto the tensor . Mathematically this subsamplig is written as
for and . Then, the output of the th Down–Block is the tensor of dimension equal to (, with and .
The above steps (1 to 6) can be represented by the operator , where the subindex reflects the dependency on the parameter ; i.e., the number of filters of the convolutional layers. Then, the calculation of given is expressed by
Since the entire V–net’s encoder consists of Down–Blocks, then the operator that define such encoder is given by the composition
On the other hand, the V–net’s decoder, represented with the operator , consists of the composition of Up–Blocks:
where for , represents the th Up–Block operator given by:
where . The calculation of uses the output of the previous Up–Block, , and the output of the mirror Down–Block represented with a skip–link, see Fig. 3. The details of the Up–Block calculations are as follows:
Upsample the previous output,
with a nearest neighbour interpolation:
for and . Then, the output has dimensions (. Note that these are twice the dimensions of .
Apply a 2D convolution with kernel size of and filters:
where is the th kernel (of size ), , of the first convolution and is the ReLU activation function. The purpose of this convolution it to smooth the nearest neighbour interpolation of the previous step.
Concatenate the previous output, , with the output of the mirror Down–Block in the decoder, :
This result in the tensor of dimensions .
Apply a 2D convolution with kernel size of and filters:
where is the th kernel (of size ) of the second convolution and is the ReLU activation function.
Apply a third 2D convolution of and filters:
where is the th kernel (of size ) of the convolution.
The architecture of the Down–Block and Up–Block are summarised in Panels (a) and (b) of Fig. 4, respectively.
Note. Since the spatial down-sampling in equation (6) is performed at each Down–Block, we require that the spatial dimensions of each input tensor , , must be even. Moreover, since the encoder consist of Down–Blocks, hence the input patches have dimensions multiple of . This is a dispensable requirement, but it helps to simplify the internal arithmetic of the up-sampling step.
A final Tail stage, consisting of the application of two final convolutional layers is then performed. Their purpose is to smoothing and simplify the output , in order to produce a final output with less channels (just 1 channel to be precise). This 1–channel output is the estimated FP corresponding to the corrupted input . The steps are
where is the th kernel (of size ), and is the ReLU activation function; and
where is the unique kernel (of size ), and is the ReLU activation function.
Finally, the training of the V–net can be written as
where is the input tensor (stack of all input patches ), is the desired output (stack of all normalised FP patches ), and is the output tensor (stack of all patch estimations ) of the V–net. The operator represents the Tail stages given by (24) and (25). Here, is the set of all model parameters (filter weights and bias). We use the norm as loss function, because it induces lower reconstruction errors.
4 Implementation details
4.1 Simulated data
To quantitatively evaluate the performance of the proposed V–net based normalisation, we randomly generated 46 pairs of FPs (with size equal to pixels): the corrupted FPs were generated according to the model in (1) and the normalised FPs (ground–truth) according to the model in (2
). The normally distributed random noise was generated with the Python Numpy package. On the other hand, the random smooth functions (illumination components and phase) were constructed using random numbers with uniform distribution generated with our implementation of a Linear Congruential Generator with POSIX parameters
in order to guarantee the FPs generation replicability. In the following, we explain the smooth random surface generation procedure. We generated the pseudo–random phase with a radial basis function with Gaussian kernel:
where we define
the vector of the random kernels centers that are uniformly distributed into the FPs lattice (i.e., ), and the vector of random uniformly–distributed Gaussian heights, with . Similarly, we generated the illumination term with and . In our data, we selected and uniformly distributed over the image domain (using our implementation of the POSIX algorithm) and we set , and . Figure 5 depicts an example of the synthetic data used for training: Panels (a) and (b) show the ideal and corrupted FPs, respectively. Panels (c) and (d) show a selected region where the noise level can be better appreciated. As we have said, we trained our V–net model with relatively small-sized patches with respect to the original FP size. An example of a patch-pair used for training is depicted in panels (e) and (f).
In the Experiments section, we evaluate our method performance for different noise types, as Gaussian, salt–pepper, speckle, and combinations of them. In the case of FPs with speckle noise, we used the model
instead of (1); where and are spatially independent and identically distributed noise: has uniform distribution (with values into ) and).
In the case of salt–pepper noise, we randomly select the of the pixels and saturate them to values and in equal proportion.
4.2 Training data set
The training data set consists of random patches of pixels sampled from 30 generated FPs (the set of training images); of those patches were used for validation. In addition, the remainder FPs were used as the test data set. We stacked the corrupted patches in the tensor and the corresponding normalised patches form the desired output .
The patch–size is a user-defined parameter. We chose the size as by considering a maximum frequency close to 1.5 fringes per patch. Moreover, the V–net also requires a patch–size divisible by ; where is the number of levels.
4.3 Prediction of a full FP from reconstructed patches
Recall that our V–net is designed to reconstruct small FP patches of pixels. To reconstruct an entire FP, we generated a set of patches using a sliding window scheme, with a stride (pixels shift) of four pixels in both horizontal and vertical directions. Those patches were fed to the V–net to compute their normalisations; see Fig. 6. Each pixel in the entire reconstructed FP was computed as the average of the values in the same pixel position obtained from overlapped normalised patches. We preferred the mean because it is more efficiently computed than the median and we did not appreciate a significative difference if the median is used.
For a 2-dimensional FP image, let be the number of patches computed over the dimensions (rows and columns). Then, is given by
is the image size, is the patch size, is the step and
In the case of our experiments, we set , , for . Then, the number of patches required to reconstruct a single FP is . This quantity is substantially larger than the number of patches in the training set, patches. The expected number of patches per training FP was 833 (. Then we ran Montecarlo simulations to estimate the covered area by selected patches: in average, it was of each entire FP. If we increase the number of training patches to , the averaged covered area would be .
In order to evaluate the performance of the U–net and the proposed improvement V–net for the FP normalisation task, we conducted three experiments. In the first one, we evaluated the U–net and V–net with respect the noise level (assuming Gaussian noise). In the second experiment, we evaluated such models under different noise distributions: Gaussian, salt–pepper, speckle, combination of noise and the effect of incomplete field of view (named Pupil in this work). Finally, the third experiment compares our proposals with methods of the state of the art.
For all the evaluated networks, we equally set parameters for the training process. We used the ADAM algorithm  as optimiser with a learning rate , a decay rate , a batch size equal to 32 and we select the best trained model over 150 epochs.
5.1 Performance comparison of U–net and V–net for different noise levels
In this experiment, we simulated noise levels as in the acquisition of typical interferometric FPs. We investigated the U–net and V–net models performance for seven levels of Gaussian noise; i.e., seven standard deviations for the noise in (1). Such values are indicated in first column in Table 1. For each trained model, we used a randomly generated training set and randomly generated initial starting point for the the models’ parameters (weights). Table 1 reports the averaged Mean–Absolute–Error (MAE) of the reconstructions over ten different trained models.
|Standard deviation||U–net MAE||V–net MAE|
|( with variable)||()||()|
Table 1 shows that, in general, V–net performs better than U–net for denoising FPs corrupted with Gaussian noise. According to Fig. 7, the V–net model has a superior performance for higher standard deviation values ( with a signal’s dynamic range into the interval ). Both models have a similar performance for close to . On the other hand, U–net produces better reconstructions for low noise levels (). Fig. 8 shows examples of FPs normalised with our method (noise with
). In general, V–net presents lower error variance, that is understood as a better precision of the results.
5.2 Performance comparison of U–net and V–net for different noise types
The following experiment reports the U–net and V–net model’s performance for the normalisation of FPs under different noise distributions; in all cases, the illumination components and the phase were generated according to the method presented in subsection 4.1. The pupil was defined with a centered circular region of diameter equal to of the image size.
Table 2 and Fig. 9 report results for corrupted FPs under different scenarios: Salt–pepper noise, Speckle noise, Gaussian–and–speckle noise and an incomplete field of view (pupil). Note that V–net produces better results for Speckle noise, Gaussian+Speckle noise and pupil. In contrast, U–net has a better performance when the task requires processing data with few intensity levels: as in the reconstruction of FP corrupted with salt–pepper noise (to remove a few data and to interpolate such pixels) or if only low–frequency illumination changes are present and the noise is not a problem.
|Noise||U–net MAE||V–net MAE|
|( with variable)||()||()|
5.3 Comparison versus state of the art methods
In this subsection we evaluate the performance of the proposed models versus other methods of state of the art based on deep neural networks. In addition we also introduce, and compare, with a second variant method of V–net. This variant is built upon the residual network paradigm which assumes that the input can be decomposed as the sum of two components: the FP and the corrupting elements. We call this variant Res V–Net and it is implemented by changing the concatenation (step 3) in each Up–Block of the V–net architecture. We replaced the merging procedure given in (21) by an element–wise subtraction (denoted by ):
In the Res V–net one expects that the terms capture the corrupted elements in the input signal.
We compared our proposed networks with recently reported Deep Neural Networks: optical Fringe Patterns Denoising (FPD) convolutional neural network proposed in Ref., Deep Convolutional Neural Network (DCNN)  and the application reported in Ref.  of the general purpose image denoising deep neural network (FFD) .
In Refs. [21, 22] are presented favourable comparisons of their networks with respect to a filtering based on the Windowed Fourier Transform (WFT) [4, 25]. The authors argue they have chosen WFT since it is one of the classical procedures with better performance for fringe denoising. We have compared our proposals with a particular case of WFT: the Gabor Filter Bank—in  is reported the relationship between GFB and WFT. The results of our comparison are consistent with the reported in Ref. : the GFB method fails to reconstruct the FP at regions with phase discontinuities and low–frequency. Figure 10 depicts evidence that supports this claim.
The computational time for the GFB was around 348 secs (using a Python convolutional CPU implementation on an i5 Intel 3.7GHz and executing the process in one core) for a single FP of
In the following experiment we evaluated the performance of our models (U–net, V–net and Res V–net) and the recent methods reported in Refs. [24, 21, 23]. We evaluated all the methods in the task of normalising FPs corrupted with Gaussian noise, speckle noise, illumination components variations and incomplete field of view. The training was conducted using patches for our models (U–net, V–net and Res V–net) and patches for the compared methods. The training set (patches) were randomly sampled over 30 of the total of 46 FPs. The remaining 16 FPs constitute the test set. For all the methods, we used the same training parameters, as described at the beginning of this section. Figure 11 shows examples of reconstructed patches. Figure 12 shows examples of reconstructed full FPs. The procedure for reconstructing complete FPs was described in subsection 4.3. From a visual inspection of Figures 11 and 12, one can note that the proposed networks produce the better results.
Tables 3–5 summarise the experiments results. Table 3 shows the averaged Mean Square Error (MSE), averaged Mean Absolute Error (MAE) and averaged Peak Signal to Noise Ratio (PSNR) over the full reconstructions of the 30 FPs used to generate the training set. Since we used patches for training, the full FPs were never seen for the networks. Table 4 shows the averaged errors for the reconstructed 16 FPs used to generate the test set.
Finally, Table 5 shows the averaged variance of the computed MSE and MAE of the errors in Table 4. The third column shows the square of the Coefficient of Variation (), where the relative standard deviation is defined as . The is a measure of the precision and repeatability of the results.
Figure 13 shows a real interferometric FP and the results of the normalisation obtained with the evaluated methods. We use the same models that were trained with simulated data in this experiment. The performance of all the evaluated methods is consistent with the results obtained when processing synthetic FPs.
6 Discussion and conclusion
6.1 Method limitations
One can note that all the deep neural networks fails to reconstruct the high–frequencies in Figure 13. This limitation is explained by the lack of enough patches with similar high–frequencies in the training set. This is equivalent processing with a GFB that lacks of filters tuned to such high–frequencies. In the case of neural networks, this problem is solved by including examples with such frequencies in the training set.
U–net, V–net and Res V–net models base the FPs reconstruction by processing image patches with local information. Despite this is an advantage in terms of computational efficiency, there are some limitations for solving FP analysis problems associated with global information. To illustrate this point, we trained a V–net to estimate the quadrature normalised FP. Mathematically, we trained a V–net to estimate an operator , that given observations modelled by (1), produces normalised FPs according to
Figure 14 shows a reconstructed quadrature FP where the “global sign” problem is evident. The problem actually occurs at patch level. There are patches for which the network can not infer the correct sign of the sine function, see reconstructed patch in last row in Figure 15. However, this sign change does not appear in arbitrary orientations, it seems that there exists a principal axis in the orientation domain where the sign changes systematically appear.
We also observed that U–net, V–net and Res V–net models have limitations for filtering–out noise at regions with very low–frequencies and low–contrast; those are regions where a visual inspection does not suggest a clear local dominant frequency. Moreover, we observed that Res V–net cannot completely remove the noise of figures in experiment of subsection 5.3. An explanation for this behaviour it that the Res V–net model assumes additive noise while our experimental data contains correlated noise (speckle).
The proposed normalisation–denoising method for FPs is based on the deep learning paradigm. Under this paradigm, one trains a neural network (universal approximator) that estimates an appropriated transformation between observations (corrupted inputs) and outputs. In particular, our solution builds upon a deep auto–encoder that produces results with very small errors. Our results show that the proposed U–net and V–net schemes can be applied to real FP images, in which the image’s corruption irregularities correspond to high noise levels, illumination component variations or an incomplete field of view; see Figures 10 and 12. Our models can process real FPs, even if we train the networks with simulated data.
We observed that DNNs can compute reconstructions with lower error than GFBs near the boundary of the field of view; see Figure 10. We found that V–net produces higher quality reconstruction for FPs for higher levels of noise and pupils than U–net and the compared methods. In our opinion, the reason is that the V–net filter distribution across the layers is designed to retain more details, as opposed to U–net which is designed to segment images.
We believe that the evaluated methods are a new research branch for developing more sophisticated FPs analysis methods, that based on deep neural networks, can compute solutions in a front–to–end strategy. It could be interesting to design and implement specific deep networks architectures for solving challenging problems in FP analysis; e.g., the phase recovery from a single interferogram with closed fringes and the analytic (quadrature) FP computation.
The authors thank Adonai González for providing the data for Figure 13. This research was supported in part by Conacyt, Mexico (A1-S-43858 research grant and A.R.F. PhD. studies scholarship) and the NVIDIA Academic program.
-  S. S. Gorthi, P. Rastogi, Fringe projection techniques: Whither we are?, Optics and Lasers in Engineering 48 (2) (2010) 133–140, fringe Projection Techniques. doi.org/10.1016/j.optlaseng.2009.09.001.
-  R. Juarez-Salazar, F. Guerrero-Sanchez, C. Robledo-Sanchez, Theory and algorithms of an efficient fringe analysis technology for automatic measurement applications, Appl. Opt. 54 (17) (2015) 5364–5374. doi.org/10.1364/AO.54.005364.
-  Q. Kemao, Two-dimensional windowed Fourier transform for fringe pattern analysis: principles, applications and implementations, Optics and Lasers in Engineering 45 (2) (2007) 304–317. doi.org/10.1016/j.optlaseng.2005.10.012.
-  L. Huang, Q. Kemao, B. Pan, A. K. Asundi, Comparison of Fourier transform, windowed Fourier transform, and wavelet transform methods for phase extraction from a single fringe pattern in fringe projection profilometry, Optics and Lasers in Engineering 48 (2) (2010) 141–148, fringe Projection Techniques. doi.org/10.1016/j.optlaseng.2009.04.003.
-  Z. Zhang, Z. Jing, Z. Wang, D. Kuang, Comparison of Fourier transform, windowed Fourier transform, and wavelet transform methods for phase calculation at discontinuities in fringe projection profilometry, Optics and Lasers in Engineering 50 (8) (2012) 1152–1160. doi.org/10.1016/j.optlaseng.2012.03.004.
-  M. Rivera, O. Dalmau, A. Gonzalez, F. Hernandez-Lopez, Two-step fringe pattern analysis with a Gabor filter bank, Opt. Lasers Eng. 85 (2016) 29–37. doi.org/10.1016/j.optlaseng.2016.04.014.
-  O. Dalmau, M. Rivera, A. Gonzalez, Phase shift estimation in interferograms with unknown phase step, Opt. Commun. 372 (2016) 37–43. doi.org/10.1016/j.optcom.2016.03.063.
-  M. Rivera, Robust fringe pattern analysis method for transient phenomena, Optics and Lasers in Engineering 108 (2018) 19–27. doi.org/10.1016/j.optlaseng.2018.03.013.
-  V. Kůrková, Kolmogorov’s theorem and multilayer neural networks, Neural Networks 5 (3) (1992) 501–506. doi.org/10.1016/0893-6080(92)90012-8.
-  F. Cuevas, M. Servin, O. Stavroudis, R. Rodriguez-Vera, Multi-layer neural network applied to phase and depth recovery from fringe patterns, Optics Communications 181 (4) (2000) 239–259. doi.org/10.1016/S0030-4018(00)00765-3.
-  G. E. Hinton, R. R. Salakhutdinov, Reducing the dimensionality of data with neural networks, Science 313 (5786) (2006) 504–507. doi.org/10.1126/science.1127647.
-  O. Ronneberger, P. Fischer, T. Brox, U-net: Convolutional networks for biomedical image segmentation, in: N. Navab, J. Hornegger, W. M. Wells, A. F. Frangi (Eds.), Medical Image Computing and Computer-Assisted Intervention – MICCAI 2015, Springer International Publishing, Cham, 2015, pp. 234–241. doi.org/10.1007/978-3-319-24574-4_28.
-  J. Long, E. Shelhamer, T. Darrell, Fully convolutional networks for semantic segmentation doi.org/10.1109/CVPR.2015.7298965.
-  K. H. Jin, M. T. McCann, E. Froustey, M. Unser, Deep convolutional neural network for inverse problems in imaging, IEEE Transactions on Image Processing 26 (9) (2017) 4509–4522. doi.org/10.1109/TIP.2017.2713099.
-  K. He, X. Zhang, S. Ren, J. Sun, Deep residual learning for image recognition, in: 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016, pp. 770–778. doi.org/10.1109/CVPR.2016.90.
-  X. Mao, C. Shen, Y.-B. Yang, Image restoration using very deep convolutional encoder-decoder networks with symmetric skip connections, in: D. D. Lee, M. Sugiyama, U. V. Luxburg, I. Guyon, R. Garnett (Eds.), Advances in Neural Information Processing Systems 29, Curran Associates, Inc., 2016, pp. 2802–2810.
N. Srivastava, G. Hinton, A. Krizhevsky, I. Sutskever, R. Salakhutdinov,
Dropout: A simple way to
prevent neural networks from overfitting
, Journal of Machine Learning Research 15 (2014) 1929–1958.
-  A. Rotenberg, A new pseudo-random number generator, J. ACM 7 (1) (1960) 75–77. doi.acm.org/10.1145/321008.321019.
-  D. Broomhead, D. Lowe, Multivariable functional interpolation and adaptive networks, Complex Systems 2 (1988) 321–355.
-  D. P. Kingma, J. Ba, Adam: A method for stochastic optimization, in 3rd International Conference for Learning Representations, San Diego, 2015 (2014). arxiv.org/abs/1412.6980.
-  B. Lin, S. Fu, C. Zhang, F. Wang, Y. Li, Optical fringe patterns filtering based on multi-stage convolution neural network, Preprint. arxiv.org/abs/1901.00361.
-  K. Yan, Y. Yu, C. Huang, L. Sui, K. Qian, A. Asundi, Fringe pattern denoising based on deep learning, Optics Communications 437 (2019) 148–152. doi.org/10.1016/j.optcom.2018.12.058.
-  F. Hao, C. Tang, M. Xu, Z. Lei, Batch denoising of ESPI fringe patterns based on convolutional neural network, Appl. Opt. 58 (13) (2019) 3338–3346. doi.org/10.1364/AO.58.003338.
-  K. Zhang, W. Zuo, L. Zhang, FFDNet: Toward a fast and flexible solution for CNN-based image denoising, IEEE Transactions on Image Processing 27 (2018) 4608–4622. doi.org/10.1109/TIP.2018.2839891.
-  Q. Kemao, Windowed Fourier transform for fringe pattern analysis, Appl. Opt. 43 (13) (2004) 2695–2702. doi.org/10.1364/AO.43.002695.