summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/segmNN.cc
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/ovision/segmNN.cc')
-rw-r--r--2004/i/nono/src/ovision/segmNN.cc36
1 files changed, 18 insertions, 18 deletions
diff --git a/2004/i/nono/src/ovision/segmNN.cc b/2004/i/nono/src/ovision/segmNN.cc
index afc4bd1..c17ff33 100644
--- a/2004/i/nono/src/ovision/segmNN.cc
+++ b/2004/i/nono/src/ovision/segmNN.cc
@@ -15,12 +15,12 @@ using namespace std;
/// Constructor SegmNN
/// @param img classe img permettant d'acceder au donnees de l'image a traiter
-/// @param config classe config permettant d'acceder aux variables de configuration
-SegmNN::SegmNN(Img *img, OConfig *config) {
+/// @param oconfig classe oconfig permettant d'acceder aux variables de oconfiguration
+SegmNN::SegmNN(Img *img) {
// Sauvegarde les pointeurs
SegmNN::img = img;
- SegmNN::config = config;
- nbOutput = config->nn_NbCouleurs;
+ oconfig = OConfig::GetInstance ();
+ nbOutput = oconfig->nn_NbCouleurs;
node = NULL;
index = NULL;
@@ -63,7 +63,7 @@ SegmNN::BuildNN(int nbOutput, int loadFromFile)
if (loadFromFile)
{
// Verifie si le nombre de poids donne dans le fichier est suffisant
- if (config->nbNodeMax < nbOutput)
+ if (oconfig->nbNodeMax < nbOutput)
{
cerr << "SegmNN::BuildNN : Nombre de nodes insuffisants dans le fichier poids\n";
}
@@ -73,11 +73,11 @@ SegmNN::BuildNN(int nbOutput, int loadFromFile)
delete [] node;
node = new unsigned char[nbOutput*3];
for (int i = 0; i<nbOutput*3; i++)
- node[i] = config->node[i];
+ node[i] = oconfig->node[i];
delete [] index;
index = new int[nbOutput];
for (int i = 0; i<nbOutput; i++)
- index[i] = config->index[i];
+ index[i] = oconfig->index[i];
freq = new unsigned int[nbOutput];
}
return;
@@ -122,10 +122,10 @@ SegmNN::TrainNN()
int numOutputMax=0;
tabData = img->tabData;
- config->colorMode = img->hsi*2 + img->yuv;
- config->groupColor = 0;
+ oconfig->colorMode = img->hsi*2 + img->yuv;
+ oconfig->groupColor = 0;
- for(long i=0; i<config->nn_nil; i++)
+ for(long i=0; i<oconfig->nn_nil; i++)
{
// On choisit un pixel au hasard
pixelNum = (unsigned long)(img->nbPixels*(rand()/(RAND_MAX+1.0)));
@@ -138,7 +138,7 @@ SegmNN::TrainNN()
for(int k=0; k<3; k++)
{
if ((img->yuv && k==0) || (img->hsi && k==2))
- output[j] += abs((int)(config->nn_influ_lum*node[j*3+k]-tabData[pixelNum*3+k])*abs(node[j*3+k]-tabData[pixelNum*3+k]));
+ output[j] += abs((int)(oconfig->nn_influ_lum*node[j*3+k]-tabData[pixelNum*3+k])*abs(node[j*3+k]-tabData[pixelNum*3+k]));
else
output[j] += abs(node[j*3+k]-tabData[pixelNum*3+k])*abs(node[j*3+k]-tabData[pixelNum*3+k]);
}
@@ -152,7 +152,7 @@ SegmNN::TrainNN()
for(int k=0; k<3; k++)
{
node[numOutputMax*3+k] =
- (unsigned char)((node[numOutputMax*3+k] + config->nn_sl*tabData[pixelNum*3+k])/(1+config->nn_sl));
+ (unsigned char)((node[numOutputMax*3+k] + oconfig->nn_sl*tabData[pixelNum*3+k])/(1+oconfig->nn_sl));
// Recompense pour la sortie qui travaille
freq[numOutputMax]++;
@@ -162,7 +162,7 @@ SegmNN::TrainNN()
{
for (int k=0; k < nbOutput; k++)
{
- if (freq[numOutputMax] < config->nn_lazy_threshold)
+ if (freq[numOutputMax] < oconfig->nn_lazy_threshold)
{
// Regeneration de nouveaux poids
for(int m=0; m<3; m++)
@@ -202,7 +202,7 @@ SegmNN::FindColorNN(unsigned char *x)
{
// XXX Ne pas oublier de mettre abs si on ne calcule pas les carrés
tmp = node[j*3]-x[0];
- output[j] = abs((int)(config->nn_influ_lum*tmp*tmp));
+ output[j] = abs((int)(oconfig->nn_influ_lum*tmp*tmp));
tmp = node[j*3+1]-x[1];
output[j] += tmp*tmp;
tmp = node[j*3+2]-x[2];
@@ -295,11 +295,11 @@ SegmNN::TestNN()
// Parcours de toutes les valeurs de nombres d'itérations
for (int i_nil = 0; i_nil<5; i_nil++) {
- config->nn_nil = nil[i_nil];
+ oconfig->nn_nil = nil[i_nil];
// Parcours de toutes les valeurs de Step Learning
for (int i_sl = 0; i_sl<4; i_sl++) {
- config->nn_sl = sl[i_sl];
+ oconfig->nn_sl = sl[i_sl];
// Apprentissage du NN
TrainNN();
@@ -311,8 +311,8 @@ SegmNN::TestNN()
sprintf(filename, "NN/%i-%f-%luNN.jpg", nc[i_nc], sl[i_sl], nil[i_nil]);
img->WriteSegm(filename, tabSegm);
sprintf(filename, "NN/%i-%f-%luNN", nc[i_nc], sl[i_sl], nil[i_nil]);
- config->node = node;
- config->CreateNNFile(filename, config->colorMode, nbOutput);
+ oconfig->node = node;
+ oconfig->CreateNNFile(filename, oconfig->colorMode, nbOutput);
}
}
}