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
Download
Contrib Data
GREIT
Browse Docs
Browse SVN

News
Mailing list
(archive)
FAQ
Developer
                       

 

Hosted by
SourceForge.net Logo

 

Reconstructing with electrode errors

The main idea used to reconstruct with electrode errors, is to model errors as low SNR, and thus high noise, on measurements which use the affected electrodes.

Sample Data and clean reconstruction

% Sample data + Image $Id: electrode_errors01.m 2392 2010-11-14 09:07:49Z aadler $

% Sample data
load montreal_data_1995
vi = double( zc_resp );
vh = double( zc_resp(:,1) );

% Reconstruct
imdl = mk_common_model('c2t2',16);
imdl.hyperparameter.value = .1;

img = inv_solve(imdl, vh, vi);
subplot(221)
show_slices(img);
print_convert electrode_errors01a.jpg

img = inv_solve(imdl, vh, vi(:,20));
show_fem(img,[0,1,0]);
print_convert electrode_errors01b.jpg


Figure: Reconstructions of breathing data, illustrating that a small amount of electrode error occurs at electrodes 13 and 5.

Eliminating Electrodes

These results are taken from the paper:
    Andy Adler Reference Accounting for erroneous electrode data in EIT Physiol Meas, 25(1):227-238, 2004.
% Reject electrodes + Image $Id: electrode_errors02.m 2391 2010-11-13 10:53:29Z aadler $


imdl.meas_icov = meas_icov_rm_elecs( imdl, 13);

img = inv_solve(imdl, vh, vi(:,20));
show_fem(img,[0,1,0]);
print_convert electrode_errors02a.jpg

imdl.meas_icov = meas_icov_rm_elecs( imdl, [13,5]);

img = inv_solve(imdl, vh, vi(:,20));
show_fem(img,[0,1,0]);
print_convert electrode_errors02b.jpg


Figure: Reconstructions removing Left: Electrode 13, and Right: Electrodes 5 and 13

Detecting and automatically eliminating electrodes

The idea here is to compare the reciprocity match between measurements and scale the weighting of those which do not match via reciprocity. These results are taken from the paper:
    AE Hartinger, R Guardo, A Adler, H Gagnon. Real-time management of faulty electrodes in EIT IEEE T BME 2008.
% Reciprocity error + Image $Id: electrode_errors03.m 2392 2010-11-14 09:07:49Z aadler $

imdl.calc_reciproc_error.tau = 3e-4;
imdl.meas_icov = calc_reciproc_error( imdl, vi );

img = inv_solve(imdl, vh, vi(:,20)); show_fem(img,[0,1,0]);
print_convert electrode_errors03a.jpg

imdl.calc_reciproc_error.tau = 3e-2;
imdl.meas_icov = calc_reciproc_error( imdl, vi );

img = inv_solve(imdl, vh, vi(:,20)); show_fem(img,[0,1,0]);
print_convert electrode_errors03b.jpg


Figure: Reconstructions removing Left: Parameter τ=0.0003 Right: Parameter τ=0.03

Electrode Errors with GREIT

Electrode error management with GREIT is essentially the same. The key difference is that GREIT requires a noise covariance, not the noise inverse covariance.

Create a GREIT model.

% Reject electrodes + Image $Id: electrode_errors04.m 2878 2012-02-20 10:13:20Z aadler $

fmdl= mk_library_model('adult_male_16el_lungs');
fmdl.electrode = fmdl.electrode([9:16,1:8]);

[stim,msel] = mk_stim_patterns(16,1,[0,1],[0,1],{'no_meas_current'},1);
fmdl.stimulation = stim;
fmdl.normalize_measurements=1;
fmdl.meas_select = msel;
img = mk_image(fmdl, 1);
img.elem_data([fmdl.mat_idx{2};fmdl.mat_idx{3}]) = 0.3; % lungs
clear opt; opt.imgsz = [32 32]; opt.square_pixels=1;
opt.noise_figure = .5;
imdl=mk_GREIT_model(img, 0.25, [], opt);

Basic GREIT reconstruction
% Basic GREIT reconst $Id: electrode_errors05.m 2875 2012-02-20 07:51:20Z aadler $

imgr= inv_solve(imdl, zc_resp(:,1), zc_resp(:,22));
imgr.calc_colours.ref_level=0; show_fem(imgr,[0,1]);

axis equal; axis([-1,1.05,-.8,.8]);
print_convert electrode_errors05a.jpg


Figure: Basic GREIT reconstruction
GREIT with single electrode errors
% GREIT - error $Id: electrode_errors06.m 2878 2012-02-20 10:13:20Z aadler $

imdl = eidors_obj('inv_model','','fwd_model',fmdl);
imdl.meas_icov_rm_elecs.elec_list = 13;
imdl.meas_icov_rm_elecs.exponent  = -1;
imdl.meas_icov_rm_elecs.SNR       = 100;
opt.noise_covar = meas_icov_rm_elecs(imdl);
imdl=mk_GREIT_model(img, 0.25, [], opt);

imgr= inv_solve(imdl, zc_resp(:,1), zc_resp(:,22));
imgr.calc_colours.ref_level=0; show_fem(imgr,[0,1]);

axis equal; axis([-1,1.05,-.8,.8]);
print_convert electrode_errors06a.jpg


Figure: Basic GREIT reconstruction
GREIT with reciprocity-based electrode errors
% Basic GREIT reconst $Id: electrode_errors07.m 2878 2012-02-20 10:13:20Z aadler $

% use -ve tau to get covariance rather than inv covar
imdl.calc_reciproc_error.tau = -3e-4;
opt.noise_covar = calc_reciproc_error( imdl, zc_resp );

imdl=mk_GREIT_model(img, 0.25, [], opt);

imgr= inv_solve(imdl, zc_resp(:,1), zc_resp(:,22));
imgr.calc_colours.ref_level=0; show_fem(imgr,[0,1]);

axis equal; axis([-1,1.05,-.8,.8]);

print_convert electrode_errors07a.jpg


Figure: Basic GREIT reconstruction

Last Modified: $Date: 2012-02-20 05:13:20 -0500 (Mon, 20 Feb 2012) $ by $Author: aadler $