|
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
|
Introduction to dual modelsDual model systems use two models of the underlying system:
Figure: Schematic of a dual model based inverse problem Simulated dataFirst, simulate some data, based on a 576 element mesh
% Simulate data $Id: dual_model01.m 2162 2010-04-04 20:49:45Z aadler $
imdl= mk_common_model('c2c2',16);
img= mk_image(imdl);
vh=fwd_solve(img);
idx=[365,328,292,259,227,198,170,145,121];
img.elem_data([idx,idx+1,101,81])=1.1;
vi=fwd_solve(img);
show_fem(img);
print_convert('dual_model01a.png', '-density 60');
Figure: Simulation data Simple Example: Dual model using multi-element parametersNext, we compare two coarse meshes
% Simulate data $Id: dual_model02.m 4839 2015-03-30 07:44:50Z aadler $
% create base model
mdl_base=mk_common_model('a2c0',16);
mdl_base.RtR_prior = @prior_noser;
mdl_base.hyperparameter.value = .2;
elems= mdl_base.fwd_model.elems;
nodes= mdl_base.fwd_model.nodes;
e= size(elems,1);
for model = 1:3
if model==1
% Model 1: coarse==fine. each elem has a parameter
params= 1:e;
elseif model==2
% Model 2: coarse model, inner circle has one parameter
params= [1,1,1,1, 2:e-3];
elseif model==3
% Model 3: coarse model, top left slice has one parameter
params= 1:e;
params([4,8,15:16,23:24,34:36])= 0;
[jnk1,jnk2,params]= unique(params);
end
% Create inverse_model
imdl(model)= mdl_base;
imdl(model).fwd_model.coarse2fine = sparse(1:e,params,1,e,max(params));
subplot(2,3, model)
show_fem(imdl(model).fwd_model);
% Show parameter numbers
numeros= reshape(sprintf('%2d',params),2,e)';
xc=mean(reshape(nodes(elems,1),e,3),2);
yc=mean(reshape(nodes(elems,2),e,3),2);
text(xc,yc,numeros,'FontSize',8, ...
'HorizontalAlignment','center');
end
print_convert dual_model02a.png
Figure: Left "Fine" mesh (64 parameters) Middle Coarse mesh (61 parameters) Right Coarse mesh (56 parameters) Coarse to Fine MappingIf we consider a smaller model, where% fine_param_1 == coarse_param_1 % fine_param_2 == coarse_param_2 % fine_param_3 == coarse_param_3 % fine_param_4 == coarse_param_3Then the mapping from coarse to fine would be [ 1 0 0 ] [ coarse_param_1 ] [ fine_param_1 ] [ 0 1 0 ] [ coarse_param_2 ] = [ fine_param_2 ] [ 0 0 1 ] [ coarse_param_3 ] [ fine_param_3 ] [ 0 0 1 ] [ fine_param_4 ] Image Reconstructions% Simulate data $Id: dual_model03.m 2162 2010-04-04 20:49:45Z aadler $ for model= 1:3 img= inv_solve(imdl(model), vh, vi); subplot(2,3,model) show_fem(img); end print_convert dual_model03a.png;
Figure: Reconstructed images. Left "Fine" mesh (64 parameters) Middle Coarse mesh (61 parameters) Right Coarse mesh (56 parameters) Example #2: Fine and Coarse meshesWe consider a coarse mesh of 64 elements, and fine meshes of 64 (same as coarse), 256, and 576 elements
% create fine meshes $Id: dual_model04.m 4839 2015-03-30 07:44:50Z aadler $
% create base model
mdl_coarse=mk_common_model('a2c0',16);
for model = 1:3
if model==1
% Model 1: 64 elements
mdl_str= 'a2c0';
elseif model==2
% Model 2: 256 elements
mdl_str= 'b2c0';
elseif model==3
% Model 3: 576 elements
mdl_str= 'c2c0';
end
mdl_fine= mk_common_model(mdl_str,16);
mdl_fine.fwd_model.mk_coarse_fine_mapping.n_interp= 150;
mdl_fine.RtR_prior = @prior_noser;
mdl_fine.hyperparameter.value = .2;
imdl(model)= mdl_fine;
imdl(model).fwd_model.coarse2fine = ...
mk_coarse_fine_mapping( mdl_fine.fwd_model, mdl_coarse.fwd_model);
subplot(2,3, model)
show_fem(mdl_fine.fwd_model);
end
print_convert dual_model04a.png
Figure: Reconstructed images. Left "Fine" mesh (64 elements) Middle Fine mesh (256 elements) Right Fine mesh (576 elements) % Simulate data $Id: dual_model05.m 2162 2010-04-04 20:49:45Z aadler $ % Reconstruct for model= 1:3 img(model)= inv_solve(imdl(model), vh, vi); end % Show image mapped to fine model for model= 1:3 subplot(2,3,model) show_fem(img(model)); end print_convert dual_model05b.png; % Show image mapped to coarse model for model= 1:3 subplot(2,3,model) img(model).fwd_model = mdl_coarse.fwd_model; show_fem(img(model)); end print_convert dual_model05a.png;
Figure: Reconstructed images mapped onto the coarse model. Left "Fine" mesh (64 elements) Middle Fine mesh (256 elements) Right Fine mesh (576 elements)
Figure: Reconstructed images mapped onto the fine model. Left "Fine" mesh (64 elements) Middle Fine mesh (256 elements) Right Fine mesh (576 elements) |
Last Modified: $Date: 2017-02-28 13:12:08 -0500 (Tue, 28 Feb 2017) $ by $Author: aadler $