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 $