00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 #include "VFAT/NPclassify2.H"
00051 #include "Raster/Raster.H"
00052 #include "VFAT/covEstimate.H"
00053 #include "VFAT/findColorIndex.H"
00054 #include "Util/Timer.H"
00055
00056 #define INVALS 31
00057
00058
00059 char* configFile;
00060
00061 readConfig configIn(25);
00062 readConfig polySet(25);
00063
00064 PixRGB<float> pix;
00065
00066 int itemNumber;
00067 float inVals[INVALS];
00068
00069 int main(int argc, char* argv[])
00070 {
00071
00072 Timer tim;
00073 tim.reset();
00074 uint64 t0 = tim.get();
00075
00076 Image<byte> input = Raster::ReadGray(argv[1]);
00077 if(argc > 2)
00078 itemNumber = atoi(argv[2]);
00079 else
00080 itemNumber = -666;
00081 Image<float> finput = input;
00082 Image<float> outputDensity;
00083 Image<PixRGB<float> > outputLinks;
00084 outputDensity.resize(input.getWidth(),input.getHeight());
00085 outputLinks.resize((input.getWidth()*2),input.getHeight());
00086
00087 configIn.openFile("NPclassify.conf");
00088 polySet.openFile("polySet.conf");
00089
00090 std::vector<float> feature(2,0);
00091 std::vector<std::vector<float> > features(50,feature);
00092 std::vector<int*> roots;
00093 std::vector<int*> parents;
00094 std::vector<float> density;
00095 std::vector<int> priorItemVal(50,0);
00096
00097 long featureCount = 0;
00098
00099
00100 for(int x = 0; x < finput.getWidth(); x++)
00101 {
00102 for(int y = 0; y < finput.getHeight();y++)
00103 {
00104 if(finput.getVal(x,y) < 254.0F)
00105 {
00106
00107 if((unsigned)(featureCount) == features.size())
00108 {
00109 features.resize((featureCount+10),feature);
00110 priorItemVal.resize((featureCount+10),0);
00111
00112 }
00113
00114 priorItemVal[featureCount] = (int)finput.getVal(x,y);
00115 features[featureCount][0] = x;
00116 features[featureCount][1] = y;
00117 featureCount++;
00118 }
00119 }
00120 }
00121
00122
00123 std::vector<int> priorItemMember(featureCount,0);
00124 std::vector<int> priorClassVal(featureCount,0);
00125 std::vector<int> priorClassSize(featureCount,0);
00126 int priorClasses = 0;
00127
00128 for(int i = 0; i < featureCount; i++)
00129 {
00130 bool add = true;
00131 for(int j = 0; j < priorClasses; j++)
00132 {
00133 if(priorItemVal[i] == priorClassVal[j])
00134 {
00135 LINFO("ADDED %d to class %d, value %d",i,j,
00136 priorItemVal[i]);
00137 priorItemMember[i] = j;
00138 priorClassSize[j]++;
00139 add = false;
00140 }
00141 }
00142 if(add == true)
00143 {
00144 priorClassVal[priorClasses] = priorItemVal[i];
00145 priorItemMember[i] = priorClasses;
00146 priorClassSize[priorClasses]++;
00147 priorClasses++;
00148 }
00149 }
00150
00151
00152
00153
00154 LINFO("Number of feature vectors %ld",featureCount);
00155
00156
00157
00158 NPclassify2<float> NP(configIn,polySet,false);
00159
00160 if(argc > 3)
00161 {
00162 for(int i = 0; i < INVALS; i++)
00163 {
00164 inVals[i] = atof(argv[4+i]);
00165 }
00166 NP.NPinputCommandLineSettings(inVals);
00167 }
00168
00169
00170
00171
00172
00173
00174 NP.NPresizeSpace(featureCount,2);
00175
00176 NP.NPaddSpace(features);
00177
00178 NP.NPclassifySpaceNew(false);
00179 std::cerr << "DONE\n";
00180
00181 uint64 t1 = tim.get();
00182 t0 = t1 - t0;
00183
00184 LINFO("Get Return Info");
00185 roots = NP.NPgetStems();
00186 parents = NP.NPgetParents();
00187 density = NP.NPgetDensity();
00188
00189 std::vector<std::vector<int*> > theReturn = NP.NPgetChildren();
00190
00191 std::vector<std::vector<int> > BB = NP.NPgetBoundingBoxes(false);
00192 LINFO("Draw Links");
00193
00194 for(int i = 0; i < featureCount; i++)
00195 {
00196 float setValue = (float)(density[i]/NP.NPgetMaxDensity())*255;
00197 outputDensity.setVal((int)features[i][0],(int)features[i][1],setValue);
00198
00199 pix.setRed(255),pix.setGreen(0);pix.setBlue(0);
00200 outputLinks.setVal(((int)features[i][0]+input.getWidth())
00201 ,((int)features[i][1]),pix);
00202 pix.setRed(0),pix.setGreen(255);pix.setBlue(0);
00203
00204 if(*parents[i] != -1)
00205 {
00206 for(int j = 0; j < NP.NPgetStemNumber(); j++)
00207 {
00208 if(*roots[j] == i)
00209 {
00210 pix.setRed(255);
00211 pix.setGreen(0);
00212 }
00213 }
00214 drawLine(outputLinks, Point2D<int>((int)features[i][0],(int)features[i][1]),
00215 Point2D<int>((int)features[*parents[i]][0]
00216 ,(int)features[*parents[i]][1]),pix,1);
00217 }
00218 }
00219 LINFO("Draw Bounding Box");
00220
00221 pix.setRed(0),pix.setGreen(0);pix.setBlue(255);
00222 NP.NPdrawBoundingBoxes(&BB,&outputLinks,0,0,pix,true);
00223
00224 if(NP.NP_doClassMap == 1)
00225 {
00226 LINFO("Draw Class Images");
00227 Image<PixRGB<float> > classMap;
00228 Image<PixRGB<float> > priorClassMap;
00229
00230 PixRGB<float> mrPixel;
00231 classMap.resize(finput.getWidth(),finput.getHeight());
00232 priorClassMap.resize(finput.getWidth(),finput.getHeight());
00233 findColorIndex FAC;
00234
00235 pix.setRed(255),pix.setGreen(0);pix.setBlue(0);
00236 std::vector<int> sortClassSize(NP.NPgetStemNumber()+1,0);
00237 std::vector<int> sortClassMember(NP.NPgetStemNumber()+1,0);
00238 int sortCount = 0;
00239 int realClasses = 0;
00240
00241
00242
00243 Image<float> final;
00244 final.resize(finput.getWidth(),finput.getWidth());
00245 for(int i = 0; i < NP.NPgetStemNumber(); i++)
00246 {
00247 int classSize = NP.NPgetClassSize(i);
00248 if(NP.NPgetMinClassSize() <= classSize)
00249 {
00250 realClasses++;
00251 float t = 0.0F;
00252 float* tfloat = &t;
00253 std::vector<float> _vinput(classSize,0);
00254 std::vector<float*> _vTinput(classSize,tfloat);
00255 std::vector<std::vector<float> > NPclass(2,_vinput);
00256 std::vector<std::vector<float*> > NPclassP(2,_vTinput);
00257 for(int cs = 0; cs < classSize; cs++)
00258 {
00259 long item = NP.NPgetClass(i,cs);
00260 NPclass[0][cs] = finput.getWidth() - NP.NPgetFeature(item,0);
00261 std::cerr << "INPUTING " << NPclass[0][cs] << "\n";
00262 NPclass[1][cs] = NP.NPgetFeature(item,1);
00263 std::cerr << "INPUTING " << NPclass[1][cs] << "\n";
00264 NPclassP[0][cs] = &NPclass[0][cs];
00265 NPclassP[1][cs] = &NPclass[1][cs];
00266 }
00267 covHolder<float> covh;
00268 covh.resize(2,classSize,0.0F);
00269 covEstimate<float> CE(NPclassP,covh);
00270 CE.run();
00271 final = CE.returnCovSlice(0,1,final);
00272 }
00273 }
00274 Raster::VisuFloat(final,0,sformat("%s.outputCov.pgm",argv[1]));
00275
00276
00277 for(int i = 0; i < featureCount; i++)
00278 {
00279 unsigned int foo = (unsigned)priorItemMember[i];
00280 FAC.FACgetColor12(&foo,&mrPixel);
00281 priorClassMap.setVal((int)features[i][0]
00282 ,(int)features[i][1],mrPixel);
00283 }
00284
00285
00286
00287 for(int i = 0; i < NP.NPgetStemNumber(); i++)
00288 {
00289
00290 if(sortCount == 0)
00291 {
00292
00293 sortClassSize[0] = NP.NPgetClassSize(i);
00294 sortClassMember[0] = i;
00295 sortCount++;
00296 }
00297 else
00298 {
00299 bool setThis = false;
00300
00301 int initSC = sortCount;
00302 for(int j = 0; j < initSC; j++)
00303 {
00304
00305
00306 if(NP.NPgetClassSize(i) > sortClassSize[j])
00307 {
00308
00309
00310
00311 setThis = true;
00312 int tempClassSize;
00313 int tempClassNum;
00314 int newClassSize = NP.NPgetClassSize(i);
00315 int newClassNum = i;
00316 for(int k = j; k <= sortCount; k++)
00317 {
00318 tempClassSize = sortClassSize[k];
00319 tempClassNum = sortClassMember[k];
00320
00321 sortClassSize[k] = newClassSize;
00322 sortClassMember[k] = newClassNum;
00323 newClassSize = tempClassSize;
00324 newClassNum = tempClassNum;
00325 }
00326 break;
00327 }
00328 }
00329 if(setThis == false)
00330 {
00331
00332
00333
00334 sortClassSize[sortCount] = NP.NPgetClassSize(i);
00335 sortClassMember[sortCount] = i;
00336 }
00337 sortCount++;
00338 }
00339 }
00340
00341
00342
00343 for(int i = 0; i < sortCount; i++)
00344 {
00345 unsigned int number;
00346 int *thisClass = &sortClassMember[i];
00347 LINFO("%d : CLASS %d SIZE %d",i,*thisClass
00348 ,NP.NPgetClassSize(*thisClass));
00349 number = (unsigned)(i + 1);
00350
00351
00352
00353 LINFO("SETTING PIXEL %d",number);
00354 FAC.FACgetColor12(&number,&mrPixel);
00355 Image<PixRGB<float> > outputClass;
00356 outputClass.resize(finput.getWidth(),finput.getHeight());
00357 std::cerr << "class size " << NP.NPgetClassSize(*thisClass) << "\n";
00358 for(int j = 0; j < NP.NPgetClassSize(*thisClass); j++)
00359 {
00360 long item = NP.NPgetClass(*thisClass,j);
00361 outputClass.setVal((int)NP.NPgetFeature(item,0)
00362 ,(int)NP.NPgetFeature(item,1),pix);
00363 classMap.setVal((int)NP.NPgetFeature(item,0)
00364 ,(int)NP.NPgetFeature(item,1),mrPixel);
00365 if(j == 0)
00366 {
00367 if(NP.NPgetMinClassSize() <= NP.NPgetClassSize(*thisClass))
00368 {
00369 char foo;
00370 sprintf(&foo,"%d",*thisClass);
00371 writeText(classMap, Point2D<int>((int)NP.NPgetFeature(item,0),
00372 (int)NP.NPgetFeature(item,1)),
00373 &foo,PixRGB<float>(255),PixRGB<float>(0));
00374 }
00375 }
00376 }
00377
00378 }
00379
00380
00381
00382 std::vector<float> meanInterClassVar(priorClasses,0.0F);
00383 std::vector<float> stdInterClassVar(priorClasses,0.0F);
00384 std::vector<int> nInterClassVar(priorClasses,0);
00385
00386 std::vector<float> meanInterClusterVar(sortCount,0.0F);
00387 std::vector<float> stdInterClusterVar(sortCount,0.0F);
00388
00389 LINFO("DOING STATS");
00390 for(int i = 0; i < sortCount; i++)
00391 {
00392 int *thisClass = &sortClassMember[i];
00393 if(NP.NPgetClassSize(*thisClass) > NP.NPgetMinClassSize())
00394 {
00395 for(int j = 0; j < NP.NPgetClassSize(*thisClass); j++)
00396 {
00397 long item = NP.NPgetClass(*thisClass,j);
00398 for(int f = 0; f < featureCount; f++)
00399 {
00400 if(((int)features[f][0] == (int)NP.NPgetFeature(item,0)) &&
00401 ((int)features[f][1] == (int)NP.NPgetFeature(item,1)))
00402 {
00403 if((NP.NPgetClassSize(*thisClass) > 0) &&
00404 (priorClassSize[priorItemMember[f]] > 0))
00405 {
00406 meanInterClassVar[priorItemMember[f]] += (float)i;
00407 stdInterClassVar[priorItemMember[f]] += pow((float)i,2);
00408 nInterClassVar[priorItemMember[f]]++;
00409 meanInterClusterVar[i] += (float)priorItemMember[f];
00410 stdInterClusterVar[i] += pow((float)
00411 priorItemMember[f],2);
00412 }
00413 }
00414 }
00415 }
00416 }
00417 }
00418 float totalInterClassVar = 0.0F;
00419 float sumInterClassVar = 0.0F;
00420 float totalInterClusterVar = 0.0F;
00421 float sumInterClusterVar = 0.0F;
00422 for(int i = 0; i < priorClasses; i++)
00423 {
00424 if((nInterClassVar[i]-1) > 0)
00425 {
00426 meanInterClassVar[i] = meanInterClassVar[i]/nInterClassVar[i];
00427 stdInterClassVar[i] = (stdInterClassVar[i]/(nInterClassVar[i]))
00428 - pow(meanInterClassVar[i],2);
00429 totalInterClassVar += stdInterClassVar[i]*nInterClassVar[i];
00430 sumInterClassVar += nInterClassVar[i];
00431 LINFO("INTERCLASS MEAN for class %d is %f",i,meanInterClassVar[i]);
00432 LINFO("INTERCLASS VAR for class %d is %f",i,stdInterClassVar[i]);
00433 LINFO("N = %d",priorClassSize[i]);
00434 }
00435 }
00436 LINFO("STATS 1 done");
00437 float totalMeanInterClassVar;
00438 if(sumInterClassVar > 0)
00439 totalMeanInterClassVar = totalInterClassVar/sumInterClassVar;
00440 else
00441 totalMeanInterClassVar = 0;
00442 std::cout << "Total interclass variance is "
00443 << totalMeanInterClassVar << "\n";
00444
00445 for(int i = 0; i < sortCount; i++)
00446 {
00447 int *thisClass = &sortClassMember[i];
00448 if((NP.NPgetClassSize(*thisClass)-1) > 0)
00449 {
00450 meanInterClusterVar[i] = meanInterClusterVar[i]
00451 /NP.NPgetClassSize(*thisClass);
00452 stdInterClusterVar[i] = (stdInterClusterVar[i]/
00453 (NP.NPgetClassSize(*thisClass)))
00454 - pow(meanInterClusterVar[i],2);
00455 totalInterClusterVar += stdInterClusterVar[i]
00456 *NP.NPgetClassSize(*thisClass);
00457 sumInterClusterVar += NP.NPgetClassSize(*thisClass);
00458 LINFO("INTERCLUSTER MEAN for class %d is %f",
00459 i,meanInterClusterVar[i]);
00460 LINFO("INTERCLUSTER VAR for class %d is %f",
00461 i,stdInterClusterVar[i]);
00462 LINFO("N = %d",NP.NPgetClassSize(*thisClass));
00463 }
00464 }
00465 float totalMeanInterClusterVar;
00466 if(sumInterClusterVar > 0)
00467 totalMeanInterClusterVar = totalInterClusterVar/
00468 sumInterClusterVar;
00469 else
00470 totalMeanInterClusterVar = 0;
00471 std::cout << "Total intercluster variance is "
00472 << totalMeanInterClusterVar << "\n";
00473 LINFO("STATS 2 done");
00474
00475 Raster::VisuRGB(classMap,
00476 sformat("%s.CLASS_MAP.ppm",argv[1]));
00477 Raster::VisuRGB(priorClassMap,
00478 sformat("%s.PRIOR_CLASS_MAP.ppm",argv[1]));
00479 }
00480 std::cerr << "a\n";
00481 uint64 t2 = tim.get();
00482 t0 = t2 - t0;
00483 if(NP.NP_doDensityMap == 1)
00484 Raster::VisuFloat(outputDensity,0,sformat("%s.outputDensity.pgm",argv[1]));
00485 std::cerr << "b\n";
00486 if(NP.NP_doLinkMap == 1)
00487 Raster::VisuRGB(outputLinks,
00488 sformat("%s.outputLinks.ppm",argv[1]));
00489 LINFO("classify took %llums", t0);
00490
00491
00492
00493
00494
00495
00496
00497
00498 NP.NPresetSpace(featureCount,2);
00499 NP.NPaddSpace(features);
00500 unsigned int K = 4;
00501 float minDiff = 0.001F;
00502 unsigned int stopIter = 5;
00503 NP.NPclassifySpaceKmeans(&K,&minDiff,&stopIter);
00504 LINFO("Fetching Bounding Boxes");
00505 BB = NP.NPgetBoundingBoxes(true);
00506 LINFO("Draw Bounding Box");
00507 pix.setRed(255),pix.setGreen(255);pix.setBlue(0);
00508 NP.NPdrawBoundingBoxes(&BB,&outputLinks,0,0,pix,true);
00509 if(NP.NP_doLinkMap == 1)
00510 Raster::VisuRGB(outputLinks,
00511 sformat("%s.outputLinksK.ppm",argv[1]));
00512
00513 if(NP.NP_doClassMap == 1)
00514 {
00515 LINFO("Draw Class Images");
00516 Image<PixRGB<float> > classMap;
00517 PixRGB<float> mrPixel;
00518 classMap.resize(finput.getWidth(),finput.getHeight());
00519 findColorIndex FAC;
00520
00521 pix.setRed(255),pix.setGreen(0);pix.setBlue(0);
00522 for(int i = 0; i < NP.NPgetStemNumber(); i++)
00523 {
00524 unsigned int number;
00525 number = (unsigned)i + 1;
00526
00527
00528 FAC.FACgetColor12(&number,&mrPixel);
00529 Image<PixRGB<float> > outputClass;
00530 outputClass.resize(finput.getWidth(),finput.getHeight());
00531 std::cerr << "class size " << NP.NPgetClassSize(i) << "\n";
00532 for(int j = 0; j < NP.NPgetClassSize(i); j++)
00533 {
00534
00535 long item = NP.NPgetClass(i,j);
00536 outputClass.setVal((int)NP.NPgetFeature(item,0)
00537 ,(int)NP.NPgetFeature(item,1),pix);
00538 classMap.setVal((int)NP.NPgetFeature(item,0)
00539 ,(int)NP.NPgetFeature(item,1),mrPixel);
00540 if(j == 0)
00541 {
00542 char foo;
00543 sprintf(&foo,"%d",(int)item);
00544 writeText(classMap, Point2D<int>((int)NP.NPgetFeature(item,0),
00545 (int)NP.NPgetFeature(item,1)),
00546 &foo,PixRGB<float>(255),PixRGB<float>(0));
00547 }
00548 }
00549
00550 }
00551
00552
00553
00554 Image<float> final;
00555 final.resize(finput.getWidth(),finput.getWidth());
00556 for(int i = 0; i < NP.NPgetStemNumber(); i++)
00557 {
00558 int classSize = NP.NPgetClassSize(i);
00559 if(NP.NPgetMinClassSize() <= classSize)
00560 {
00561 float t = 0.0F;
00562 float* tfloat = &t;
00563 std::vector<float> _vinput(classSize,0);
00564 std::vector<float*> _vTinput(classSize,tfloat);
00565 std::vector<std::vector<float> > NPclass(2,_vinput);
00566 std::vector<std::vector<float*> > NPclassP(2,_vTinput);
00567 for(int cs = 0; cs < classSize; cs++)
00568 {
00569 long item = NP.NPgetClass(i,cs);
00570 NPclass[0][cs] = finput.getWidth() - NP.NPgetFeature(item,0);
00571 std::cerr << "INPUTING " << NPclass[0][cs] << "\n";
00572 NPclass[1][cs] = NP.NPgetFeature(item,1);
00573 std::cerr << "INPUTING " << NPclass[1][cs] << "\n";
00574 NPclassP[0][cs] = &NPclass[0][cs];
00575 NPclassP[1][cs] = &NPclass[1][cs];
00576 }
00577 covHolder<float> covh;
00578 covh.resize(2,classSize,0.0F);
00579 covEstimate<float> CE(NPclassP,covh);
00580 CE.run();
00581 final = CE.returnCovSlice(0,1,final);
00582 }
00583 }
00584 Raster::VisuFloat(final,0,sformat("%s.outputCovK.pgm",argv[1]));
00585
00586
00587 std::vector<float> meanInterClassVar(priorClasses,0.0F);
00588 std::vector<float> stdInterClassVar(priorClasses,0.0F);
00589 std::vector<int> nInterClassVar(priorClasses,0);
00590
00591 std::vector<float> meanInterClusterVar(K,0.0F);
00592 std::vector<float> stdInterClusterVar(K,0.0F);
00593
00594
00595 for(int i = 0; i < (signed)K; i++)
00596 {
00597 for(int j = 0; j < NP.NPgetClassSize(i); j++)
00598 {
00599 long item = NP.NPgetClass(i,j);
00600 for(int f = 0; f < featureCount; f++)
00601 {
00602 if(((int)features[f][0] == (int)NP.NPgetFeature(item,0)) &&
00603 ((int)features[f][1] == (int)NP.NPgetFeature(item,1)))
00604 {
00605 if((NP.NPgetClassSize(i) > 0) &&
00606 (priorClassSize[priorItemMember[f]] > 0))
00607 {
00608 meanInterClassVar[priorItemMember[f]] += (float)i;
00609 stdInterClassVar[priorItemMember[f]] += pow((float)i,2);
00610 nInterClassVar[priorItemMember[f]]++;
00611 meanInterClusterVar[i] += (float)priorItemMember[f];
00612 stdInterClusterVar[i] += pow((float)
00613 priorItemMember[f],2);
00614 }
00615 }
00616 }
00617 }
00618 }
00619 float totalInterClassVar = 0.0F;
00620 float sumInterClassVar = 0.0F;
00621 float totalInterClusterVar = 0.0F;
00622 float sumInterClusterVar = 0.0F;
00623 for(int i = 0; i < priorClasses; i++)
00624 {
00625 if((nInterClassVar[i]-1) > 0)
00626 {
00627 meanInterClassVar[i] = meanInterClassVar[i]/nInterClassVar[i];
00628 stdInterClassVar[i] = (stdInterClassVar[i]/(nInterClassVar[i]))
00629 - pow(meanInterClassVar[i],2);
00630 totalInterClassVar += stdInterClassVar[i]*nInterClassVar[i];
00631 sumInterClassVar += nInterClassVar[i];
00632 LINFO("K INTERCLASS MEAN for class %d is %f",i,meanInterClassVar[i]);
00633 LINFO("K INTERCLASS VAR for class %d is %f",i,stdInterClassVar[i]);
00634 LINFO("K N = %d",priorClassSize[i]);
00635 }
00636 }
00637 float totalMeanInterClassVar = totalInterClassVar/sumInterClassVar;
00638 std::cout << "K Total interclass variance is "
00639 << totalMeanInterClassVar << "\n";
00640
00641 for(int i = 0; i < (signed)K; i++)
00642 {
00643 if((NP.NPgetClassSize(i)-1) > 0)
00644 {
00645 meanInterClusterVar[i] = meanInterClusterVar[i]
00646 /NP.NPgetClassSize(i);
00647 stdInterClusterVar[i] = (stdInterClusterVar[i]/
00648 (NP.NPgetClassSize(i)))
00649 - pow(meanInterClusterVar[i],2);
00650 totalInterClusterVar += stdInterClusterVar[i]
00651 *NP.NPgetClassSize(i);
00652 sumInterClusterVar += NP.NPgetClassSize(i);
00653 LINFO("K INTERCLUSTER MEAN for class %d is %f",
00654 i,meanInterClusterVar[i]);
00655 LINFO("K INTERCLUSTER VAR for class %d is %f",
00656 i,stdInterClusterVar[i]);
00657 LINFO("K N = %d",NP.NPgetClassSize(i));
00658 }
00659 }
00660 float totalMeanInterClusterVar = totalInterClusterVar/
00661 sumInterClusterVar;
00662 std::cout << "K Total intercluster variance is "
00663 << totalMeanInterClusterVar << "\n";
00664 Raster::VisuRGB(classMap,
00665 sformat("%s.CLASS_MAP_K.ppm",argv[1]));
00666 }
00667 }
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677