0001
0002
0003
0004
0005
0006
0007 n_elec= 16;
0008 n_rings= 1;
0009
0010 options = {'no_meas_current','no_rotate_meas'};
0011 stimulation= mk_stim_patterns(n_elec, n_rings, '{ad}','{ad}', ...
0012 options, 10);
0013
0014
0015
0016 disp('STEP 1: Model simultion 3D');
0017
0018
0019
0020 levels= [-.5:.1:.5];
0021 e_levels= [4, 8];
0022
0023 params= mk_circ_tank( 8, levels, { 'zigzag', n_elec, e_levels } );
0024
0025
0026
0027 params.stimulation= stimulation;
0028 params.solve= @fwd_solve_1st_order;
0029
0030 params.system_mat= @system_mat_1st_order;
0031 params.jacobian= @jacobian_adjoint;
0032 mdl_3d = eidors_obj('fwd_model', params);
0033
0034
0035 disp('STEP 1A: simultion 3D - homogeneous');
0036
0037 cond= ones( size(mdl_3d.elems,1) ,1);
0038 homg_img= eidors_obj('image', 'homogeneous image', ...
0039 'elem_data', cond, ...
0040 'fwd_model', mdl_3d );
0041 homg_data=fwd_solve( homg_img);
0042
0043 disp('STEP 1B: simultion 3D - inhomogeneous');
0044
0045
0046 inhv= [38,50,51,66,67,83];
0047 for inhlev= (e_levels(1)-1)*3 + [-3:2];
0048 cond(256*inhlev+inhv) =2;
0049
0050 end
0051
0052 inh_img= eidors_obj('image', 'inhomogeneous image', ...
0053 'elem_data', cond, ...
0054 'fwd_model', mdl_3d );
0055 inh_data=fwd_solve( inh_img);
0056 show_fem( inh_img);
0057 disp([inh_img.name, '. Press a key']); pause;
0058
0059
0060 sig= std( inh_data.meas - homg_data.meas );
0061 inh_data.meas= inh_data.meas + 0.10 * sig* randn( size(inh_data.meas) );
0062
0063
0064
0065
0066 params= mk_circ_tank(8, [], n_elec);
0067
0068 params.stimulation= stimulation;
0069 params.solve= 'fwd_solve_1st_order';
0070 params.system_mat= 'system_mat_1st_order';
0071 params.jacobian= 'jacobian_adjoint';
0072 mdl_2d_2 = eidors_obj('fwd_model', params);
0073
0074 inv2d.name= 'EIT inverse';
0075 inv2d.solve= 'inv_solve_diff_GN_one_step';
0076
0077
0078
0079 inv2d.hyperparameter.value = 1e-1;
0080 inv2d.RtR_prior= 'prior_laplace';
0081
0082 inv2d.jacobian_bkgnd.value= 1;
0083 inv2d.reconst_type= 'difference';
0084 inv2d.fwd_model= mdl_2d_2;
0085 inv2d= eidors_obj('inv_model', inv2d);
0086
0087 img2= inv_solve( inv2d, inh_data, homg_data);
0088 img2.name= '2D inverse solution';
0089 if ~exist('OCTAVE_VERSION')
0090 show_fem(img2);
0091 else
0092 show_slices(img2);
0093 end
0094 disp([img2.name, '. Press a key']); pause;
0095
0096
0097
0098
0099
0100 disp('STEP 2: Reconstruction 3D');
0101 clear inv3d;
0102
0103 levels= [-.4:.2:.4];
0104 params= mk_circ_tank( 8, levels, { 'zigzag', n_elec, [2,4] } );
0105
0106
0107
0108 params.stimulation= stimulation;
0109 params.solve= @fwd_solve_1st_order;
0110 params.system_mat= @system_mat_1st_order;
0111 params.jacobian= @jacobian_adjoint;
0112 params.misc.perm_sym= '{n}';
0113 fm3d = eidors_obj('fwd_model', params);
0114
0115 inv3d.name= 'EIT inverse: 3D';
0116 inv3d.solve= @inv_solve_diff_GN_one_step;
0117 inv3d.hyperparameter.value = 1e-2;
0118 inv3d.jacobian_bkgnd.value= 1;
0119 inv3d.RtR_prior= 'prior_laplace';
0120 inv3d.reconst_type= 'difference';
0121 inv3d.fwd_model= fm3d;
0122 inv3d= eidors_obj('inv_model', inv3d);
0123
0124 img3= inv_solve( inv3d, inh_data, homg_data);
0125 img3.name= '3D inverse solution';
0126
0127 if ~exist('OCTAVE_VERSION')
0128 show_fem(img3);
0129 else
0130 show_slices(img3, [-.35:.2:.4]'*[inf,inf,1])
0131 end
0132