0001 function build_1d_model(spline_type, placement_type, objective_function)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 frame_counter = 0;
0067 n_images = 10;
0068
0069 n_iterations = 10;
0070
0071 n_sets = 1;
0072
0073
0074
0075 image_width = 50;
0076
0077 spline_type = 'multi_point';
0078
0079
0080 placement_type = 'grid';
0081 objective_function = 'msd_opt_together';
0082 verbose = 'off';
0083
0084 n_points = 5;
0085
0086
0087 do_plot = 1;
0088
0089
0090 white_ctr = 0;
0091
0092 ref_shift = 0.2;
0093
0094 max_shift = 0.2;
0095
0096 step = 0.1;
0097
0098 los = zeros(n_images,floor((max_shift-ref_shift)/step));
0099 his = zeros(n_images,floor((max_shift-ref_shift)/step));
0100
0101 blurred = 0;
0102
0103 spec_iters = 25;
0104
0105 gen_iters = 25;
0106
0107 min_error = 0;
0108 max_error = 1;
0109
0110 error_step = 0.1;
0111 n_error_steps = (max_error-min_error)/error_step;
0112
0113
0114
0115
0116 tic;
0117
0118 for this_set = 1:n_sets
0119
0120 tic;
0121
0122
0123
0124
0125 ['calculating set ', num2str(this_set)]
0126
0127 [imagelist images points his los] = make_1d_images(n_images, image_width, 0.2);
0128
0129
0130
0131
0132
0133
0134 points = -1 + 2*(points-1)/(image_width-1);
0135
0136 keep = 0.999999;
0137
0138 ref_points_vec = points(:,1);
0139 ref_image_vec = images(:,1);
0140
0141 ref_hi = his(1);
0142 ref_lo = los(1);
0143
0144
0145 if(do_plot)
0146 subplot_fig = figure;
0147 H=figure(subplot_fig);
0148 for i=1:n_images,
0149 subplot(n_images,2,(2*i)-1);
0150 plot(images(:,i)),title('Unwarped images');
0151 end
0152 end
0153
0154
0155
0156
0157
0158
0159 warped_images = images;
0160 warped_points = points;
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180 for n=1:n_iterations
0181
0182 disp(['iter ',num2str(n)]);
0183
0184
0185 for i=1:n_images
0186 disp(['Warping image ',num2str(i),' of ',num2str(n_images)]);
0187 image_vec = warped_images(:,i);
0188 points_vec = warped_points(:,i);
0189 if(strcmp(objective_function,'model_opt_together'))
0190 if(do_plot)
0191 frame_counter = frame_counter + 1;
0192 M(frame_counter) = getframe(H);
0193 [param_list, warped_point, warped_image, score] = optimise_all_warps_model([warped_images(:,1:i-1),warped_images(:,i+1:n_images)], [warped_points(:,1:i-1),warped_points(:,i+1:n_images)], image_vec, points_vec,spline_type,placement_type,n_points, verbose, do_plot, subplot_fig,i*2);
0194 else
0195 [param_list, warped_point, warped_image, score] = optimise_all_warps_model([warped_images(:,1:i-1),warped_images(:,i+1:n_images)], [warped_points(:,1:i-1),warped_points(:,i+1:n_images)], image_vec, points_vec,spline_type,placement_type,n_points, verbose, do_plot);
0196 end
0197 elseif(strcmp(objective_function,'model_opt_separate'))
0198 if(do_plot)
0199 frame_counter = frame_counter + 1;
0200 M(frame_counter) = getframe(H);
0201 [param_list, warped_point, warped_image, score] = optimise_warps_model([warped_images(:,1:i-1),warped_images(:,i+1:n_images)], [warped_points(:,1:i-1),warped_points(:,i+1:n_images)], image_vec, points_vec,spline_type,placement_type,n_points, verbose, do_plot, subplot_fig,i*2);
0202 else
0203 [param_list, warped_point, warped_image, score] = optimise_warps_model([warped_images(:,1:i-1),warped_images(:,i+1:n_images)], [warped_points(:,1:i-1),warped_points(:,i+1:n_images)], image_vec, points_vec,spline_type,placement_type,n_points, verbose, do_plot);
0204 end
0205 elseif(strcmp(objective_function,'msd_opt_together'))
0206 if(do_plot)
0207 frame_counter = frame_counter + 1;
0208 M(frame_counter) = getframe(H);
0209 [param_list, warped_point, warped_image, score] = optimise_all_warps_msd(ref_image_vec, ref_points_vec, image_vec, points_vec, spline_type, placement_type, n_points, verbose, do_plot, subplot_fig,i*2);
0210 else
0211 [param_list, warped_point, warped_image, score] = optimise_all_warps_msd(ref_image_vec, ref_points_vec, image_vec, points_vec, spline_type, placement_type, n_points, verbose, do_plot);
0212 end
0213 elseif(strcmp(objective_function,'msd_opt_separate'))
0214 if(do_plot)
0215 [param_list, warped_point, warped_image, score] = optimise_warps_msd(ref_image_vec, ref_points_vec, image_vec, points_vec, spline_type, placement_type, n_points, verbose, do_plot, subplot_fig,i*2);
0216 frame_counter = frame_counter + 1;
0217 M(frame_counter) = getframe(H);
0218 else
0219 [param_list, warped_point, warped_image, score] = optimise_warps_msd(ref_image_vec, ref_points_vec, image_vec, points_vec, spline_type, placement_type, n_points, verbose, do_plot);
0220 end
0221 else
0222 error(['Unknown objective function: ', objective_function]);
0223 end
0224
0225 warped_images(:,i) = warped_image;
0226 warped_points(:,i) = warped_point;
0227
0228
0229
0230 if(n==n_iterations),
0231 final_score(i, this_set) = score;
0232 end
0233 end
0234
0235
0236
0237
0238 end
0239
0240
0241
0242
0243
0244 w_c_model = build_model(warped_images, warped_points, keep,'Optimised warp', 'variance');
0245
0246
0247
0248
0249
0250
0251 fig_title = 'Automatically aligned: ';
0252
0253
0254
0255
0256 w_intensity_total_vars = w_c_model.intensity_model.total_var;
0257 w_shape_total_vars = w_c_model.shape_model.total_var;
0258
0259
0260
0261 model_score(this_set) = measure_model(w_c_model.variances, 20);
0262 msd_score(this_set) = measure_model_msd(warped_images);
0263 shape_modes(this_set) = w_c_model.n_shape_modes;
0264 intensity_modes(this_set) = size(w_c_model.intensity_model.pcs,2);
0265 shape_variance(this_set) = sum(w_c_model.shape_model.variances);
0266 intensity_variance(this_set) = sum(w_c_model.intensity_model.variances);
0267
0268 t = toc;
0269 disp(['Time for set ',num2str(this_set),': ',num2str(t)]);
0270 time(this_set)=t;
0271
0272
0273 end
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287 disp('Mean match score:');
0288 mean(final_score(:))
0289 disp('Std match score:');
0290 std(final_score(:))
0291
0292 disp('Mean model score:');
0293 mean(model_score(:))
0294 disp('Std model score:');
0295 std(model_score(:))
0296
0297 disp('Mean msd score:');
0298 mean(msd_score(:))
0299 disp('Std msd score:');
0300 std(msd_score(:))
0301
0302 disp('Mean shape modes:');
0303 mean(shape_modes(:))
0304 disp('Std shape modes:');
0305 std(shape_modes(:))
0306
0307 disp('Mean intensity modes:');
0308 mean(intensity_modes(:))
0309 disp('Std intensity modes:');
0310 std(intensity_modes(:))
0311
0312 disp('Mean shape variance:');
0313 mean(shape_variance(:))
0314 disp('Std shape variance:');
0315 std(shape_variance(:))
0316
0317 disp('Mean intensity variance:');
0318 mean(intensity_variance(:))
0319 disp('Std intensity variance:');
0320 std(intensity_variance(:))
0321
0322 disp('Mean time: ');
0323 mean(time(:))
0324 disp('Std time: ');
0325 std(time(:))
0326
0327 t = toc;
0328
0329 disp(['Total time: ',num2str(t)]);
0330
0331
0332 movie(M);
0333 movie2avi(M,'set10.avi');
0334
0335
0336
0337