summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ovision/see/magnifier.cc
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/ovision/see/magnifier.cc')
-rw-r--r--2005/i/robert/src/ovision/see/magnifier.cc50
1 files changed, 47 insertions, 3 deletions
diff --git a/2005/i/robert/src/ovision/see/magnifier.cc b/2005/i/robert/src/ovision/see/magnifier.cc
index 067bae3..c7d5dc0 100644
--- a/2005/i/robert/src/ovision/see/magnifier.cc
+++ b/2005/i/robert/src/ovision/see/magnifier.cc
@@ -5,6 +5,7 @@
#include <iostream>
#include "magnifier.hh"
+#include "hotelling.hh"
/// Constructeur
Magnifier::Magnifier (Img *img, Segm *segm)
@@ -74,6 +75,8 @@ Magnifier::analyse (const std::vector<Zone> &zoneList)
break;
}
}
+ Zone &z = itemList_[Group::redSkittle][0];
+ isSkittle (z);
}
@@ -81,7 +84,7 @@ Magnifier::analyse (const std::vector<Zone> &zoneList)
bool
Magnifier::checkIsUnique (const Zone &zone)
{
- const int uniqueness = 50;
+ const int uniqueness = 200;
for (std::vector<Zone>::iterator iter = itemList_[zone.id].begin ();
iter != itemList_[zone.id].end (); ++iter)
if ((abs (zone.centerx - iter->centerx) < uniqueness)
@@ -93,13 +96,54 @@ Magnifier::checkIsUnique (const Zone &zone)
if (zone.xmax > iter->xmax) iter->xmax = zone.xmax;
if (zone.ymax > iter->ymax) iter->ymax = zone.ymax;
- iter->centerx = (iter->xmax - iter->xmin) / 2;
- iter->centery = (iter->ymax - iter->ymin) / 2;
+ iter->centerx = (iter->xmax + iter->xmin) / 2;
+ iter->centery = (iter->ymax + iter->ymin) / 2;
return false;
}
return true;
}
+/// Test si l'objet est une quille
+bool
+Magnifier::isSkittle (Zone &zone)
+{
+ // Agrandissement de la zone de recherche
+ const int grow = 20;
+ int ymin = (zone.ymin - grow);
+ ymin = (ymin > 0) ? ymin : 0;
+ int ymax = (zone.ymax + grow);
+ ymax = (ymax < img_->height_) ? ymax : img_->height_;
+ int xmin = (zone.xmin - grow);
+ xmin = (xmin > 0) ? xmin : 0;
+ int xmax = (zone.xmax + grow);
+ xmax = (xmax < img_->width_) ? xmax : img_->width_;
+ // Parcours d'une partie des pixels de l'image
+ int tmpY;
+ int jump = oconfig_->jumpPointDist/5;
+ if (!jump) jump = 1;
+ std::vector<Hpoint> l;
+ for (int y = zone.ymin - grow; y < zone.ymax + grow; y += jump)
+ {
+ tmpY = y*img_->width_;
+ for (int x=zone.xmin - grow; x < zone.xmax + grow; x += jump)
+ if (segm_->giveColor (img_->tabData_ + ((tmpY + x) * 3), true, true) == zone.color)
+ {
+ Hpoint h (x, y);
+ l.push_back (h);
+ }
+ }
+ // Calcul de la composante principale
+ for (std::vector<Hpoint>::iterator iter = l.begin (); iter != l.end (); ++iter)
+ std::cout << (*iter)[0] << " " << (*iter)[1] << std::endl;
+ Hotelling hote (l);
+ hote.eigenVectors ();
+ double i, j;
+ hote.getPC (i, j);
+ hote.show ();
+ std::cout << "PC : " << i << " " << j << std::endl;
+ return true;
+}
+
/// Test si l'objet est une quille rouge
bool
Magnifier::isRedSkittle (const Zone &zone) const