summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ovision/see/segm.cc
diff options
context:
space:
mode:
authorgaillaro2005-04-05 18:26:18 +0000
committergaillaro2005-04-05 18:26:18 +0000
commit97b69507c877a4644c0caac4f61e052e188f9d8e (patch)
tree1a81f341ab6577003fa60ca3fb135e7b4baeecba /2005/i/robert/src/ovision/see/segm.cc
parent0062520c9cc87eeeb8828361bbb33033a6f07b7e (diff)
Renaissance de la vision :
- code standard robot - presque du C++ - apprentissage du RN sur plusieurs images - tableau de données couleurs compressé - reconnaissance de plusieurs objets possibles
Diffstat (limited to '2005/i/robert/src/ovision/see/segm.cc')
-rw-r--r--2005/i/robert/src/ovision/see/segm.cc84
1 files changed, 84 insertions, 0 deletions
diff --git a/2005/i/robert/src/ovision/see/segm.cc b/2005/i/robert/src/ovision/see/segm.cc
new file mode 100644
index 0000000..f194ce2
--- /dev/null
+++ b/2005/i/robert/src/ovision/see/segm.cc
@@ -0,0 +1,84 @@
+// segm.cc - Classe Segmentation
+// robert - Programme du robot APBteam
+// Copyright (C) 2005 Olivier Gaillard
+
+/// @file segm.cc Segmente l'image et cree un tableau contenant des valeurs segmentees, creation du reseau de neurones
+#include "segm.hh"
+#include <iostream>
+#include <stdlib.h>
+
+/// Constructor Segm
+Segm::Segm ()
+ : index_ (0), node_ (0), lumPos_ (-1)
+{
+ oconfig_= OConfig::getInstance ();
+ nbOutput_= oconfig_->nnNbColor;
+}
+
+/// Destructor Segm
+Segm::~Segm ()
+{
+ delete [] node_;
+ delete [] index_;
+}
+
+/// Affiche les poids du reseau de neurones (neural network : NN)
+void
+Segm::showNodes () const
+{
+ // Affichage des poids du NN
+ std::cout << "Poids:\n";
+ for(int i=0; i<nbOutput_; i++)
+ std::cout << "\t" << (int)node_[i*3] << " "
+ << (int)node_[i*3+1] << " " << (int)node_[i*3+2] << "\n";
+ std::cout << std::endl;
+}
+
+/// Segmente l'image avec le reseau de neurones
+void
+Segm::segmImg (Img *img)
+{
+ // Initialisation
+ unsigned char* d = img->tabData_;
+ delete [] img->tabSegm_;
+ img->tabSegm_= new unsigned char[img->nbPixels_];
+ unsigned char *s = img->tabSegm_;
+ // Parcours de l'image pour la segmentation
+ // On recupere l'indextabSegm_et non le numero de sortie du NN
+ for (unsigned long i=0; i<img->nbPixels_; i++)
+ {
+ *(s++) = index_[giveColor (d)];
+ d += 3;
+ }
+}
+
+/// Segmente l'image pour une seule couleur uniquement et permet donc d'isoler une couleur
+/// @param numColor numero de la couleur a isoler
+void
+Segm::segmImg (Img *img, const int numColor)
+{
+ unsigned char* d = img->tabData_;
+ delete [] img->tabSegm_;
+ img->tabSegm_= new unsigned char[img->nbPixels_];
+ unsigned char *s = img->tabSegm_;
+ // Parcours de l'image pour la segmentation
+ for (unsigned long i=0; i<img->nbPixels_; i++)
+ {
+ numColor == index_[giveColor (d)] ? *s = 1 : *s = 0;
+ ++s;
+ d += 3;
+ }
+}
+
+/// Configure le mode de couleur utilisé
+void
+Segm::setMode (const Image::PixelFormat color)
+{
+ switch (color)
+ {
+ case Image::rgb: lumPos_= -1; break;
+ case Image::yuv: lumPos_= 0; break;
+ case Image::hsi: lumPos_= 2; break;
+ default: lumPos_= -1;
+ }
+}