Wiki source code of EIT with the D-bar method: smooth and radial case
Last modified by smsiltan@helsinki_fi on 2024/02/13 07:34
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | (% class="p1" %) | ||
2 | == EIT with the D-bar method: smooth and radial case == | ||
3 | |||
4 | (% class="p1" %) | ||
5 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %)This page contains the computational Matlab files related to the book | ||
6 | (%%)[[//Linear and Nonlinear Inverse Problems with Practical Applications// >>url:http://www.ec-securehost.com/SIAM/CS10.html||style="font-size: 10.0pt;line-height: 13.0pt;" shape="rect"]](% style="font-size: 10.0pt;line-height: 13.0pt;" %) | ||
7 | written by **Jennifer Mueller** and **Samuli Siltanen** and published by SIAM in 2012. | ||
8 | |||
9 | You can order the book at the [[SIAM webshop>>url:http://www.ec-securehost.com/SIAM/CS10.html||shape="rect"]]. | ||
10 | |||
11 | [[Go to master page>>url:http://wiki.helsinki.fi/display/mathstatHenkilokunta/Inverse+Problems+Book+Page||shape="rect"]] | ||
12 | |||
13 | This page is related to a smooth and rotationally symmetric conductivity. | ||
14 | |||
15 | ---- | ||
16 | |||
17 | == Introduction == | ||
18 | |||
19 | The D-bar method is a reconstruction method for the nonlinear inverse conductivity problem arising from | ||
20 | Electrical Impedance Tomography. This page contains Matlab routines implementing the D-bar method | ||
21 | for a smooth and rotationally symmetric conductivity. | ||
22 | |||
23 | Note carefully that although we use the rotational symmetry of the conductivity to speed up some computations, | ||
24 | the reconstruction process including the solution of the D-bar equation is two-dimensional, not one-dimensional. | ||
25 | |||
26 | Please download the Matlab routines below to your working directory and run them in the order they appear. | ||
27 | |||
28 | ---- | ||
29 | |||
30 | == Definition of the example == | ||
31 | |||
32 | The first example concerns a rotationally symmetric and smooth conductivity that equals one near the unit circle. | ||
33 | Outside the unit disc the conductivity has value 1. | ||
34 | |||
35 | The following file defines a rotationally symmetric and smooth conductivity in the unit disc: [[attach:sigma.m]]. | ||
36 | |||
37 | Furthermore, this file implements the Schrödinger potential related to the conductivity: [[attach:poten.m]]. | ||
38 | |||
39 | The Laplace operator appearing in the definition of the potential is implemented by finite differences in poten.m. | ||
40 | The following routines plot the conductivity and the potential, respectively: [[attach:sigma_plot.m]], [[attach:poten_plot.m]]. | ||
41 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %)Please run the plot commands before continuing to make sure that everything is working properly. | ||
42 | You should see something like this: | ||
43 | |||
44 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %)[[image:attach:sigma.png]] | ||
45 | |||
46 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %)[[image:attach:poten.png]] | ||
47 | |||
48 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %) | ||
49 | |||
50 | ---- | ||
51 | |||
52 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %) | ||
53 | |||
54 | == Computation of the scattering transform via the Lippmann-Schwinger equation == | ||
55 | |||
56 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %)Next we define a set of points in the k-plane for evaluating the scattering transform t(k). | ||
57 | |||
58 | Because of the rotational symmetry of this example, it is enough to choose k-values along the positive real axis: | ||
59 | the scattering transform is known in this case to be rotationally symmetric and real-valued. Why? See [[proof>>attach:radial_t.pdf]]. | ||
60 | |||
61 | So please download and run this file: [[attach:kvec_comp.m]]. | ||
62 | |||
63 | The above file //kvec_comp.m// defines a set of k-points and saves them to a file called 'data/kvec.mat'. | ||
64 | (Note that //kvec_comp.m// creates a subdirectory called 'data'. If you already created it before, Matlab will show | ||
65 | a warning. However, you don't need to care about the warning.) | ||
66 | |||
67 | When running the example for the first time you might just use the file kvec_comp.m as it is. | ||
68 | Later you might want to modify it to choose a different set of k-values. | ||
69 | |||
70 | Now that we have decided on the k-points, it's time to evaluate the scattering transform. Here we do it first by | ||
71 | 'cheating', or by knowing the actual conductivity, because then there are no ill-posed steps involved. | ||
72 | Later we will compute the scattering transform also honestly from (simulated) EIT measurements. | ||
73 | This is the file that evaluates the scattering transform t(k) at the k-points: [[attach:tLS_comp.m]]. | ||
74 | |||
75 | The result will be saved to a file called 'data/tLS.mat'. Here 'LS' refers to the use of the Lippmann-Schwinger | ||
76 | equation in the computation of the complex geometric optics solutions. //tLS_comp.m// needs these files: | ||
77 | \\[[attach:green_faddeev.m]], [[attach:g1.m]], [[attach:GV_grids.m]], [[attach:GV_LS.m]], [[attach:GVLS_solve.m]], [[attach:GV_project.m]], [[attach:GV_prolong.m]] | ||
78 | |||
79 | In the names of the above files, 'GV' refers to Gennadi Vainikko, a numerical analyst who invented | ||
80 | the periodization-based algorithm used here for solving Lippmann-Schwinger type equations. | ||
81 | |||
82 | It is interesting to compare the linear and nonlinear Fourier transform. To that end, we compute the Fourier | ||
83 | transform of the potential q using the routines [[attach:Fq_comp.m]] and [[attach:gaussint.m]]. | ||
84 | |||
85 | After running the files tLS_comp.m and Fq_comp.m, you can plot the results using [[attach:tLS_plot.m]]. | ||
86 | You should see something like this: | ||
87 | |||
88 | [[image:attach:tLS_Fq.png]] | ||
89 | |||
90 | In the above image, the scattering transform is not quite approaching the value t(0)=0 as k tends to zero, | ||
91 | although we know from theoretical results that this should be the case. Why such an error at zero? | ||
92 | This is because we only used the value M=7 for constructing the grid, which was then of size 128x128. | ||
93 | The Faddeev fundamental solution has a log(|k|) singularity at the origin, and the Lippmann-Schwinger | ||
94 | type approach has always difficulties near the origin. You can either use as big M value as your patience | ||
95 | and computer memory allows, or you can use the boundary integral equation approach below to compute | ||
96 | t(k) for k near zero. | ||
97 | |||
98 | The rule of thumb is: The Lippmann-Schwinger approach for computing t(k) is good for k somewhat | ||
99 | away from the origin, and the boundary integral approach for computing t(k) is good (only) for k near zero. | ||
100 | |||
101 | ---- | ||
102 | |||
103 | == Simulation of EIT data == | ||
104 | |||
105 | Since the conductivity is rotationally symmetric, the Dirichlet-to-Neumann map can be approximated by | ||
106 | a diagonal matrix in the Fourier basis. Why? See [[proof>>attach:eigenvals.pdf]]. | ||
107 | |||
108 | The diagonal elements have been precomputed and are simply given as a data file [[attach:DN1eigs.mat]]. | ||
109 | |||
110 | The DN matrix is constructed by the routine [[attach:DN_comp.m]]. | ||
111 | |||
112 | For details of the computation of the matrix elements, see | ||
113 | **Mueller J L and Siltanen S 2003**, | ||
114 | //Direct reconstructions of conductivities from boundary measurements//, | ||
115 | SIAM Journal of Scientific Computation **24**(4), pp. 1232-1266. [[PDF (617 KB)>>url:http://www.siltanen-research.net/SIAM_EIT.pdf||shape="rect"]] | ||
116 | |||
117 | ---- | ||
118 | |||
119 | == Computation of the scattering transform via the boundary integral equation == | ||
120 | |||
121 | We need to build matrices for the single layer operators S_k parametrized by the complex number k. | ||
122 | This is done by the routines [[attach:Hk_comp.m]] and [[attach:H1.m]]. | ||
123 | |||
124 | Here //Hk_comp.m// computes the matrices and //H1.m// is an auxiliary function. Note that the order Ntrig | ||
125 | of trigonometric approximation (in other words, the number of basis functions used) has been chosen | ||
126 | in the routine //DN_comp.m// above and saved to disc for later reference. The routine Hk_comp.m loads | ||
127 | Ntrig from file. | ||
128 | |||
129 | Running the routine //Hk_comp.m// is computationally the most demanding task on this page. | ||
130 | Do not be surprised if it takes 10 minutes or more. | ||
131 | |||
132 | Note that we save time by not running //Hk_comp.m// for too large values of |k|. Namely, the ill-posedness | ||
133 | of the EIT problem has the effect that the boundary integral equation cannot be solved for |k| exceeding | ||
134 | a certain threshold value R; for k values satisfying |k|>R the computation will produce numerical garbage. | ||
135 | |||
136 | Once Hk_comp.m has been run, we can solve the boundary integral equation for the traces of the | ||
137 | complex geometric optics solutions. This is done by the routine [[attach:psi_BIE_comp.m]], and the result is saved | ||
138 | to a file in the subdirectory 'data'. The next step is to evaluate the scattering transform by integration over | ||
139 | the boundary using the routine [[attach:tBIE_comp.m]]. | ||
140 | |||
141 | We are now ready to plot the result and compare it to the scattering transform computed using the | ||
142 | Lippmann-Schwinger equation approach. Run the file [[attach:t_plot.m]], and you should see something like this: | ||
143 | |||
144 | [[image:attach:scatLSBIE.png]] | ||
145 | |||
146 | Note how the magenta line (computed using the boundary integral equation) diverges for |k|>8. | ||
147 | However, the values of the magenta line for k near zero are very accurate. | ||
148 | |||
149 | ---- | ||
150 | |||
151 | == Reconstruction from scattering transform using the D-bar method == | ||
152 | |||
153 | Now we are ready to reconstruct the conductivity. Download the routines [[attach:tBIErecon_comp.m]] and [[attach:DB_oper.m]], | ||
154 | and run //tBIErecon_comp.m//.\\ | ||
155 | |||
156 | You can look at the reconstruction using the routine [[attach:recon_plot.m]]. You should see something like this: | ||
157 | |||
158 | [[image:attach:recon.png]] | ||
159 | |||
160 | Here we used R=4, so the reconstruction is not very close to the original. Try setting M=8 and R=7 in | ||
161 | //tBIErecon_comp.m// and see what //recon_plot.m// produces then. | ||
162 | |||
163 | Note carefully that although we used the rotational symmetry of the conductivity to speed up some of the above | ||
164 | computations, the solution of the D-bar equation is a two-dimensional process, not one-dimensional. | ||
165 | We did choose the reconstruction points along the positive x1-axis for convenience, but any planar point x | ||
166 | could be chosen. Also, note that the reconstruction at one x point is completely independent from the reconstruction | ||
167 | at another point, so the D-bar method allows region-of-interest imaging and trivial parallellization. | ||
168 | |||
169 | You can experiment with the truncation radius R. When you use tBIE computed using the boundary integral equation, | ||
170 | you can take R up to 7 with no problems. However, when R is so large that the bad-quality parts of the above magenta | ||
171 | plot are being used, the reconstruction will be bad. | ||
172 | |||
173 | You can take the experiment further by using tLS instead of tBIE; then you can push the reconstruction to higher | ||
174 | values of R. Also, you can replace the low-quality tLS values near k=0 with the higher-quality tBIE. | ||
175 | |||
176 | \\ | ||
177 | |||
178 | (% style="font-size: 10.0pt;line-height: 13.0pt;" %) |