1 package de.desy.acop.video.analysis;
2
3 import de.desy.acop.video.Definitions;
4 import de.desy.tine.structUtils.TTaggedStructure;
5 import de.desy.tine.types.IMAGE;
6
7
8
9
10
11
12
13
14
15
16
17
18 public class AImage extends TTaggedStructure {
19
20 private final IMAGE[] image = new IMAGE[1];
21 private final int[] imageW = new int[1];
22 private final int[] imageH = new int[1];
23 private final int[] roiX = new int[1];
24 private final int[] roiY = new int[1];
25 private final int[] roiW = new int[1];
26 private final int[] roiH = new int[1];
27 private final int[] roi2X = new int[1];
28 private final int[] roi2Y = new int[1];
29 private final int[] roi2W = new int[1];
30 private final int[] roi2H = new int[1];
31 private final int[] thresholdPoints = new int[1];
32 private final double[] threshold = new double[1];
33 private final double[] sideViewX = new double[Definitions.MAX_WIDTH];
34 private final double[] sideViewY = new double[Definitions.MAX_HEIGHT];
35 private final double[] sideViewAmplitudeX = new double[1];
36 private final double[] sideViewAmplitudeY = new double[1];
37 private final double[] sideViewConstX = new double[1];
38 private final double[] sideViewConstY = new double[1];
39 private final double[] stdX = new double[1];
40 private final double[] stdY = new double[1];
41 private final double[] meanX = new double[1];
42 private final double[] meanY = new double[1];
43 private final double[] stdA = new double[1];
44 private final double[] stdB = new double[1];
45 private final double[] amplitude2D = new double[1];
46 private final double[] angle2D = new double[1];
47 private final double[] const2D = new double[1];
48 private final double[] meanXFit = new double[1];
49 private final double[] stdXFit = new double[1];
50 private final double[] amplitudeXFit = new double[1];
51 private final double[] constXFit = new double[1];
52 private final double[] slopeXFit = new double[1];
53 private final double[] meanYFit = new double[1];
54 private final double[] stdYFit = new double[1];
55 private final double[] amplitudeYFit = new double[1];
56 private final double[] constYFit = new double[1];
57 private final double[] slopeYFit = new double[1];
58 private final byte[] calculateThreshold = new byte[1];
59 private final byte[] performFit = new byte[1];
60 private final byte[] performSmoothing = new byte[1];
61
62 private final int width;
63 private final int height;
64
65
66
67
68 public AImage() {
69 super("AISr4");
70 image[0] = new IMAGE();
71
72
73 width = 0;
74 height = 0;
75 initStructure();
76 }
77
78
79
80
81
82
83
84 public AImage(AImage image) {
85 this(image.getImage(),image.getRoiX(),image.getRoiY(),image.getRoiW(),image.getRoiH(),
86 image.getRoi2X(), image.getRoi2Y(), image.getRoi2W(), image.getRoi2H(), image.getThreshold(),
87 image.getSideViewX(), image.getMeanX(), image.getStdX(), image.getSideViewAmplitudeX(),image.getSideViewConstX(),
88 image.getMeanXFit(), image.getStdXFit(), image.getAmplitudeXFit(), image.getConstXFit(), image.getSlopeXFit(),
89 image.getSideViewY(), image.getMeanY(), image.getStdY(), image.getSideViewAmplitudeY(), image.getSideViewConstY(),
90 image.getMeanYFit(), image.getStdYFit(), image.getAmplitudeYFit(), image.getConstYFit(), image.getSlopeYFit(),
91 image.getStdA(), image.getStdB(), image.getAngle2D(), image.getAmplitude2D(), image.getConst2D(),
92 image.getThresholdPoints(),image.isCalculateThreshold(),image.isPerformFit(),image.isPerformSmoothing());
93 }
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139 public AImage(IMAGE image, int roiX, int roiY, int roiW, int roiH, int roi2X, int roi2Y,
140 int roi2W, int roi2H, double threshold,
141 double[] sideViewX, double meanX, double stdX, double sideAmplitudeX, double sideConstX,
142 double meanXFit, double stdXFit, double sideAmplitudeXFit, double sideConstXFit, double slopeXFit,
143 double[] sideViewY, double meanY, double stdY, double sideAmplitudeY, double sideConstY,
144 double meanYFit, double stdYFit, double sideAmplitudeYFit, double sideConstYFit, double slopeYFit,
145 double stdA, double stdB, double angle2D, double amplitude2D, double const2D,
146 int thresholdPoints, boolean calculateThreshold, boolean performFit, boolean performSmoothing) {
147 super("AISr4");
148
149 int width = image.getFrameHeader().sourceWidth;
150 int height = image.getFrameHeader().sourceHeight;
151 int aoiWidth = image.getFrameHeader().aoiWidth;
152 int aoiHeight = image.getFrameHeader().aoiHeight;
153
154 if (aoiWidth != -1 || aoiHeight != -1) {
155 if (sideViewX.length != aoiWidth) throw new IllegalArgumentException("Incompatible size of X side view array.");
156 if (sideViewY.length != aoiHeight) throw new IllegalArgumentException("Incompatible size of Y side view array.");
157 if (roiX < 0 || roiY < 0 || roiW < 0 || roiH < 0 || roiX+roiW > aoiWidth || roiY+roiH > aoiHeight) throw new IllegalArgumentException("Illegal region of interest specified.");
158 if (roi2X < 0 || roi2Y < 0 || roi2W < 0 || roi2H < 0 || roi2X+roi2W > aoiWidth || roi2Y+roiH > aoiHeight) throw new IllegalArgumentException("Illegal region of interest 2 specified.");
159 this.width = aoiWidth;
160 this.height = aoiHeight;
161 }
162 else {
163 if (sideViewX.length != width) throw new IllegalArgumentException("Incompatible size of X side view array.");
164 if (sideViewY.length != height) throw new IllegalArgumentException("Incompatible size of Y side view array.");
165 if (roiX < 0 || roiY < 0 || roiW < 0 || roiH < 0 || roiX+roiW > width || roiY+roiH > height) throw new IllegalArgumentException("Illegal region of interest specified.");
166 if (roi2X < 0 || roi2Y < 0 || roi2W < 0 || roi2H < 0 || roi2X+roi2W > width || roi2Y+roi2H > height) throw new IllegalArgumentException("Illegal region of interest 2 specified.");
167 this.width = width;
168 this.height = height;
169 }
170
171
172
173 for (int i = 0; i < sideViewX.length; i++) {
174 this.sideViewX[i] = sideViewX[i];
175 }
176 this.stdX[0] = stdX;
177 this.meanX[0] = meanX;
178 this.sideViewAmplitudeX[0] = sideAmplitudeX;
179 this.sideViewConstX[0] = sideConstX;
180
181 for (int i = 0; i < sideViewY.length; i++) {
182 this.sideViewY[i] = sideViewY[i];
183 }
184 this.stdY[0] = stdY;
185 this.meanY[0] = meanY;
186 this.sideViewAmplitudeY[0] = sideAmplitudeY;
187 this.sideViewConstY[0] = sideConstY;
188 this.stdA[0] = stdA;
189 this.stdB[0] = stdB;
190 this.amplitude2D[0] = amplitude2D;
191 this.angle2D[0] = angle2D;
192 this.const2D[0] = const2D;
193 this.roiX[0] = roiX;
194 this.roiY[0] = roiY;
195 this.roiW[0] = roiW;
196 this.roiH[0] = roiH;
197 this.roi2X[0] = roi2X;
198 this.roi2Y[0] = roi2Y;
199 this.roi2W[0] = roi2W;
200 this.roi2H[0] = roi2H;
201 this.imageW[0] = width;
202 this.imageH[0] = height;
203 this.threshold[0] = threshold;
204 this.meanXFit[0] = meanXFit;
205 this.stdXFit[0] = stdXFit;
206 this.amplitudeXFit[0] = sideAmplitudeXFit;
207 this.constXFit[0] = sideConstXFit;
208 this.slopeXFit[0] = slopeXFit;
209 this.meanYFit[0] = meanYFit;
210 this.stdYFit[0] = stdYFit;
211 this.amplitudeYFit[0] = sideAmplitudeYFit;
212 this.constYFit[0] = sideConstYFit;
213 this.slopeYFit[0] = slopeYFit;
214 this.thresholdPoints[0] = thresholdPoints;
215 this.calculateThreshold[0] = calculateThreshold ? (byte)1 : (byte)0;
216 this.performFit[0] = performFit ? (byte)1 : (byte)0;
217 this.performSmoothing[0] = performSmoothing ? (byte)1 : (byte)0;
218
219 this.image[0] = image;
220
221
222 initStructure();
223 initDone();
224 }
225
226 private void initStructure() {
227 addField(image,"image");
228 addField(imageW,"imageW");
229 addField(imageH,"imageH");
230 addField(roiX,"roiX");
231 addField(roiY,"roiY");
232 addField(roiW,"roiW");
233 addField(roiH,"roiH");
234 addField(roi2X,"roi2X");
235 addField(roi2Y,"roi2Y");
236 addField(roi2W,"roi2W");
237 addField(roi2H,"roi2H");
238 addField(threshold,"threshold");
239 addField(sideViewX, "sideViewX");
240 addField(sideViewY, "sideViewY");
241 addField(sideViewAmplitudeX,"sideViewAmplitudeX");
242 addField(sideViewAmplitudeY,"sideViewAmplitudeY");
243 addField(sideViewConstX, "sideViewConstX");
244 addField(sideViewConstY, "sideViewConstY");
245 addField(stdX,"stdX");
246 addField(stdY,"stdY");
247 addField(meanX,"meanX");
248 addField(meanY,"meanY");
249 addField(stdA,"stdA");
250 addField(stdB,"stdB");
251 addField(amplitude2D,"amplitude2D");
252 addField(angle2D,"angle2D");
253 addField(const2D, "const2D");
254 addField(meanXFit, "meanXFit");
255 addField(stdXFit, "stdXFit");
256 addField(amplitudeXFit, "amplitudeXFit");
257 addField(constXFit, "constXFit");
258 addField(slopeXFit, "slopeXFit");
259 addField(meanYFit, "meanYFit");
260 addField(stdYFit, "stdYFit");
261 addField(amplitudeYFit, "amplitudeYFit");
262 addField(constYFit, "constYFit");
263 addField(slopeYFit, "slopeYFit");
264 addField(thresholdPoints, "thresholdPoints");
265 addField(performFit, "performFit");
266 addField(performSmoothing, "performSmoothing");
267 addField(calculateThreshold, "calculateThreshold");
268
269 }
270
271
272
273
274
275
276 public IMAGE getImage() {
277 return image[0];
278 }
279
280
281
282
283
284
285
286
287 public int getImageW() {
288 return imageW[0];
289 }
290
291
292
293
294
295
296
297
298 public int getImageH() {
299 return imageH[0];
300 }
301
302
303
304
305
306
307 public int getRoiX() {
308 return roiX[0];
309 }
310
311
312
313
314
315
316 public int getRoiY() {
317 return roiY[0];
318 }
319
320
321
322
323
324
325 public int getRoiW() {
326 return roiW[0];
327 }
328
329
330
331
332
333
334 public int getRoiH() {
335 return roiH[0];
336 }
337
338
339
340
341
342
343 public int getRoi2X() {
344 return roi2X[0];
345 }
346
347
348
349
350
351
352 public int getRoi2Y() {
353 return roi2Y[0];
354 }
355
356
357
358
359
360
361 public int getRoi2W() {
362 return roi2W[0];
363 }
364
365
366
367
368
369
370 public int getRoi2H() {
371 return roi2H[0];
372 }
373
374
375
376
377
378
379 public double getThreshold() {
380 return threshold[0];
381 }
382
383
384
385
386
387
388
389
390
391 public double getStdA() {
392 return stdA[0];
393 }
394
395
396
397
398
399
400
401
402
403 public double getStdB() {
404 return stdB[0];
405 }
406
407
408
409
410
411
412
413
414
415
416 public double getAmplitude2D() {
417 return amplitude2D[0];
418 }
419
420
421
422
423
424
425
426
427
428 public double getAngle2D() {
429 return angle2D[0];
430 }
431
432
433
434
435
436
437
438
439
440
441 public double getConst2D() {
442 return const2D[0];
443 }
444
445
446
447
448
449
450
451
452
453 public double[] getSideViewX() {
454 double[] result = new double[width];
455 System.arraycopy(sideViewX, 0, result, 0, result.length);
456 return result;
457 }
458
459
460
461
462
463
464
465
466
467 public double[] getSideViewY() {
468 double[] result = new double[height];
469 System.arraycopy(sideViewY, 0, result, 0, result.length);
470 return result;
471 }
472
473
474
475
476
477
478
479
480 public double getStdX() {
481 return stdX[0];
482 }
483
484
485
486
487
488
489
490
491 public double getStdY() {
492 return stdY[0];
493 }
494
495
496
497
498
499
500
501
502 public double getMeanX() {
503 return meanX[0];
504 }
505
506
507
508
509
510
511
512
513 public double getMeanY() {
514 return meanY[0];
515 }
516
517
518
519
520
521
522
523
524 public double getSideViewAmplitudeX() {
525 return sideViewAmplitudeX[0];
526 }
527
528
529
530
531
532
533
534
535 public double getSideViewAmplitudeY() {
536 return sideViewAmplitudeY[0];
537 }
538
539
540
541
542
543
544
545
546 public double getSideViewConstX() {
547 return sideViewConstX[0];
548 }
549
550
551
552
553
554
555
556
557 public double getSideViewConstY() {
558 return sideViewConstY[0];
559 }
560
561
562
563
564
565
566
567 public boolean isCalculateThreshold() {
568 return calculateThreshold[0] == 1;
569 }
570
571
572
573
574
575
576 public boolean isPerformFit() {
577 return performFit[0] == 1;
578 }
579
580
581
582
583
584
585 public boolean isPerformSmoothing() {
586 return performSmoothing[0] == 1;
587 }
588
589
590
591
592
593
594 public double getAmplitudeXFit() {
595 return amplitudeXFit[0];
596 }
597
598
599
600
601
602
603 public double getConstXFit() {
604 return constXFit[0];
605 }
606
607
608
609
610
611
612 public double getMeanXFit() {
613 return meanXFit[0];
614 }
615
616
617
618
619
620
621 public double getStdXFit() {
622 return stdXFit[0];
623 }
624
625
626
627
628
629
630 public double getAmplitudeYFit() {
631 return amplitudeYFit[0];
632 }
633
634
635
636
637
638
639 public double getSlopeXFit() {
640 return slopeXFit[0];
641 }
642
643
644
645
646
647
648 public double getConstYFit() {
649 return constYFit[0];
650 }
651
652
653
654
655
656
657 public double getMeanYFit() {
658 return meanYFit[0];
659 }
660
661
662
663
664
665
666 public double getStdYFit() {
667 return stdYFit[0];
668 }
669
670
671
672
673
674
675 public double getSlopeYFit() {
676 return slopeYFit[0];
677 }
678
679
680
681
682
683
684 public int getThresholdPoints() {
685 return thresholdPoints[0];
686 }
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723 }