1 // This is core/vil/algo/tests/test_algo_cartesian_differential_invariants.cxx
2 #include <iostream>
3 #include <cmath>
4 #include <cassert>
5 #ifdef _MSC_VER
6 #  include "vcl_msvc_warnings.h"
7 #endif
8 #include "vil/vil_image_view.h"
9 #include "vil/vil_print.h"
10 #include <vil/algo/vil_cartesian_differential_invariants.h>
11 #include "testlib/testlib_test.h"
12 
13 static void
test_algo_cartesian_differential_invariants()14 test_algo_cartesian_differential_invariants()
15 {
16   std::cout << "*****************************************************\n"
17             << " Testing test_algo_cartesian_differential_invariants\n"
18             << "*****************************************************\n";
19 
20   constexpr unsigned n = 11;
21 
22   vil_image_view<float> src(n, n);
23   vil_image_view<float> dest, dest2;
24 
25   src.fill(0);
26   src(n / 2, n / 2) = 255;
27 
28   vil_cartesian_differential_invariants_3(src, dest, 1.0);
29   std::cout << "Source\n";
30   vil_print_all(std::cout, src);
31   std::cout << "Destination\n";
32   vil_print_all(std::cout, dest);
33   TEST("dest is correct size", dest.ni() == n && dest.nj() == n && dest.nplanes() == 8, true);
34 
35 
36   // I have visually compared impulse response function images from
37   // Kevin's original code, and my new code. They look the same.
38   // Kevin's code used point sampling to build the filters, whereas
39   // my code uses pixel integration sampling, so the results are not
40   // directly comparable.
41   // See cpp_above_matlab_comparing_cdi_code.png for impulse responses
42   // from VXL and matlab versions (VXL version on top).
43   // Not the lack of radial symmetry (especially in 4th, 5th, and 7th planes)
44   // are due to rounding error. They should be zero, and are actually small values that
45   // have been scaled up while saving to file.
46 
47   // The following is a regression test. The golden values are
48   // merely verified as above.
49 
50   const float golden_data[] = { 0.f,
51                                 0.f,
52                                 0.f,
53                                 0.f,
54                                 0.f,
55                                 0.f,
56                                 0.f,
57                                 0.f,
58                                 0.f,
59                                 0.f,
60                                 0.f,
61                                 0.f,
62                                 0.f,
63                                 0.f,
64                                 0.f,
65                                 0.f,
66                                 0.f,
67                                 0.f,
68                                 0.f,
69                                 0.f,
70                                 0.f,
71                                 0.f,
72                                 0.f,
73                                 0.f,
74                                 0.00261491f,
75                                 0.193499f,
76                                 2.37197f,
77                                 5.36639f,
78                                 2.37197f,
79                                 0.193499f,
80                                 0.00261491f,
81                                 0.f,
82                                 0.f,
83                                 0.f,
84                                 0.f,
85                                 0.193499f,
86                                 12.1514f,
87                                 120.676f,
88                                 242.613f,
89                                 120.676f,
90                                 12.1514f,
91                                 0.193499f,
92                                 0.f,
93                                 0.f,
94                                 0.f,
95                                 0.f,
96                                 2.37197f,
97                                 120.676f,
98                                 763.611f,
99                                 958.092f,
100                                 763.611f,
101                                 120.676f,
102                                 2.37197f,
103                                 0.f,
104                                 0.f,
105                                 0.f,
106                                 0.f,
107                                 5.36639f,
108                                 242.613f,
109                                 958.092f,
110                                 0.f,
111                                 958.092f,
112                                 242.613f,
113                                 5.36639f,
114                                 0.f,
115                                 0.f,
116                                 0.f,
117                                 0.f,
118                                 2.37197f,
119                                 120.676f,
120                                 763.611f,
121                                 958.092f,
122                                 763.611f,
123                                 120.676f,
124                                 2.37197f,
125                                 0.f,
126                                 0.f,
127                                 0.f,
128                                 0.f,
129                                 0.193499f,
130                                 12.1514f,
131                                 120.676f,
132                                 242.613f,
133                                 120.676f,
134                                 12.1514f,
135                                 0.193499f,
136                                 0.f,
137                                 0.f,
138                                 0.f,
139                                 0.f,
140                                 0.00261491f,
141                                 0.193499f,
142                                 2.37197f,
143                                 5.36639f,
144                                 2.37197f,
145                                 0.193499f,
146                                 0.00261491f,
147                                 0.f,
148                                 0.f,
149                                 0.f,
150                                 0.f,
151                                 0.f,
152                                 0.f,
153                                 0.f,
154                                 0.f,
155                                 0.f,
156                                 0.f,
157                                 0.f,
158                                 0.f,
159                                 0.f,
160                                 0.f,
161                                 0.f,
162                                 0.f,
163                                 0.f,
164                                 0.f,
165                                 0.f,
166                                 0.f,
167                                 0.f,
168                                 0.f,
169                                 0.f,
170                                 0.f,
171 
172                                 0.f,
173                                 0.f,
174                                 0.f,
175                                 0.f,
176                                 0.f,
177                                 0.f,
178                                 0.f,
179                                 0.f,
180                                 0.f,
181                                 0.f,
182                                 0.f,
183                                 0.f,
184                                 0.f,
185                                 0.f,
186                                 0.f,
187                                 0.f,
188                                 0.f,
189                                 0.f,
190                                 0.f,
191                                 0.f,
192                                 0.f,
193                                 0.f,
194                                 0.f,
195                                 0.f,
196                                 0.000585776f,
197                                 0.2993f,
198                                 9.67222f,
199                                 27.7197f,
200                                 9.67222f,
201                                 0.2993f,
202                                 0.000585776f,
203                                 0.f,
204                                 0.f,
205                                 0.f,
206                                 0.f,
207                                 0.2993f,
208                                 115.43f,
209                                 2395.66f,
210                                 4625.15f,
211                                 2395.66f,
212                                 115.43f,
213                                 0.2993f,
214                                 0.f,
215                                 0.f,
216                                 0.f,
217                                 0.f,
218                                 9.67222f,
219                                 2395.66f,
220                                 18433.9f,
221                                 -2214.75f,
222                                 18433.9f,
223                                 2395.66f,
224                                 9.67222f,
225                                 0.f,
226                                 0.f,
227                                 0.f,
228                                 0.f,
229                                 27.7197f,
230                                 4625.15f,
231                                 -2214.75f,
232                                 0.f,
233                                 -2214.75f,
234                                 4625.15f,
235                                 27.7197f,
236                                 0.f,
237                                 0.f,
238                                 0.f,
239                                 0.f,
240                                 9.67222f,
241                                 2395.66f,
242                                 18433.9f,
243                                 -2214.75f,
244                                 18433.9f,
245                                 2395.66f,
246                                 9.67222f,
247                                 0.f,
248                                 0.f,
249                                 0.f,
250                                 0.f,
251                                 0.2993f,
252                                 115.43f,
253                                 2395.66f,
254                                 4625.15f,
255                                 2395.66f,
256                                 115.43f,
257                                 0.2993f,
258                                 0.f,
259                                 0.f,
260                                 0.f,
261                                 0.f,
262                                 0.000585776f,
263                                 0.2993f,
264                                 9.67222f,
265                                 27.7197f,
266                                 9.67222f,
267                                 0.2993f,
268                                 0.000585776f,
269                                 0.f,
270                                 0.f,
271                                 0.f,
272                                 0.f,
273                                 0.f,
274                                 0.f,
275                                 0.f,
276                                 0.f,
277                                 0.f,
278                                 0.f,
279                                 0.f,
280                                 0.f,
281                                 0.f,
282                                 0.f,
283                                 0.f,
284                                 0.f,
285                                 0.f,
286                                 0.f,
287                                 0.f,
288                                 0.f,
289                                 0.f,
290                                 0.f,
291                                 0.f,
292                                 0.f,
293 
294                                 0.f,
295                                 0.f,
296                                 0.f,
297                                 0.f,
298                                 0.f,
299                                 0.f,
300                                 0.f,
301                                 0.f,
302                                 0.f,
303                                 0.f,
304                                 0.f,
305                                 0.f,
306                                 0.f,
307                                 0.f,
308                                 0.f,
309                                 0.f,
310                                 0.f,
311                                 0.f,
312                                 0.f,
313                                 0.f,
314                                 0.f,
315                                 0.f,
316                                 0.f,
317                                 0.f,
318                                 -0.000164114f,
319                                 -0.0835501f,
320                                 -2.02331f,
321                                 -3.73664f,
322                                 -2.02331f,
323                                 -0.0835501f,
324                                 -0.000164114f,
325                                 0.f,
326                                 0.f,
327                                 0.f,
328                                 0.f,
329                                 -0.0835501f,
330                                 -42.1126f,
331                                 -987.525f,
332                                 -1712.7f,
333                                 -987.525f,
334                                 -42.1126f,
335                                 -0.0835501f,
336                                 0.f,
337                                 0.f,
338                                 0.f,
339                                 0.f,
340                                 -2.02331f,
341                                 -987.525f,
342                                 -20662.6f,
343                                 -26980.6f,
344                                 -20662.6f,
345                                 -987.525f,
346                                 -2.02331f,
347                                 0.f,
348                                 0.f,
349                                 0.f,
350                                 0.f,
351                                 -3.73664f,
352                                 -1712.7f,
353                                 -26980.6f,
354                                 0.f,
355                                 -26980.6f,
356                                 -1712.7f,
357                                 -3.73664f,
358                                 0.f,
359                                 0.f,
360                                 0.f,
361                                 0.f,
362                                 -2.02331f,
363                                 -987.525f,
364                                 -20662.6f,
365                                 -26980.6f,
366                                 -20662.6f,
367                                 -987.525f,
368                                 -2.02331f,
369                                 0.f,
370                                 0.f,
371                                 0.f,
372                                 0.f,
373                                 -0.0835501f,
374                                 -42.1126f,
375                                 -987.525f,
376                                 -1712.7f,
377                                 -987.525f,
378                                 -42.1126f,
379                                 -0.0835501f,
380                                 0.f,
381                                 0.f,
382                                 0.f,
383                                 0.f,
384                                 -0.000164114f,
385                                 -0.0835501f,
386                                 -2.02331f,
387                                 -3.73664f,
388                                 -2.02331f,
389                                 -0.0835501f,
390                                 -0.000164114f,
391                                 0.f,
392                                 0.f,
393                                 0.f,
394                                 0.f,
395                                 0.f,
396                                 0.f,
397                                 0.f,
398                                 0.f,
399                                 0.f,
400                                 0.f,
401                                 0.f,
402                                 0.f,
403                                 0.f,
404                                 0.f,
405                                 0.f,
406                                 0.f,
407                                 0.f,
408                                 0.f,
409                                 0.f,
410                                 0.f,
411                                 0.f,
412                                 0.f,
413                                 0.f,
414                                 0.f,
415 
416                                 0.f,
417                                 0.f,
418                                 0.f,
419                                 0.f,
420                                 0.f,
421                                 0.f,
422                                 0.f,
423                                 0.f,
424                                 0.f,
425                                 0.f,
426                                 0.f,
427                                 0.f,
428                                 0.f,
429                                 0.f,
430                                 0.f,
431                                 0.f,
432                                 0.f,
433                                 0.f,
434                                 0.f,
435                                 0.f,
436                                 0.f,
437                                 0.f,
438                                 0.f,
439                                 0.f,
440                                 2.05217e-011f,
441                                 0.0262445f,
442                                 1.32065f,
443                                 0.f,
444                                 -1.32065f,
445                                 -0.0262445f,
446                                 -2.05217e-011f,
447                                 0.f,
448                                 0.f,
449                                 0.f,
450                                 0.f,
451                                 -0.0262445f,
452                                 6.72063e-006f,
453                                 339.152f,
454                                 0.f,
455                                 -339.152f,
456                                 -6.72063e-006f,
457                                 0.0262445f,
458                                 0.f,
459                                 0.f,
460                                 0.f,
461                                 0.f,
462                                 -1.32065f,
463                                 -339.152f,
464                                 -0.00219401f,
465                                 0.f,
466                                 0.00219401f,
467                                 339.152f,
468                                 1.32065f,
469                                 0.f,
470                                 0.f,
471                                 0.f,
472                                 0.f,
473                                 0.f,
474                                 0.f,
475                                 0.f,
476                                 0.f,
477                                 0.f,
478                                 0.f,
479                                 0.f,
480                                 0.f,
481                                 0.f,
482                                 0.f,
483                                 0.f,
484                                 1.32065f,
485                                 339.152f,
486                                 0.00219401f,
487                                 0.f,
488                                 -0.00219401f,
489                                 -339.152f,
490                                 -1.32065f,
491                                 0.f,
492                                 0.f,
493                                 0.f,
494                                 0.f,
495                                 0.0262445f,
496                                 -6.72063e-006f,
497                                 -339.152f,
498                                 0.f,
499                                 339.152f,
500                                 6.72063e-006f,
501                                 -0.0262445f,
502                                 0.f,
503                                 0.f,
504                                 0.f,
505                                 0.f,
506                                 -2.05217e-011f,
507                                 -0.0262445f,
508                                 -1.32065f,
509                                 0.f,
510                                 1.32065f,
511                                 0.0262445f,
512                                 2.05217e-011f,
513                                 0.f,
514                                 0.f,
515                                 0.f,
516                                 0.f,
517                                 0.f,
518                                 0.f,
519                                 0.f,
520                                 0.f,
521                                 0.f,
522                                 0.f,
523                                 0.f,
524                                 0.f,
525                                 0.f,
526                                 0.f,
527                                 0.f,
528                                 0.f,
529                                 0.f,
530                                 0.f,
531                                 0.f,
532                                 0.f,
533                                 0.f,
534                                 0.f,
535                                 0.f,
536                                 0.f,
537 
538                                 0.f,
539                                 0.f,
540                                 0.f,
541                                 0.f,
542                                 0.f,
543                                 0.f,
544                                 0.f,
545                                 0.f,
546                                 0.f,
547                                 0.f,
548                                 0.f,
549                                 0.f,
550                                 0.f,
551                                 0.f,
552                                 0.f,
553                                 0.f,
554                                 0.f,
555                                 0.f,
556                                 0.f,
557                                 0.f,
558                                 0.f,
559                                 0.f,
560                                 0.f,
561                                 0.f,
562                                 0.f,
563                                 0.0123648f,
564                                 2.47208f,
565                                 0.f,
566                                 -2.47208f,
567                                 -0.0123648f,
568                                 0.f,
569                                 0.f,
570                                 0.f,
571                                 0.f,
572                                 0.f,
573                                 -0.0123648f,
574                                 -1.2593e-005f,
575                                 6425.73f,
576                                 0.f,
577                                 -6425.73f,
578                                 1.2593e-005f,
579                                 0.0123648f,
580                                 0.f,
581                                 0.f,
582                                 0.f,
583                                 0.f,
584                                 -2.47208f,
585                                 -6425.73f,
586                                 0.0353556f,
587                                 0.f,
588                                 -0.0353556f,
589                                 6425.73f,
590                                 2.47208f,
591                                 0.f,
592                                 0.f,
593                                 0.f,
594                                 0.f,
595                                 0.f,
596                                 0.f,
597                                 0.f,
598                                 0.f,
599                                 0.f,
600                                 0.f,
601                                 0.f,
602                                 0.f,
603                                 0.f,
604                                 0.f,
605                                 0.f,
606                                 2.47208f,
607                                 6425.73f,
608                                 -0.0353556f,
609                                 0.f,
610                                 0.0353556f,
611                                 -6425.73f,
612                                 -2.47208f,
613                                 0.f,
614                                 0.f,
615                                 0.f,
616                                 0.f,
617                                 0.0123648f,
618                                 1.2593e-005f,
619                                 -6425.73f,
620                                 0.f,
621                                 6425.73f,
622                                 -1.2593e-005f,
623                                 -0.0123648f,
624                                 0.f,
625                                 0.f,
626                                 0.f,
627                                 0.f,
628                                 0.f,
629                                 -0.0123648f,
630                                 -2.47208f,
631                                 0.f,
632                                 2.47208f,
633                                 0.0123648f,
634                                 0.f,
635                                 0.f,
636                                 0.f,
637                                 0.f,
638                                 0.f,
639                                 0.f,
640                                 0.f,
641                                 0.f,
642                                 0.f,
643                                 0.f,
644                                 0.f,
645                                 0.f,
646                                 0.f,
647                                 0.f,
648                                 0.f,
649                                 0.f,
650                                 0.f,
651                                 0.f,
652                                 0.f,
653                                 0.f,
654                                 0.f,
655                                 0.f,
656                                 0.f,
657                                 0.f,
658                                 0.f,
659 
660                                 0.f,
661                                 0.f,
662                                 0.f,
663                                 0.f,
664                                 0.f,
665                                 0.f,
666                                 0.f,
667                                 0.f,
668                                 0.f,
669                                 0.f,
670                                 0.f,
671                                 0.f,
672                                 0.f,
673                                 0.f,
674                                 0.f,
675                                 0.f,
676                                 0.f,
677                                 0.f,
678                                 0.f,
679                                 0.f,
680                                 0.f,
681                                 0.f,
682                                 0.f,
683                                 0.f,
684                                 -2.39812e-005f,
685                                 -0.0894585f,
686                                 -8.45908f,
687                                 -34.3258f,
688                                 -8.45908f,
689                                 -0.0894585f,
690                                 -2.39812e-005f,
691                                 0.f,
692                                 0.f,
693                                 0.f,
694                                 0.f,
695                                 -0.0894584f,
696                                 -250.537f,
697                                 -17086.f,
698                                 -70159.f,
699                                 -17086.f,
700                                 -250.537f,
701                                 -0.0894584f,
702                                 0.f,
703                                 0.f,
704                                 0.f,
705                                 0.f,
706                                 -8.45908f,
707                                 -17086.f,
708                                 -366049.f,
709                                 -1.09413e+006f,
710                                 -366049.f,
711                                 -17086.f,
712                                 -8.45908f,
713                                 0.f,
714                                 0.f,
715                                 0.f,
716                                 0.f,
717                                 -34.3257f,
718                                 -70159.f,
719                                 -1.09413e+006f,
720                                 0.f,
721                                 -1.09413e+006f,
722                                 -70159.f,
723                                 -34.3257f,
724                                 0.f,
725                                 0.f,
726                                 0.f,
727                                 0.f,
728                                 -8.45908f,
729                                 -17086.f,
730                                 -366049.f,
731                                 -1.09413e+006f,
732                                 -366049.f,
733                                 -17086.f,
734                                 -8.45908f,
735                                 0.f,
736                                 0.f,
737                                 0.f,
738                                 0.f,
739                                 -0.0894584f,
740                                 -250.537f,
741                                 -17086.f,
742                                 -70159.f,
743                                 -17086.f,
744                                 -250.537f,
745                                 -0.0894584f,
746                                 0.f,
747                                 0.f,
748                                 0.f,
749                                 0.f,
750                                 -2.39812e-005f,
751                                 -0.0894585f,
752                                 -8.45908f,
753                                 -34.3258f,
754                                 -8.45908f,
755                                 -0.0894585f,
756                                 -2.39812e-005f,
757                                 0.f,
758                                 0.f,
759                                 0.f,
760                                 0.f,
761                                 0.f,
762                                 0.f,
763                                 0.f,
764                                 0.f,
765                                 0.f,
766                                 0.f,
767                                 0.f,
768                                 0.f,
769                                 0.f,
770                                 0.f,
771                                 0.f,
772                                 0.f,
773                                 0.f,
774                                 0.f,
775                                 0.f,
776                                 0.f,
777                                 0.f,
778                                 0.f,
779                                 0.f,
780                                 0.f,
781 
782                                 0.f,
783                                 0.f,
784                                 0.f,
785                                 0.f,
786                                 0.f,
787                                 0.f,
788                                 0.f,
789                                 0.f,
790                                 0.f,
791                                 0.f,
792                                 0.f,
793                                 0.f,
794                                 0.f,
795                                 0.f,
796                                 0.f,
797                                 0.f,
798                                 0.f,
799                                 0.f,
800                                 0.f,
801                                 0.f,
802                                 0.f,
803                                 0.f,
804                                 0.f,
805                                 0.f,
806                                 3.38813e-021f,
807                                 0.0500808f,
808                                 7.17904f,
809                                 0.f,
810                                 -7.17904f,
811                                 -0.0500808f,
812                                 -3.38813e-021f,
813                                 0.f,
814                                 0.f,
815                                 0.f,
816                                 0.f,
817                                 -0.0500808f,
818                                 4.8993e-005f,
819                                 6000.63f,
820                                 0.f,
821                                 -6000.63f,
822                                 -4.8993e-005f,
823                                 0.0500808f,
824                                 0.f,
825                                 0.f,
826                                 0.f,
827                                 0.f,
828                                 -7.17904f,
829                                 -6000.63f,
830                                 -0.0113272f,
831                                 0.f,
832                                 0.0113272f,
833                                 6000.63f,
834                                 7.17904f,
835                                 0.f,
836                                 0.f,
837                                 0.f,
838                                 0.f,
839                                 0.f,
840                                 0.f,
841                                 0.f,
842                                 0.f,
843                                 0.f,
844                                 0.f,
845                                 0.f,
846                                 0.f,
847                                 0.f,
848                                 0.f,
849                                 0.f,
850                                 7.17904f,
851                                 6000.63f,
852                                 0.0113272f,
853                                 0.f,
854                                 -0.0113272f,
855                                 -6000.63f,
856                                 -7.17904f,
857                                 0.f,
858                                 0.f,
859                                 0.f,
860                                 0.f,
861                                 0.0500808f,
862                                 -4.8993e-005f,
863                                 -6000.63f,
864                                 0.f,
865                                 6000.63f,
866                                 4.8993e-005f,
867                                 -0.0500808f,
868                                 0.f,
869                                 0.f,
870                                 0.f,
871                                 0.f,
872                                 -3.38813e-021f,
873                                 -0.0500808f,
874                                 -7.17904f,
875                                 0.f,
876                                 7.17904f,
877                                 0.0500808f,
878                                 3.38813e-021f,
879                                 0.f,
880                                 0.f,
881                                 0.f,
882                                 0.f,
883                                 0.f,
884                                 0.f,
885                                 0.f,
886                                 0.f,
887                                 0.f,
888                                 0.f,
889                                 0.f,
890                                 0.f,
891                                 0.f,
892                                 0.f,
893                                 0.f,
894                                 0.f,
895                                 0.f,
896                                 0.f,
897                                 0.f,
898                                 0.f,
899                                 0.f,
900                                 0.f,
901                                 0.f,
902                                 0.f,
903 
904                                 0.f,
905                                 0.f,
906                                 0.f,
907                                 0.f,
908                                 0.f,
909                                 0.f,
910                                 0.f,
911                                 0.f,
912                                 0.f,
913                                 0.f,
914                                 0.f,
915                                 0.f,
916                                 0.f,
917                                 0.f,
918                                 0.f,
919                                 0.f,
920                                 0.f,
921                                 0.f,
922                                 0.f,
923                                 0.f,
924                                 0.f,
925                                 0.f,
926                                 0.f,
927                                 0.f,
928                                 0.000187632f,
929                                 0.894689f,
930                                 60.6675f,
931                                 52.6394f,
932                                 86.8583f,
933                                 2.0444f,
934                                 0.000731781f,
935                                 0.f,
936                                 0.f,
937                                 0.f,
938                                 0.f,
939                                 0.60726f,
940                                 2125.88f,
941                                 84466.9f,
942                                 -10280.9f,
943                                 127906.f,
944                                 4977.58f,
945                                 2.33183f,
946                                 0.f,
947                                 0.f,
948                                 0.f,
949                                 0.f,
950                                 34.4766f,
951                                 62747.2f,
952                                 -736888.f,
953                                 -1.24231e+006f,
954                                 -908045.f,
955                                 149626.f,
956                                 113.049f,
957                                 0.f,
958                                 0.f,
959                                 0.f,
960                                 0.f,
961                                 52.6394f,
962                                 -10280.9f,
963                                 -1.24231e+006f,
964                                 0.f,
965                                 -1.24231e+006f,
966                                 -10280.9f,
967                                 52.6394f,
968                                 0.f,
969                                 0.f,
970                                 0.f,
971                                 0.f,
972                                 34.4766f,
973                                 62747.2f,
974                                 -736888.f,
975                                 -1.24231e+006f,
976                                 -908045.f,
977                                 149626.f,
978                                 113.049f,
979                                 0.f,
980                                 0.f,
981                                 0.f,
982                                 0.f,
983                                 0.60726f,
984                                 2125.88f,
985                                 84466.9f,
986                                 -10280.9f,
987                                 127906.f,
988                                 4977.58f,
989                                 2.33183f,
990                                 0.f,
991                                 0.f,
992                                 0.f,
993                                 0.f,
994                                 0.000187632f,
995                                 0.894689f,
996                                 60.6675f,
997                                 52.6394f,
998                                 86.8583f,
999                                 2.0444f,
1000                                 0.000731781f,
1001                                 0.f,
1002                                 0.f,
1003                                 0.f,
1004                                 0.f,
1005                                 0.f,
1006                                 0.f,
1007                                 0.f,
1008                                 0.f,
1009                                 0.f,
1010                                 0.f,
1011                                 0.f,
1012                                 0.f,
1013                                 0.f,
1014                                 0.f,
1015                                 0.f,
1016                                 0.f,
1017                                 0.f,
1018                                 0.f,
1019                                 0.f,
1020                                 0.f,
1021                                 0.f,
1022                                 0.f,
1023                                 0.f,
1024                                 0.f };
1025 
1026   assert(dest.is_contiguous());
1027   assert(dest.istep() == 1);
1028   const float *p_dest = dest.begin(), *p_golden = golden_data;
1029   unsigned i;
1030   for (i = 0; i < dest.size(); ++i)
1031   {
1032     if (std::fabs(*p_dest - *p_golden) > std::fabs(*p_golden) * 1e-6)
1033     {
1034       std::cout << "Found excess value at pixel " << i << std::endl;
1035       break;
1036     }
1037   }
1038   TEST("impulse response matches golden data", i, dest.size());
1039 
1040 
1041   // Test invariant properties
1042 
1043   src.fill(0.f);
1044   src(n / 2, n / 2) = 256.f;
1045   src(n / 2 - 1, n / 2) = 128.f;
1046   src(n / 2 + 1, n / 2) = 512.f;
1047   vil_cartesian_differential_invariants_3(src, dest, 1.0);
1048   src.fill(0.f);
1049   src(n / 2, n / 2) = 256.f;
1050   src(n / 2, n / 2 - 1) = 128.f;
1051   src(n / 2, n / 2 + 1) = 512.f;
1052   vil_cartesian_differential_invariants_3(src, dest2, 1.0);
1053   for (unsigned i = 0; i < 8; ++i)
1054     TEST_NEAR("cartesian invariance",
1055               dest2(n / 2, n / 2, i),
1056               dest2(n / 2, n / 2, i),
1057               std::fabs(dest2(n / 2, n / 2, i) * 1.e-4f));
1058 }
1059 
1060 TESTMAIN(test_algo_cartesian_differential_invariants);
1061