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
|
Contrasts in EITIn EIT the contrast (signal change for a target) is not a uniform function of the conductivity. The effect is subtle and it is explored in this tutorial.Overview of EIT contrast signalHere we introduce a cylindrical contrast of various height/diameter axis ratios% $Id: contrasts_06.m 5755 2018-05-19 11:03:13Z aadler $ [stim,msel] = mk_stim_patterns(16,1,[0,1],[0,1],{},1); space= logspace(-3,3,37); diam = 0.10; i=1; vv=[]; for rat = [.3,1,2,5]; extra={'targ',sprintf(['solid targ = ', ... 'cylinder(0,0,0;0,0,1;%f) and ', ... 'plane(0,0,%f;0,0,-1) and plane(0,0,%f;0,0,1);'], ... diam,diam*[-1,+1]*rat+1)}; fmdl= ng_mk_cyl_models([2,1,.1],[16,1.0],[0.05],extra); fmdl.stimulation = stim; fmdl.meas_select = msel; img= mk_image(fmdl,1); vh = fwd_solve(img); vh = vh.meas; img.elem_data(fmdl.mat_idx{2}) = 2; show_fem(img); j=1;for k=space; img.elem_data(fmdl.mat_idx{2}) = k; vi = fwd_solve(img); vi = vi.meas; vv(j,i)= norm(vi-vh); j=j+1;end i=i+1;end vv = vv ./ (ones(size(vv,1),1)*max(vv,[],1)); clf; subplot(211); opt.viewpoint = struct('az',-6,'el',13); show_fem_enhanced(img,opt); print_convert contrasts_06a.jpg %subplot(212); semilogx(space,vv,'LineWidth',2); legend('0.3','1.0','2.0','5.0','Location','SouthEast') xlim([min(space), max(space)]) set(gca,'xtick',[1e-3,1e-2,1e-1,1,1e1,1e2,1e3]); print_convert contrasts_06b.png Figure: Left: 3D FEM with an ellipsoidal target region: Right: 3D FEM with an ellipsoidal target region: Creating an FEM and solving the forward problemsz = 5; ellipse_x = 2; shape_str = [ ... sprintf('solid ec = ellipticcylinder(0,0,0;%f,0,0;0,%f,0);\n', ... 0.5*ellipse_x, 0.5/ellipse_x ) ... sprintf('solid left = plane(-%f,0,0;-1,0,0);\n',sz) ... sprintf('solid right = plane( %f,0,0; 1,0,0);\n',sz) ... sprintf('solid brick = orthobrick(-%f,-2,-0.2;%f,2,0);\n',sz+1,sz+1) ... 'solid cyl = ec and brick; tlo cyl;\n' ... 'solid mainobj= left and right and (not cyl) and brick;\n']; elec_pos = [ sz, 0, 0, 0, 0, 1; -sz, 0, 0, 0, 0, -1]; elec_shape=[2.0]; elec_obj = {'left','right'}; fmdl = ng_mk_gen_models(shape_str, elec_pos, elec_shape, elec_obj); fmdl = mdl2d_from3d(fmdl); fmdl.stimulation = stim_meas_list([1,2,1,2]); img = mk_image(fmdl,1); img.elem_data( fmdl.mat_idx{1} ) = 2; img.calc_colours.ref_level = 1; show_fem( img ); print_convert contrasts_01a.png Figure: A 2D finite element model with an elliptical conductivity contrasting inclusion img.fwd_model.solve = @fwd_solve_1st_order; img.fwd_model.system_mat = @system_mat_1st_order; [img.fwd_model.electrode(:).z_contact] = deal(1000); % Large img.fwd_solve.get_all_meas = 1; vv = fwd_solve(img); imgv= rmfield(img,'elem_data'); imgv.node_data = vv.volt; imgv.calc_colours.ref_level = mean(vv.volt); show_fem(imgv); print_convert contrasts_02a.png Figure: Voltage distribution around an elliptical conductivity with a conductive contrast imgc = img; imgc.fwd_model.mdl_slice_mapper.npx = 128; imgc.fwd_model.mdl_slice_mapper.npy = 200; imgc.fwd_model.mdl_slice_mapper.level = [inf,inf,0]; imgc.calc_colours.ref_level = 1; q = show_current(imgc,vv.volt); fm1 = img.fwd_model; fm1.elems = fm1.elems(fm1.mat_idx{1},:); bdy= find_boundary(fm1); hh=show_fem(img.fwd_model); set(hh,'EdgeColor',[1,1,1]*.75); hold on; plot( reshape(fm1.nodes(bdy,1),size(bdy))', ... reshape(fm1.nodes(bdy,2),size(bdy))','k','LineWidth',2); sy = linspace(-2,2,20); sx= 0*sy - sz; hh=streamline(q.xp,q.yp, q.xc, q.yc,-sx,sy); set(hh,'Linewidth',2); hold off; if ~exist('img_name'); img_name = '03a'; end print_convert(sprintf('contrasts_%s.png',img_name)); Figure: Streamlines around a conductive contrasting target |
function img = ellipse_in_plane( sz, ellipse_x); shape_str = [ ... sprintf('solid ec = ellipticcylinder(0,0,0;%f,0,0;0,%f,0);\n', ... 0.5*ellipse_x, 0.5/ellipse_x ) ... sprintf('solid left = plane(-%f,0,0;-1,0,0);\n',sz) ... sprintf('solid right = plane( %f,0,0; 1,0,0);\n',sz) ... sprintf('solid brick = orthobrick(-%f,-2,-0.2;%f,2,0) -maxh=0.2;\n',sz+1,sz+1) ... 'solid cyl = ec and brick; tlo cyl;\n' ... 'solid mainobj= left and right and (not cyl) and brick;\n']; elec_pos = [ sz, 0, 0, 0, 0, 1; -sz, 0, 0, 0, 0, -1]; elec_shape=[2.0]; elec_obj = {'left','right'}; fmdl = ng_mk_gen_models(shape_str, elec_pos, elec_shape, elec_obj); fmdl = mdl2d_from3d(fmdl); fmdl.stimulation = stim_meas_list([1,2,1,2]); img = mk_image(fmdl,1); img.fwd_model.solve = @fwd_solve_1st_order; img.fwd_model.system_mat = @system_mat_1st_order; [img.fwd_model.electrode(:).z_contact] = deal(1000); % Large img.fwd_solve.get_all_meas = 1;Iterate over model shapes
sz = 5; img_idx = 'b'; for ellipse_x = [0.5,1,2]; img = contrasts_04_modeller( sz, ellipse_x); targ = img.fwd_model.mat_idx{1}; for contrast = linspace( -3,3,7); img.elem_data( targ ) = exp(contrast); vv = fwd_solve(img); img_name = sprintf('04%c',img_idx); img_idx= img_idx+1; contrasts_03; end end
σ = | x/y = 2 | x/y = 1 | x/y = ½ |
---|---|---|---|
e−3 | |||
e−2 | |||
e−1 | |||
e0 | |||
e+1 | |||
e+2 | |||
e+3 |
σ = | x/y = 2 | x/y = 1 | x/y = ½ |
---|---|---|---|
e−2 | |||
e−1 | |||
e0 | |||
e+1 | |||
e+2 |
Last Modified: $Date: 2018-03-19 18:54:58 -0400 (Mon, 19 Mar 2018) $ by $Author: aadler $