|
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
|
Modifying EIDORS data structures and modelsEIDORS Stimulation patternsRather than creating new FEM models from scratch, it is normally easier to take a model that almost works, and then modify it.In this tutorial, we explore using different 16 electrode configurations for 3D EIT. Assume that we have a 16 electrode adjacent stimulation, adjacent measurment system. Of course, the electrodes can be placed anywhere, and the corresponding images reconstructed.
% Explore Stimulation Patterns
% $Id: tutorial030a.m 5544 2017-06-16 16:30:20Z aadler $
% 3D Model
imdl_3d= mk_common_model('n3r2',[16. 2]);
fmdl= imdl_3d.fwd_model;
% Show opposite pattern
fmdl.stimulation=mk_stim_patterns(16,2, '{op}','{op}', ...
{'meas_current','no_redundant'} );
subplot(121)
show_stim_meas_pattern(fmdl,'ya')
% Show adjacent pattern
fmdl.stimulation=mk_stim_patterns(16,2, '{ad}','{ad}', ...
{'no_meas_current','do_redundant'} );
subplot(122)
show_stim_meas_pattern(fmdl,'ya')
print_convert tutorial030a.png '-density 75';
Figure: Two layer 16 ring FEM models with different stimulation patterns. Using 16 electrodes from a 32 electrode model
% Explore Stimulation Patterns
% $Id: tutorial030b.m 5544 2017-06-16 16:30:20Z aadler $
% We have a 16 electrode EIT machine with adjacent drive
adjdrv= mk_stim_patterns(16,1, '{ad}','{ad}', ...
{'no_meas_current','do_redundant'} );
% Arrange 16 electrodes in a zigzag
zigzag_mdl= fmdl; zigzag_mdl.stimulation= adjdrv;
zigzag_pat= [ 1:2:15;
18:2:32];
zigzag_mdl.electrode= fmdl.electrode( zigzag_pat(:) );
subplot(131); show_stim_meas_pattern(zigzag_mdl,'ya')
% Arrange 16 electrodes as planar
planar_mdl= fmdl; planar_mdl.stimulation= adjdrv;
planar_pat= [ 1:2:15;
17:2:32]';
planar_mdl.electrode= fmdl.electrode( planar_pat(:) );
subplot(132); show_stim_meas_pattern(planar_mdl,'ya')
% Arrange 16 electrodes as planar-opposite
pl_ops_mdl= fmdl; pl_ops_mdl.stimulation= adjdrv;
pl_ops_pat= [ rem( (0:7)*3, 8)*2+1;
rem( (0:7)*3, 8)*2+17]';
pl_ops_mdl.electrode= fmdl.electrode( pl_ops_pat(:) );
subplot(133); show_stim_meas_pattern(pl_ops_mdl,'ya')
print_convert tutorial030b.png '-density 75';
Figure: Three different ways to place 16 electrodes on a 32 electrode phantom. Left: Zigzag, Middle: Planar, Right: Planar-opposite, Reconstruct images with different electrode placements
% Explore Stimulation Patterns - and reconstruct images
% $Id: tutorial030c.m 4076 2013-05-27 09:17:05Z bgrychtol $
% Define an image
sim_img= mk_image(zigzag_mdl, 1);
% Simulate homogeneous measurements
sim_img.fwd_model= zigzag_mdl;
zigzag_data_h= fwd_solve( sim_img );
sim_img.fwd_model= planar_mdl;
planar_data_h= fwd_solve( sim_img );
sim_img.fwd_model= pl_ops_mdl;
pl_ops_data_h= fwd_solve( sim_img );
% Create targets in image
sim_img.elem_data([390,391,393,396,402,478,479,480,484,486, ...
664,665,666,667,668,670,671,672,676,677, ...
678,755,760,761])= 1.15;
sim_img.elem_data([318,319,321,324,330,439,440,441,445,447, ...
592,593,594,595,596,598,599,600,604,605, ...
606,716,721,722])= 0.8;
% Simulate inhomogeneous measurements
sim_img.fwd_model= zigzag_mdl;
zigzag_data_i= fwd_solve( sim_img );
sim_img.fwd_model= planar_mdl;
planar_data_i= fwd_solve( sim_img );
sim_img.fwd_model= pl_ops_mdl;
pl_ops_data_i= fwd_solve( sim_img );
%Add 25dB SNR noise to data
noise= std(zigzag_data_i.meas - zigzag_data_h.meas) ...
/ 10^(25/20) * randn(size(zigzag_data_h.meas));
zigzag_data_i.meas= zigzag_data_i.meas + noise;
planar_data_i.meas= planar_data_i.meas + noise;
pl_ops_data_i.meas= pl_ops_data_i.meas + noise;
%Reconstruct and show images
slices= [inf,inf,2.0,1,1; inf,inf,1.0,1,2];
subplot(131)
imdl_3d.fwd_model= zigzag_mdl;
img= inv_solve(imdl_3d, zigzag_data_h, zigzag_data_i);
show_slices(img, slices);
subplot(132)
imdl_3d.fwd_model= planar_mdl;
img= inv_solve(imdl_3d, planar_data_h, planar_data_i);
show_slices(img, slices);
subplot(133)
imdl_3d.fwd_model= pl_ops_mdl;
img= inv_solve(imdl_3d, pl_ops_data_h, pl_ops_data_i);
show_slices(img, slices);
print_convert tutorial030c.png '-density 75';
Figure: Reconstructions with three different ways to place 16 electrodes on a 32 electrode phantom. Left: Zigzag, Middle: Planar, Right: Planar-opposite. As expected, image quality is worse (at 25dB SNR) than for the 32 electrode case a 20dB SNR. |
Last Modified: $Date: 2017-02-28 13:12:08 -0500 (Tue, 28 Feb 2017) $ by $Author: aadler $