EIDORS: Electrical Impedance Tomography and Diffuse Optical Tomography Reconstruction Software

EIDORS (mirror)
− Image Reconst
− Data Structures
− Applications
− FEM Modelling
− Old tutorials
Contrib Data
Browse Docs
Browse SVN

Mailing list


Hosted by
SourceForge.net Logo


Unexpected Effect: Imaging with absolute value of measurements

Many EIT systems take the amplitude of the measured signal; however EIDORS expects to see the in-phase (and quadrature) signals. If these are not used, EIDORS will reconstruct incorrectly.

Stimulation Patterns

This effect is not visible for adjacent stimulation/measurement (the default from mk_common_models. It is necessary to specify a pattern such as this.
% Create Stimulation Patterns
[stim,msel] = mk_stim_patterns(16,1,[0,5],[0,5],{},1);

Simulation Image

% Create Simulation Image
extra={'ball1', 'ball2','ball3',...
      ['solid ob = orthobrick(-1,-1,0;1,1,0.05) -maxh=0.1;' ...
       'solid ball1 = cylinder( 0.5, 0.2,0; 0.5, 0.2,1;0.2) and ob;' ...
       'solid ball2 = cylinder(-0.5, 0.2,0;-0.5, 0.2,1;0.2) and ob;' ...
       'solid ball3 = cylinder( 0.0,-0.5,0; 0.0,-0.5,1;0.2) and ob;']};

fmdl= ng_mk_cyl_models(0,[16],[0.1,0,0.05],extra); 
fmdl.stimulation = stim;
fmdl.meas_select = msel;
img = mk_image( fmdl, 1);
vh = fwd_solve(img); vh= vh.meas;

img.elem_data( fmdl.mat_idx{2} ) = 1.1;
img.elem_data( fmdl.mat_idx{3} ) = 0.9;
img.elem_data( fmdl.mat_idx{4} ) = 1.1;
vi = fwd_solve(img); vi= vi.meas;

subplot(221); show_fem(img);
print_convert absolute_value02a.png

Figure: Stimulation Image

Reconstruct without/with Absolute Value

% create inverse model
imdl = mk_common_model('c2c2',16);
imdl.fwd_model.stimulation = stim;
imdl.fwd_model.meas_select = msel;
imdl.hyperparameter.value = 0.10;

% reconstruct normally
show_fem( inv_solve( imdl, vh, vi));
print_convert absolute_value03a.png

% reconstruct abs
vha = abs(vh);
via = abs(vi);
show_fem( inv_solve( imdl, vha, via));
print_convert absolute_value03b.png

Figure: Reconstructed images: left) Real measurements, right) Absolute measurements,

Strategy #1 for absolute values

The easiest way is to re-calculate the original value, by getting the sign of simulated data. This may have errors if voltages are close to zero.
% simulate homogeneous voltages
vhomg = fwd_solve( mk_image(imdl, 1));
flip  = sign(vhomg.meas);

% recalculate the correct values
vhr = vha.*flip;
vir = via.*flip;

show_fem( inv_solve( imdl, vhr, vir));
print_convert absolute_value04a.png

Figure: Reconstructed images by re-calculating the sign

Strategy #2 for absolute values

Define a new Jacobian matrix calculator for the system that knows about absolute values
function J = jacobian_absolute( fwd_model, img);
    vh = fwd_solve(img);
    flip = sign(vh.meas);
    flip = spdiags(flip, 0, length(flip), length(flip));
    J = flip*jacobian_adjoint(img);

Then use this jacobian to override the jacobian field in the fwd_model.jacobian.
% Modify Jacobian 
imdl.fwd_model.jacobian = @jacobian_absolute;
show_fem( inv_solve( imdl, vha, via));
print_convert absolute_value05a.png

Figure: Reconstructed images by re-calculating the Jacobian matrix

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