// 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 #include /// 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; itabData_; if (!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; inbPixels_; 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; inbPixels_; 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; } }