36#include "hdrl_combine.h"
43#define ARRAY_LEN(a) sizeof((a))/sizeof((a)[0])
61 cpl_test_init(PACKAGE_BUGREPORT, CPL_MSG_WARNING);
64 cpl_image_delete(outimg); \
65 cpl_image_delete(outerr); \
66 cpl_image_delete(contrib); \
67 hdrl_collapse_imagelist_to_image_delete(method);
70 cpl_imagelist * data = cpl_imagelist_new();
71 cpl_imagelist * errs = cpl_imagelist_new();
72 cpl_image * img = cpl_image_new(40, 40, CPL_TYPE_DOUBLE);
73 cpl_image * err = cpl_image_new(40, 40, CPL_TYPE_DOUBLE);
74 cpl_image_add_scalar(img, 5.);
75 cpl_image_add_scalar(err, 2.);
79 cpl_image * expect_err = cpl_image_duplicate(err);
80 cpl_image_divide_scalar(expect_err, sqrt(nz));
81 cpl_image * expect_contrib = cpl_image_new(40, 40, CPL_TYPE_INT);
82 cpl_image_add_scalar(expect_contrib, 5);
83 for (
size_t i = 0; i < nz; i++) {
84 cpl_imagelist_set(data, cpl_image_duplicate(img), cpl_imagelist_get_size(data));
85 cpl_imagelist_set(errs, cpl_image_duplicate(err), cpl_imagelist_get_size(errs));
87 cpl_image * outimg, * outerr, * contrib;
91 hdrl_collapse_imagelist_to_image_t * method =
92 hdrl_collapse_imagelist_to_image_mean();
93 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, NULL);
94 cpl_test_error(CPL_ERROR_NULL_INPUT);
95 hdrl_imagelist_combine(data, errs, method, &outimg, NULL, &contrib);
96 cpl_test_error(CPL_ERROR_NULL_INPUT);
97 hdrl_imagelist_combine(data, errs, method, NULL, &outerr, &contrib);
98 cpl_test_error(CPL_ERROR_NULL_INPUT);
99 hdrl_imagelist_combine(data, errs, NULL, &outimg, &outerr, &contrib);
100 cpl_test_error(CPL_ERROR_NULL_INPUT);
101 hdrl_imagelist_combine(data, NULL, method, &outimg, &outerr, &contrib);
102 cpl_test_error(CPL_ERROR_NULL_INPUT);
103 hdrl_imagelist_combine(NULL, errs, method, &outimg, &outerr, &contrib);
104 cpl_test_error(CPL_ERROR_NULL_INPUT);
105 hdrl_collapse_imagelist_to_image_delete(method);
109 hdrl_collapse_imagelist_to_image_t * method =
110 hdrl_collapse_imagelist_to_image_mean();
111 cpl_imagelist * data2 = cpl_imagelist_duplicate(data);
112 cpl_imagelist * errs2;
113 cpl_image_delete(cpl_imagelist_unset(data2, 0));
114 hdrl_imagelist_combine(data2, errs, method, &outimg, &outerr, &contrib);
115 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
116 cpl_imagelist_delete(data2);
118 data2 = cpl_imagelist_new();
119 errs2 = cpl_imagelist_new();
120 hdrl_imagelist_combine(data2, errs2, method, &outimg, &outerr, &contrib);
121 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
122 cpl_imagelist_delete(data2);
123 cpl_imagelist_delete(errs2);
124 hdrl_collapse_imagelist_to_image_delete(method);
129 hdrl_collapse_imagelist_to_image_t * method =
130 hdrl_collapse_imagelist_to_image_mean();
131 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
133 cpl_test_image_abs(outimg, img, HDRL_EPS_DATA);
134 cpl_test_image_abs(outerr, expect_err, HDRL_EPS_ERROR);
135 cpl_test_image_abs(contrib, expect_contrib, 0);
139 method = hdrl_collapse_imagelist_to_image_sigclip(3., 3., 3);
140 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
142 cpl_test_image_abs(outimg, img, HDRL_EPS_DATA);
143 cpl_test_image_abs(outerr, expect_err, HDRL_EPS_ERROR);
144 cpl_test_image_abs(contrib, expect_contrib, 0);
148 method = hdrl_collapse_imagelist_to_image_minmax(0, 0);
149 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
151 cpl_test_image_abs(outimg, img, HDRL_EPS_DATA);
152 cpl_test_image_abs(outerr, expect_err, HDRL_EPS_ERROR);
153 cpl_test_image_abs(contrib, expect_contrib, 0);
157 method = hdrl_collapse_imagelist_to_image_weighted_mean();
158 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
160 cpl_test_image_abs(outimg, img, HDRL_EPS_DATA);
161 cpl_test_image_abs(outerr, expect_err, HDRL_EPS_ERROR);
162 cpl_test_image_abs(contrib, expect_contrib, 0);
166 cpl_image_multiply_scalar(expect_err, sqrt(CPL_MATH_PI_2));
167 method = hdrl_collapse_imagelist_to_image_median();
168 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
170 cpl_test_image_abs(outimg, img, HDRL_EPS_DATA);
171 cpl_test_image_abs(outerr, expect_err, HDRL_EPS_ERROR);
172 cpl_test_image_abs(contrib, expect_contrib, 0);
177 double v[] = {1, 2, 1, 3, 2};
178 double e[] = {0.5, 0.7, 0.1, 1.0, 0.01};
180 for (
size_t i = 0; i < nz; i++) {
181 cpl_image * tmp = cpl_imagelist_get(data, i);
182 cpl_image_set(tmp, 1, 1, v[i]);
183 tmp = cpl_imagelist_get(errs, i);
184 cpl_image_set(tmp, 1, 1, e[i]);
186 hdrl_collapse_imagelist_to_image_t * method =
187 hdrl_collapse_imagelist_to_image_mean();
188 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
189 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 1.8, HDRL_EPS_DATA);
190 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d), 0.26458269028793246, HDRL_EPS_ERROR);
191 cpl_test_image_abs(contrib, expect_contrib, 0);
194 method = hdrl_collapse_imagelist_to_image_sigclip(3., 3., 3);
195 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
197 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 1.8, HDRL_EPS_DATA);
198 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d), 0.26458269028793246, HDRL_EPS_ERROR);
199 cpl_test_image_abs(contrib, expect_contrib, 0);
202 method = hdrl_collapse_imagelist_to_image_minmax(1, 1);
203 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
205 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 5./3., HDRL_EPS_DATA);
213 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d),
214 sqrt(0.1 * 0.1 + 0.7 * 0.7 + 0.01 * 0.01) / 3.,
216 cpl_image * expect_contrib_minmax =
217 cpl_image_subtract_scalar_create(expect_contrib, 2);
218 cpl_test_image_abs(contrib, expect_contrib_minmax, 0);
219 cpl_image_delete(expect_contrib_minmax);
222 method = hdrl_collapse_imagelist_to_image_weighted_mean();
223 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
224 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 1.9898090843925733, HDRL_EPS_DATA);
225 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d), 0.0099469054598625289, HDRL_EPS_ERROR);
226 cpl_test_image_abs(contrib, expect_contrib, 0);
231 double v[] = {1, 2, 1, 3, 2};
232 double e[] = {0.5, 0.7, 0.1, 1.0, 0.01};
234 for (
size_t i = 0; i < nz; i++) {
235 cpl_image * tmp = cpl_imagelist_get(data, i);
236 cpl_image_set(tmp, 1, 1, v[i]);
238 cpl_image_reject(tmp, 1, 1);
240 tmp = cpl_imagelist_get(errs, i);
241 cpl_image_set(tmp, 1, 1, e[i]);
243 cpl_image_reject(tmp, 1, 1);
246 cpl_image_delete(expect_contrib);
247 expect_contrib = cpl_image_new_from_accepted(data);
249 hdrl_collapse_imagelist_to_image_t * method =
250 hdrl_collapse_imagelist_to_image_mean();
251 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
253 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 1.5, HDRL_EPS_DATA);
254 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d), 0.21652078422174625, HDRL_EPS_ERROR);
255 cpl_test_image_abs(contrib, expect_contrib, 0);
258 method = hdrl_collapse_imagelist_to_image_sigclip(3., 3., 3);
259 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
261 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 1.5, HDRL_EPS_DATA);
262 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d), 0.21652078422174625, HDRL_EPS_ERROR);
263 cpl_test_image_abs(contrib, expect_contrib, 0);
266 method = hdrl_collapse_imagelist_to_image_minmax(1, 1);
267 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
269 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 3./2., HDRL_EPS_DATA);
270 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d),
271 sqrt(0.01 * 0.01 + 0.1 * 0.1) / 2., HDRL_EPS_ERROR);
272 cpl_image * expect_contrib_minmax =
273 cpl_image_subtract_scalar_create(expect_contrib, 2);
274 cpl_test_image_abs(contrib, expect_contrib_minmax, 0);
275 cpl_image_delete(expect_contrib_minmax);
278 method = hdrl_collapse_imagelist_to_image_weighted_mean();
279 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
281 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 1.9897091252756485, HDRL_EPS_DATA);
282 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d), 0.0099473975744101273, HDRL_EPS_ERROR);
283 cpl_test_image_abs(contrib, expect_contrib, 0);
289 double v[] = {1, 2, 1, 3, 2};
290 double e[] = {1., 1., 1., 1., 1.};
292 for (
size_t i = 0; i < nz; i++) {
293 cpl_image * tmp = cpl_imagelist_get(data, i);
294 cpl_image_set(tmp, 1, 1, v[i]);
295 cpl_image_set(tmp, 2, 2, v[i]);
297 cpl_image_reject(tmp, 1, 1);
299 tmp = cpl_imagelist_get(errs, i);
300 cpl_image_set(tmp, 1, 1, e[i]);
301 cpl_image_set(tmp, 2, 2, e[i]);
303 cpl_image_reject(tmp, 1, 1);
306 cpl_image_delete(expect_contrib);
307 expect_contrib = cpl_image_new_from_accepted(data);
309 hdrl_collapse_imagelist_to_image_t * method =
310 hdrl_collapse_imagelist_to_image_median();
311 hdrl_imagelist_combine(data, errs, method, &outimg, &outerr, &contrib);
314 cpl_test_abs(cpl_image_get(outimg, 2, 2, &d), 2., HDRL_EPS_DATA);
315 cpl_test_abs(cpl_image_get(outerr, 2, 2, &d),
316 1. / sqrt(nz) * sqrt(CPL_MATH_PI_2), HDRL_EPS_ERROR);
318 cpl_test_abs(cpl_image_get(outimg, 1, 1, &d), 1.5, HDRL_EPS_DATA);
319 cpl_test_abs(cpl_image_get(outerr, 1, 1, &d), 1. / sqrt(2.), HDRL_EPS_ERROR);
320 cpl_test_image_abs(contrib, expect_contrib, 0);
324 cpl_imagelist_delete(data);
325 cpl_imagelist_delete(errs);
326 cpl_image_delete(expect_err);
327 cpl_image_delete(expect_contrib);
328 cpl_image_delete(img);
329 cpl_image_delete(err);
331 return cpl_test_end(0);