|
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
|
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 4839 2015-03-30 07:44:50Z 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 = .3;
img = inv_solve(imdl, vh, vi);
subplot(221)
show_slices(img);
print_convert electrode_errors01a.png
close % else matlab remembers image axis
subplot(221) % to preserve size
img = inv_solve(imdl, vh, vi(:,20));
show_fem(img,[0,1,0]);axis off
print_convert electrode_errors01b.png
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 4101 2013-05-28 19:18:55Z bgrychtol $ imdl.meas_icov = meas_icov_rm_elecs( imdl, 13); img = inv_solve(imdl, vh, vi(:,20)); show_fem(img,[0,1,0]); axis off print_convert electrode_errors02a.png 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.png
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 4101 2013-05-28 19:18:55Z bgrychtol $ 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]);axis off print_convert electrode_errors03a.png 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]);axis off print_convert electrode_errors03b.png
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 3688 2012-12-15 07:18:33Z bgrychtol $
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 = mdl_normalize(fmdl, 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 4101 2013-05-28 19:18:55Z bgrychtol $ 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.png
Figure: Basic GREIT reconstruction
% GREIT - error $Id: electrode_errors06.m 4101 2013-05-28 19:18:55Z bgrychtol $
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.png
Figure: GREIT with single electrode errors % Basic GREIT reconst $Id: electrode_errors07.m 4101 2013-05-28 19:18:55Z bgrychtol $ % 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.png
Figure: GREIT with reciprocity-based electrode errors |
Last Modified: $Date: 2017-03-01 08:44:21 -0500 (Wed, 01 Mar 2017) $ by $Author: aadler $