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

 

Electrode movement reconstruction for simulated 3D data

Here we create a simple 3D model and change the boundary shape between two measurments.
% Simulate 3D movement $Id: move_3d01.m 4059 2013-05-24 11:43:38Z bgrychtol $

noiselev = .1;
movement = 2;

% Generate eidors 3D finite element model
mdl3dim = mk_common_model( 'n3r2', [16 2]);
mdl3dim.fwd_model.nodes(:,3) = mdl3dim.fwd_model.nodes(:,3)/3;

img = mk_image(mdl3dim);
vh = fwd_solve( img );

load('datacom.mat','A','B');
img.elem_data(A) = 1.2; 
img.elem_data(B) = 0.8;
node0 = img.fwd_model.nodes;  % Node variable before movement
node1 = node0;                % Node variable after movement
z_axis = node1(:,3);

exaggeration = 10;
movement= 0.01*movement;
% Do a 3D twist - exaggerated for clearer illustration of distortion
node1(:,1) = node0(:,1).*(1 + exaggeration*movement*z_axis);
node1(:,2) = node0(:,2).*(1 + exaggeration*movement*(1-z_axis));

img.fwd_model.nodes = node1;
show_fem( img );
xlabel('x'); ylabel('y');
view(-44,22)

print_convert  move_3d01.png '-density 75'

% Do a 3D twist - we'll actually use this one
centre = 1- movement/2;
node1(:,1) = node0(:,1).*(centre + movement*z_axis);
node1(:,2) = node0(:,2).*(centre + movement*(1-z_axis));

% Solve inhomogeneous forward problem with movements and normal noise.
img.fwd_model.nodes = node1;
vi = fwd_solve( img );
noise = noiselev*std( vh.meas - vi.meas )*randn( size(vi.meas) );
vi.meas = vi.meas + noise;
move = node1 - node0;


Figure: Illustration of the deformation of the 3D model (exaggerated 10x).
Next we solve the inverse problem in two ways: first, without correcting for electrode movements, and second, with movement correction.
% Reconstruct 3D movement $Id: move_3d02.m 4839 2015-03-30 07:44:50Z aadler $

img3dim= img;

mdl3dim.RtR_prior = 'prior_laplace';
mdl3dim.hyperparameter.value = .05;

% Show slices of 3D model with true movement vectors
subplot(1,3,1);
img3dim.elem_data = img3dim.elem_data - 1;
img3dim.calc_colours.backgnd=[.8 .8 .9];
show_slices_move( img3dim, move );

% Inverse solution of data without movement consideration
img3dim= inv_solve(mdl3dim, vh, vi);
img3dim.calc_colours.backgnd=[.8 .8 .9];
subplot(1,3,2)
show_slices_move( img3dim );

% This is also available by this code:
% mdlM = select_imdl(mdl3dim, {'Elec Move GN'});

% Inverse solution of data with movement consideration
move_vs_conduct = 20;  % Movement penalty (symbol mu in paper)

mdlM = mdl3dim;
mdlM.fwd_model.jacobian = @jacobian_movement;

mdlM.RtR_prior = @prior_movement;

mdlM.prior_movement.parameters = move_vs_conduct;

% Solve inversglobale problem and show slices
imgM = inv_solve(mdlM, vh, vi);
imgM.calc_colours.backgnd=[.8 .8 .9];
subplot(1,3,3)
show_slices_move( imgM );
print_convert  move_3d02.png '-density 100'


Figure: Inverse solutions of the problem above. Each column shows three cross-sectional slices of the model. Forward problem with true electrode movement (scaled 10x) (left column). Inverse solution without movement compensation (centre column) and with movement estimation and compensation (scaled 10x) (right column).

Last Modified: $Date: 2017-02-28 13:12:08 -0500 (Tue, 28 Feb 2017) $ by $Author: aadler $