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
|
Gauss Newton solvers in 3DSimulation Model%Homogeneous and inclusion conductivity cond_h=1.0; cond_inc=2.0; cc.ref_level = cond_h; cc.clim = 0.6; cc.cb_shrink_move = [.3,.8,.00]; %3D forward model without inclusion mdl_h= ng_mk_cyl_models([1 .7],[16,.25,.75],[0.075,0.3]); e_idx = elec_rearrange([16,2],'square'); %Square electrode pattern mdl_h.electrode(e_idx) = mdl_h.electrode; %3D forward model with inclusion extra={'ball','solid ball = sphere(0.2,0.2,0.5;0.2);'}; mdl_i= ng_mk_cyl_models([1 .7],[16,.25,.75],[0.075,0.3],extra); mdl_i.electrode(e_idx) = mdl_i.electrode; %Stimulation patterns and add to models stim=mk_stim_patterns(32,1,[0,5],[0,5]); % skip 4 mdl_h.stimulation=stim; mdl_i.stimulation=stim; %Create two images img_h= mk_image(mdl_h,cond_h); img_i= mk_image(mdl_i,cond_h); img_i.elem_data(mdl_i.mat_idx{2}) = cond_inc; img_h.calc_colours = cc; img_i.calc_colours = cc; %Now get "real" voltages and add noise v_i=fwd_solve(img_i); v_i_n = add_noise( 20, v_i ); v_h=fwd_solve(img_h); %Plot actual and simulated voltage and show slice through 3D image %figure; hold on; plot(v_i.meas); plot(v_h.meas,'r'); hold off; clf; axes('position',[0.2,0.2,0.6,0.6]); show_3d_slices(img_i,0.6,0.3,0.3); view(-24,12); eidors_colourbar(img_i); print_convert compare_3D_abs_GN_01a.png show_fem_enhanced(img_i,[0,1]); print_convert compare_3D_abs_GN_01b.png Figure: Simulation model Reconstruction with GN solver%Inverse solution imdl = mk_common_model('b2c2',32); %generic mdl imdl.solve = @inv_solve_gn; %Default Gauss Newton solvers imdl.fwd_model = mdl_i; imdl.reconst_type = 'absolute'; imdl.jacobian_bkgnd.value= cond_h; imdl.inv_solve_gn.max_iterations = 3 ; %Number of iterations cb.cb_shrink_move = [0.5,0.8,0.00]; imdl.RtR_prior=@prior_noser; hp = 1e-2; imdl.hyperparameter.value = hp; img = inv_solve(imdl, v_i); img.calc_colours = cc; img_n = inv_solve(imdl, v_i_n); img_n.calc_colours = cc; clf; show_3d_slices(img,0.6,0.3,0.3); eidors_colourbar(img); print_convert compare_3D_abs_GN_02a.png '-density 75' clf; show_3d_slices(img_n,0.6,0.3,0.3); eidors_colourbar(img_n); print_convert compare_3D_abs_GN_02b.png '-density 75' %img.show_slices.levels = [inf,inf,.5,1,1;inf,inf,0.6,2,1]; show_slices(img); Figure: Left Data without noise Right Data with noise Reconstruction with GN solver with hyperparameter adjustment%Alternative Gauss Newton solver, changing prior at each iteration imdl.solve = @inv_solve_abs_GN_prior; imdl.hyperparameter.value = .01; img = inv_solve(imdl, v_i); img.calc_colours = cc; img_n = inv_solve(imdl, v_i_n); img_n.calc_colours = cc; vr_agn=fwd_solve(img); vr_agn_n=fwd_solve(img_n); clf; show_3d_slices(img,0.6,0.3,0.3); eidors_colourbar(img); print_convert compare_3D_abs_GN_03a.png '-density 75' clf; show_3d_slices(img_n,0.6,0.3,0.3); eidors_colourbar(setfield(img_n,'calc_colours',cb)); print_convert compare_3D_abs_GN_03b.png '-density 75' Figure: Left Data without noise Right Data with noise Reconstruction with constrained GN solver%Constrained Gauss Newton solver imdl.solve = @inv_solve_gn; imdl.hyperparameter.value = hp; % limit conductivity to be greater than 0 with a log parametrization imdl.inv_solve_gn.elem_working = 'log_conductivity'; img = inv_solve(imdl, v_i); img.calc_colours = cc; img_n = inv_solve(imdl, v_i_n); img_n.calc_colours = cc; clf; show_3d_slices(img, 0.6,0.3,0.3); eidors_colourbar(img); print_convert compare_3D_abs_GN_04a.png '-density 75' clf; show_3d_slices(img_n,0.6,0.3,0.3); eidors_colourbar(img_n); print_convert compare_3D_abs_GN_04b.png '-density 75' Figure: Left Data without noise Right Data with noise |
Last Modified: $Date: 2017-02-28 13:12:08 -0500 (Tue, 28 Feb 2017) $ by $Author: aadler $