|
EIDORS: Electrical Impedance Tomography and Diffuse Optical Tomography Reconstruction Software |
|
EIDORS
(mirror) Main Documentation Tutorials − Image Reconst − Data Structures − Applications − FEM Modelling − GREIT − Old tutorials − Workshop Download Contrib Data GREIT Browse Docs Browse SVN News Mailing list (archive) FAQ Developer
|
Simulating Geophysical measurements around a boreholeCreate 3D FEM model of the gallery
% Create 3D model of a tunnel $Id: tunnelsim01.m 2356 2010-11-08 08:41:42Z aadler $
N_elec = 16;
shape_str = ['solid incyl = cylinder (0,0,0; 1,0,0; 1) -maxh=1.0; \n', ...
'solid farcyl = cylinder (0,0,0; 1,0,0; 5) -maxh=5.0; \n' ...
'solid pl1 = plane(-5,0,0;-1,0,0);\n' ...
'solid pl2 = plane(5,0,0; 1,0,0);\n' ...
'solid mainobj= pl1 and pl2 and farcyl and not incyl;\n'];
th= linspace(0,2*pi,N_elec+1)'; th(end)=[];
cth= cos(th); sth=sin(th); zth= zeros(size(th));
elec_pos = [zth, cth, sth, zth cth, sth];
elec_shape=[0.01];
elec_obj = 'incyl';
fmdl = ng_mk_gen_models(shape_str, elec_pos, elec_shape, elec_obj);
subplot(221); show_fem( fmdl );
view(90,0); print_convert tunnelsim01a.png
view( 0,0); print_convert tunnelsim01b.png
crop_model([], inline('x>=0.5','x','y','z'))
crop_model([], inline('x<=-0.5','x','y','z'))
crop_model([], inline('(y.^2+z.^2)>=1.3^2','x','y','z'))
view(-90,50); axis tight; print_convert tunnelsim01c.png
Figure: 3D FEM of gallery from two viewing angles, and a cropped model showing the electrodes Place a simulated contrast
% Create 3D model of a tunnel $Id: tunnelsim02.m 3273 2012-06-30 18:00:35Z aadler $
% Simulation protocol.
stim = mk_stim_patterns(N_elec, 1, [0,4], [0,4], {'no_meas_current'},1);
fmdl.stimulation = stim;
cond_mdl = .1; % in S/m units
img = mk_image( fmdl, cond_mdl);
vs_h = fwd_solve( img);
img.elem_data = cond_mdl*(1 + mk_c2f_circ_mapping(fmdl, [0.25;1.4;0;0.2]) );
vs_i = fwd_solve( img);
show_fem(img); ylim(2*[-1,1]); zlim(2*[-1,1]);
view(90,0 ); print_convert tunnelsim02a.png
view( 0,90); print_convert tunnelsim02b.png
Figure: 3D FEM of gallery and contrast from two viewing angles. Reconstruct images (using full 3D reconstruction)Using the full 3D model, this is an extremely slow reconstruction process; it is also not really recommended since the model size is much too small near the electrodes.
% Create 3D model of a tunnel $Id: tunnelsim03.m 2359 2010-11-08 09:28:12Z aadler $
% Reconstruct entire image (slow)
imdl = mk_common_model('d2c2',N_elec);
imdl.fwd_model = fmdl;
imdl.jacobian_bkgnd.value = cond_mdl;
imgr = inv_solve( imdl, vs_h, vs_i );
imgr.calc_colours.npoints= 128;
slices = [0.0,inf,inf,1,1;
0.5,inf,inf,2,1;
1.0,inf,inf,3,1];
subplot(211); show_slices(imgr,slices);
print_convert tunnelsim03a.png
Figure: Slices Reconstructed at x=0.0, x=0.5, and x=1.0. Reconstruct images (on a 2D simple slice)Here we use a slice from a filled 2D circular model. This means that the smoothing prior will be allowed to "fill" through the centre, resulting in image content where we don't expect it to be.
% Create 3D model of a tunnel $Id: tunnelsim04.m 4839 2015-03-30 07:44:50Z aadler $
% Reconstruct to a slice via coarse2fine
% Use a simple circular model without hole.
% Note that this will give the wrong electrode posns
imdl = mk_common_model('d2c2',N_elec);
imdl.rec_model = imdl.fwd_model;
imdl.rec_model.nodes = imdl.rec_model.nodes*5; % Enlarge
imdl.fwd_model = fmdl;
imdl.jacobian_bkgnd.value = cond_mdl;
% Do coarse2fine mapping. Rotate mdl to z dirn
f1mdl = fmdl; f1mdl.nodes = f1mdl.nodes(:,[2,3,1]);
f1mdl.mk_coarse_fine_mapping.z_depth = 1;
c2f= mk_coarse_fine_mapping( f1mdl, imdl.rec_model);
imdl.fwd_model.coarse2fine = c2f;
imdl.hyperparameter.value = 0.3;
imgr = inv_solve( imdl, vs_h, vs_i );
imgr.calc_colours.npoints= 128; subplot(221);
show_slices(imgr); print_convert tunnelsim04a.png
show_fem(imgr); print_convert tunnelsim04b.png
Figure: Slices 2D slices shown in two configurations Reconstruct images (on a 2D conforming geometry)Here we use a slice created to conform to the specified geometry.
% Create 2D model of a tunnel $Id: tunnelsim05.m 2361 2010-11-08 10:50:48Z aadler $
extra={'ball', 'solid ball = sphere(0,0,0;1) -maxh=0.25;'};
cmdl= ng_mk_cyl_models([0,15,3],[0],[0.1,0,0.05],extra);
show_fem(cmdl); print_convert tunnelsim05a.png
show_fem(cmdl); axis(2*[-1,1,-1,1]); print_convert tunnelsim05b.png
Figure: 2D FEM model for reconstruction and zoom
% Create 3D model of a tunnel $Id: tunnelsim06.m 4839 2015-03-30 07:44:50Z aadler $
imdl = select_imdl( fmdl, {'Basic GN dif'});
imdl.rec_model = cmdl;
imdl.jacobian_bkgnd.value = cond_mdl;
% Do coarse2fine mapping. Rotate mdl to z dirn
f1mdl = fmdl; f1mdl.nodes = f1mdl.nodes(:,[2,3,1]);
f1mdl.mk_coarse_fine_mapping.z_depth = 1;
c2f= mk_coarse_fine_mapping( f1mdl, cmdl);
imdl.fwd_model.coarse2fine = c2f;
imdl.hyperparameter.value = 0.3;
imgr = inv_solve( imdl, vs_h, vs_i );
imgr.calc_colours.npoints= 128; subplot(221);
show_slices(imgr); print_convert tunnelsim06a.png
show_fem(imgr); print_convert tunnelsim06b.png
show_fem(imgr); axis(3*[-1,1,-1,1]); print_convert tunnelsim06c.png
Figure: Reconstructed images |
Last Modified: $Date: 2017-02-28 13:12:08 -0500 (Tue, 28 Feb 2017) $ by $Author: aadler $