|
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
|
Reconstructing with electrode errorsThe 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 ElectrodesThese results are taken from the paper:
% 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 electrodesThe 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:
% 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 GREITElectrode 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 - 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 % 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 $