get_img_data

PURPOSE ^

GET_IMG_DATA: get parameter data from eidors image object

SYNOPSIS ^

function [img_data, n_images]= get_img_data(img)

DESCRIPTION ^

 GET_IMG_DATA: get parameter data from eidors image object
 [img_data, n_images]= get_img_data(img)
 img_data - img parameter data mapped onto chosen mesh
   get_img_data looks at the elem_data or node_data
   parameters in the image. If a course2fine parameter
   exists in img.fwd_model, then it is used. 
 img.get_img_data.frame_select: Show these frames
 img.get_img_data.frame_skip: Skip frames

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [img_data, n_images]= get_img_data(img)
0002 % GET_IMG_DATA: get parameter data from eidors image object
0003 % [img_data, n_images]= get_img_data(img)
0004 % img_data - img parameter data mapped onto chosen mesh
0005 %   get_img_data looks at the elem_data or node_data
0006 %   parameters in the image. If a course2fine parameter
0007 %   exists in img.fwd_model, then it is used.
0008 % img.get_img_data.frame_select: Show these frames
0009 % img.get_img_data.frame_skip: Skip frames
0010 
0011 % (C) 2008 Andy Adler. License: GPL version 2 or version 3
0012 % $Id: get_img_data.m 6607 2023-06-01 11:06:55Z aadler $
0013 
0014 % TODO
0015 % FLAGS: flag = 0 (default)
0016 %    get data mapped onto elems in the fwd_model
0017 %if nargin==1; flag=0; end
0018 
0019 % TEST
0020 if ischar(img) && strcmp(img,'UNIT_TEST'); do_unit_test; return; end
0021 
0022 if ~strcmp( img(1).type, 'image' );
0023     error('get_img_data expects an image type object');
0024     return;
0025 end
0026 
0027 if ~isfield(img,'elem_data') && ~isfield(img,'node_data')
0028    img = data_mapper(img);
0029 end
0030 
0031 if isfield(img(1),'elem_data')
0032    for i=1:length(img(:))
0033       try 
0034          gidi = img(i).get_img_data;
0035          iied = img(i).elem_data;
0036          if isfield(gidi,'frame_select')
0037             img_data{i}= [iied(:,gidi.frame_select)];
0038          else
0039 % try a frame_skip
0040             img_data{i}= [iied(:,1:gidi.frame_skip:end)];
0041          end
0042       catch
0043          % concatenate img.elem_data for each img
0044          img_data{i}= [img(i).elem_data];
0045       end
0046    end
0047    img_data = [img_data{:}];
0048 elseif isfield(img,'node_data')
0049    for i=1:length(img(:))
0050       try 
0051          gidi = img(i).get_img_data;
0052          iind = img(i).node_data;
0053          if isfield(gidi,'frame_select')
0054             img_data{i}= [iind(:,gidi.frame_select)];
0055          else
0056 % try a frame_skip
0057             img_data{i}= [iind(:,1:gidi.frame_skip:end)];
0058          end
0059       catch
0060          img_data{i}= [img(i).node_data];
0061       end
0062    end
0063    img_data = [img_data{:}];
0064 else
0065    error('No field elem_data or node_data found on img');
0066 end
0067 
0068 if size(img_data,1)==1; img_data=img_data';end
0069 
0070 n_images= size(img_data,2);
0071 
0072 try
0073    c2f= img.fwd_model.coarse2fine;
0074 catch
0075    return;
0076 end
0077 
0078 if size(img_data,1)==size(c2f,2)
0079    img_data=c2f * img_data;
0080 end
0081 
0082 % TESTS:
0083 function do_unit_test
0084    img=calc_jacobian_bkgnd(mk_common_model('a2c0',8)); 
0085    unit_test_cmp('elem_01', get_img_data(img), ones(64,1) )
0086 
0087    imgk = img; imgk.elem_data = img.elem_data';
0088    unit_test_cmp('elem_02', get_img_data(imgk), ones(64,1) )
0089 
0090 
0091    imgk = img; imgk(2) = img;
0092    unit_test_cmp('elem_03', get_img_data(imgk), ones(64,2) )
0093 
0094    % EXPECTED FAIL
0095    % imgk(2).elem_data = imgk(2).elem_data';
0096 
0097    imgk(1).elem_data = imgk(1).elem_data*[1,2];
0098    unit_test_cmp('elem_04', get_img_data(imgk(1)), ones(64,1)*[1,2] )
0099    unit_test_cmp('elem_05', get_img_data(imgk), ones(64,1)*[1,2,1] )
0100 
0101    imgk = img; imgk.elem_data = img.elem_data*[1,2];
0102    imgk.get_img_data.frame_select = 2;
0103    unit_test_cmp('elem_06', get_img_data(imgk), 2*ones(64,1) )
0104    % TODO: This fails because we need a loop in the test function.
0105    %   Lookup whether this can be vectorized in matlab
0106 
0107    imgk(2) = imgk(1); imgk(2).elem_data = img.elem_data*[3,4];
0108    imgk(2).get_img_data.frame_select = 2;
0109    unit_test_cmp('elem_07', get_img_data(imgk), ones(64,1)*[2,4] )
0110    imgk(2).get_img_data.frame_select = 1:2;
0111    unit_test_cmp('elem_08', get_img_data(imgk), ones(64,1)*[2,3,4] )
0112 
0113    nd =ones(num_nodes(img),1);
0114    imgn = rmfield(img,'elem_data'); imgn.node_data=nd;
0115    unit_test_cmp('node_01', get_img_data(imgn), nd)
0116 
0117    imgn.node_data = nd*[3,4,5];
0118    unit_test_cmp('node_02', get_img_data(imgn), nd*[3,4,5]);
0119    imgn(2) = imgn;
0120    unit_test_cmp('node_03', get_img_data(imgn), nd*[3,4,5,3,4,5]);
0121    imgn(1).get_img_data.frame_select = 1;
0122    unit_test_cmp('node_04', get_img_data(imgn), nd*[3,3,4,5]);
0123    imgn(2).get_img_data.frame_select = 3;
0124    unit_test_cmp('node_05', get_img_data(imgn), nd*[3,5]);
0125    
0126 
0127    i2 = mk_common_model('b2c0',8); fmdl2= i2.fwd_model;
0128    c2f = mk_coarse_fine_mapping(fmdl2, img.fwd_model);

Generated on Sun 29-Dec-2024 11:41:59 by m2html © 2005