|
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
|
Simulation of 3D surface electrode patterns.Simulate 3D data
shape_str = ['solid top = plane(0,0,0;0,0,1);\n' ...
'solid block = orthobrick(-4,-4,-2;4,4,2) -maxh=0.3;\n' ...
'solid ball = sphere(1,-1,-1;0.2); tlo ball;\n' ...
'solid mainobj= top and block and not ball;\n'];
[epos_x,epos_y] = meshgrid(linspace( -2,2,5),linspace(-2,2,5));
elec_pos = [epos_x(:), epos_y(:), ones(size(epos_x(:)))*[0,0,0,1] ];
elec_shape=[0.1];
elec_obj = 'top';
fmdl = ng_mk_gen_models(shape_str, elec_pos, elec_shape, elec_obj);
stim = mk_stim_patterns(size(fmdl.electrode,2), 1, ... %rings
[0,7], [0,7], {'no_meas_current'},1);
fmdl.stimulation = stim;
img= mk_image(fmdl,1);
img.elem_data(fmdl.mat_idx{2}) = 2;
show_fem(img); view(-16,22); set(gca,'Projection','perspective')
print_convert surface_sim01a.png '-density 100'
Figure: model of a conductive ball underneath a set of electrodes vi = fwd_solve(img); img.elem_data(:) = 1; vh = fwd_solve(img); vi = add_noise(5, vi, vh); %SNR=5 Create 3D forward model and reconstruction model
shape_str = ['solid top = plane(0,0,0;0,0,1);\n' ...
'solid block = orthobrick(-4,-4,-2;4,4,2) -maxh=0.3;\n' ...
'solid mainobj= top and block;\n'];
fmdl = ng_mk_gen_models(shape_str, elec_pos, elec_shape, elec_obj);
fmdl.stimulation = stim;
% inverse model: a smaller region directly over the electrodes with coarser mesh
shape_str = 'solid mainobj= orthobrick(-3,-3,-2.0;3,3,-0.2) -maxh=0.5;';
cmdl = ng_mk_gen_models(shape_str, [], [], '');
% define the mapping between the two meshes
c2f= mk_coarse_fine_mapping( fmdl, cmdl);
% set the reconstruction parameters
inv3d= select_imdl(fmdl, {'Basic GN dif'});
inv3d.solve= @inv_solve_diff_GN_one_step;
inv3d.hyperparameter.value = .03;
inv3d.RtR_prior= @prior_laplace;
inv3d.fwd_model.coarse2fine = c2f;
inv3d.rec_model = cmdl;
hh= show_fem(cmdl); set(hh,'EdgeColor',[0,0,1]);
hold on; show_fem(fmdl); hold off
view(-16,22); set(gca,'Projection','perspective')
print_convert surface_sim03a.png '-density 100'
Figure: Forward model (black) and reconstruction model (blue) Inversion (using a difference solver)imgr = inv_solve(inv3d, vh, vi); show_fem(imgr); view(-16,22); set(gca,'Projection','perspective') print_convert surface_sim04a.png '-density 100' % Set levels for z-intercepts of -0.4,-1.0,-1.6 levels= [inf,inf,-0.4,1,1; inf,inf,-1.0,2,1; inf,inf,-1.6,3,1]; show_slices(imgr,levels) print_convert surface_sim04b.png '-density 150' % Try a different prior inv3d.RtR_prior= @prior_noser; inv3d.prior_use_fwd_not_rec = 1; inv3d.hyperparameter.value = .3; imgr = inv_solve(inv3d, vh, vi); show_fem(imgr); view(-16,22); set(gca,'Projection','perspective') print_convert surface_sim04c.png '-density 100' show_slices(imgr,levels) print_convert surface_sim04d.png '-density 150'
Figure: Reconstruction: (top) mesh and (bottom) slices at z=-0.4, z=-1.0, and z=-1.6. <
Figure:Reconstruction with a NOSER prior. |
Last Modified: $Date: 2017-02-28 13:12:08 -0500 (Tue, 28 Feb 2017) $ by $Author: aadler $