Commit 0c56c80eefdad3d2abbdc15ace581a8e5d7de392

Authored by Scott Klum
1 parent 40cad71c

Don't do an affine wrap with bad points

openbr/plugins/imgproc/rndaffine.cpp
... ... @@ -42,29 +42,33 @@ class RndAffineTransform : public UntrainableMetaTransform
42 42 QPointF affine_0 = t.file.get<QPointF>("Affine_0");
43 43 QPointF affine_1 = t.file.get<QPointF>("Affine_1");
44 44  
45   - // Append the original points
46   - Template u = t;
47   - u.file.setPoints(QList<QPointF>() << affine_0 << affine_1);
48   - u.file.set("Affine_0", affine_0);
49   - u.file.set("Affine_1", affine_1);
50   - dst.append(u);
  45 + if (affine_0 != QPoint(-1,-1) && affine_1 != QPoint(-1,-1)) {
  46 + // Append the original points
  47 + Template u = t;
  48 + u.file.setPoints(QList<QPointF>() << affine_0 << affine_1);
  49 + u.file.set("Affine_0", affine_0);
  50 + u.file.set("Affine_1", affine_1);
  51 + dst.append(u);
51 52  
52   - const double IPD = sqrt(pow(affine_0.x() - affine_1.x(), 2) + pow(affine_0.y() - affine_1.y(), 2));
53   - for (int i = 0; i < numAffines; i++) {
54   - int angle = (rand() % (2*maxAngle)) - maxAngle;
  53 + const double IPD = sqrt(pow(affine_0.x() - affine_1.x(), 2) + pow(affine_0.y() - affine_1.y(), 2));
  54 + if (IPD != 0) {
  55 + for (int i = 0; i < numAffines; i++) {
  56 + int angle = (rand() % (2*maxAngle)) - maxAngle;
55 57  
56   - int min = (int)(sqrt(1 / scaleFactor) * IPD);
57   - int max = (int)(sqrt(scaleFactor) * IPD);
58   - int dx = (rand() % (max - min)) + min;
59   - int dy = (dx * sin(angle * M_PI / 180))/2;
  58 + int min = (int)(sqrt(1 / scaleFactor) * IPD);
  59 + int max = (int)(sqrt(scaleFactor) * IPD);
  60 + int dx = (rand() % (max - min)) + min;
  61 + int dy = (dx * sin(angle * M_PI / 180))/2;
60 62  
61   - QPointF shiftedAffine_0 = QPointF(affine_1.x() - dx, affine_1.y() + dy);
  63 + QPointF shiftedAffine_0 = QPointF(affine_1.x() - dx, affine_1.y() + dy);
62 64  
63   - Template u = t;
64   - u.file.setPoints(QList<QPointF>() << shiftedAffine_0 << affine_1);
65   - u.file.set("Affine_0", shiftedAffine_0);
66   - u.file.set("Affine_1", affine_1);
67   - dst.append(u);
  65 + Template u = t;
  66 + u.file.setPoints(QList<QPointF>() << shiftedAffine_0 << affine_1);
  67 + u.file.set("Affine_0", shiftedAffine_0);
  68 + u.file.set("Affine_1", affine_1);
  69 + dst.append(u);
  70 + }
  71 + }
68 72 }
69 73 }
70 74 }
... ...