0001 function [img_data, n_images]= get_img_data(img)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
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
0040 img_data{i}= [iied(:,1:gidi.frame_skip:end)];
0041 end
0042 catch
0043
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
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
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
0095
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
0105
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);