Eidors-logo    

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
                       

 

Hosted by
SourceForge.net Logo

 

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 $