|
EIDORS: Electrical Impedance Tomography and Diffuse Optical Tomography Reconstruction Software |
|
EIDORS
(mirror) Main Documentation Examples Tutorials − Image Reconst − Data Structures − Application Examples − FEM Modelling Download Contrib Data GREIT Browse SVN News FAQ Developer
|
Electrode movement reconstruction for simulated 2D dataHere we create a simple 2D model and change the boundary shape between two measurments.
% Generate simulation data without noise and standard reconstruction
% Create circular FEM - creates a eidors_mdl type inv_model.
mdlc = mk_common_model('c2c');
% Instantiate a homogeneous forward model.
% ref_level is 1 since we use ones( ).
sigma = ones( size(mdlc.fwd_model.elems,1) ,1);
% Create the eidors_obj of type image.
f_img = eidors_obj('image', 'homogeneous image', ...
'elem_data', sigma, ...
'fwd_model', mdlc.fwd_model,...
'ref_level', 1);
% Solve homogeneous forward problem
vh = fwd_solve( f_img );
% Hard coded values here represent local inhomogeneities
sigma([75,93,94,113,114,136]) = 1.2;
sigma([105,125,126,149,150,174]) = 0.8;
f_img.elem_data = sigma;
% Simulate node movements - shrink x, stretch y by 1% of model diameter
% node0 before, node1 after movement
movement = [1-0.01 0; 0 1+0.01];
node0 = f_img.fwd_model.nodes;
node1 = node0*movement;
f_img.fwd_model.nodes = node1;
% Set eidors background colour
f_img.calc_colours.backgnd= [.9,.9,.9];
% Solve inhomogeneous forward problem with movements and normal noise
% 1% of standard deviation of signal
vi = fwd_solve( f_img );
noise = 0*std( vh.meas - vi.meas )*randn( size(vi.meas) );
vi.meas = vi.meas + noise;
move = node1 - node0;
% Plot FEM with conductivities and movement vectors.
show_fem_move( f_img, move, 20 );
print -r75 -dpng move_2d01.png
Figure: Forward solution of a 2D model where the boundary was changed between measurements. The arrows show how the electrodes were displaced (scaled 20x).
% Generate eidors planar finite element model
mdl2dim = mk_common_model('b2c');
% Set eidors_obj hyperparameter member.
mdl2dim.hyperparameter.value= 0.01;
clim= .088;
% Solve inverse problem for mdl2dim eidors_obj model.
img2dim = inv_solve(mdl2dim, vh, vi);
img2dim.calc_colours.clim= clim;
img2dim.calc_colours.backgnd= [.9,.9,.9];
% Plot results for each algorithm
subplot(1,2,1);
show_fem_move(img2dim);
calc_colours(img2dim,[],1); % do colourbar
% Set eidors_obj hyperparameter member.
mdlM = mdl2dim;
% Place traditional jacobian in temporary member.
mdlM.fwd_model.conductivity_jacobian = mdlM.fwd_model.jacobian;
% Redefine jacobian member for movement & conductivity.
mdlM.fwd_model.jacobian = 'aa_e_move_jacobian';
mdlM.RtR_prior = 'aa_e_move_image_prior';
mdlM.aa_e_move_image_prior.parameters = sqrt(1e2/1);
% Solve inverse problem for mdlM eidors_obj model.
imgM = inv_solve(mdlM, vh, vi);
imgM.calc_colours.clim= clim;
imgM.calc_colours.backgnd= [.9,.9,.9];
% Plot results for each algorithm
subplot(1,2,2);
show_fem_move(imgM);
calc_colours(imgM,[],1); % do colourbar
set(gcf,'paperposition',[.25 2.5 8 4]);
print -r125 -dpng move_2d02.png
Figure: Inverse solutions of the problem above. Left image shows image reconstruction without movement correction, and right image shows reconstruction with estimated movement corrections shown by green arrows (scaled 20x). |
Last Modified: $Date: 2008-07-26 11:36:27 -0400 (Sat, 26 Jul 2008) $ by $Author: aadler $