Implements Impala::Visualization::AppControlSrc. Definition at line 224 of file mainSrc.cpp. References Impala::Core::Array::ArrayListDelete(), Impala::Core::Array::C, Impala::Core::Array::ArraySystem::CheckMemoryUsageSinceMark(), Impala::Core::Array::ColorSegmentation(), Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::CPB(), Impala::Core::Stream::RgbDataSrc::DataPtr(), Impala::Core::Array::Dilation(), Impala::Application::Src::DoMaxPoints(), Impala::Core::Array::Erosion(), Impala::Core::Stream::RgbDataSrc::FrameHeight(), Impala::Core::Stream::RgbDataSrc::FrameWidth(), Impala::Application::Src::gBorderSize, Impala::Application::Src::gCmd, Impala::Application::Src::gDispMode(), Impala::Core::Array::GeodesicDistanceTransform(), Impala::Util::Database::GetInstance(), Impala::Core::Array::GetRgbPixels(), Impala::Visualization::AppControlSrc::GetSrc(), Impala::Application::Src::gK, Impala::Application::Src::gPrecision, Impala::Application::Src::gSigma, Impala::Application::Src::gSigmaA, Impala::Application::Src::gUseRecGauss, Impala::Application::Src::gVerbose, Impala::Core::Array::ArraySystem::Instance(), Impala::Core::Array::InvCompDer(), Impala::Core::Array::Label(), Impala::MakeString(), Impala::Core::Array::ArraySystem::MarkMemoryUsage(), Impala::Core::Matrix::MatSet(), mCircleView1, mCircleView2, mCircleView4, mCircleView5, mPList1, mPList2, mPList4, mPList5, mSrcWindow, mTGauss, mViewScale, Impala::Core::Geometry::NEAREST, Impala::Core::Array::ProjectRange(), Impala::Core::Array::RGB2Intensity(), Impala::Application::DemoCamera2d::rgbList, Impala::Core::Array::Rotate(), Impala::Core::Stream::SeqConvKernel(), Impala::Core::Array::Set(), Impala::Core::Array::SKIZ(), Impala::Core::Array::TextureAddZero, Impala::Core::Array::Threshold(), Impala::Core::Array::Watershed(), Impala::Core::Array::WriteJpg(), Impala::Core::Array::WritePgm(), Impala::Core::Array::WritePng(), and Impala::Core::Array::WriteRaw(). 00225 { 00226 UpdateView(0, GetSrc()->DataPtr(), GetSrc()->FrameWidth(), 00227 GetSrc()->FrameHeight(), mViewScale); 00228 00229 Util::Database* db = &Util::Database::GetInstance(); 00230 ArraySystem& aSys = ArraySystem::Instance(); 00231 aSys.MarkMemoryUsage(gVerbose > 0); 00232 00233 Array2dVec3UInt8* srcWrap = ArrayCreate<Array2dVec3UInt8> 00234 (GetSrc()->FrameWidth(), GetSrc()->FrameHeight(), 0, 0, 00235 GetSrc()->DataPtr(), true); 00236 Array2dVec3Real64* srcV3R64 = ArrayCreate<Array2dVec3Real64> 00237 (GetSrc()->FrameWidth(), GetSrc()->FrameHeight(), gBorderSize, 00238 gBorderSize); 00239 MakeFromData2<Array2dVec3Real64,Array2dVec3UInt8>(srcV3R64, 00240 GetSrc()->DataPtr()); 00241 Array2dScalarReal64* srcSR64 = 0; 00242 RGB2Intensity(srcSR64, srcV3R64); 00243 00244 00245 /* 00246 if (gCmd == "keypoints") 00247 { 00248 if (gVerbose > 0) 00249 std::cout << "doing keypoints" << std::endl; 00250 mAList.clear(); 00251 Array2dScalarReal64* points = 0; 00252 Array2dScalarUInt8* featVecs = 0; 00253 KeypointsLowe(points, featVecs, srcWrap, false); 00254 for (int r=0 ; r<points->CH() ; r++) 00255 { 00256 Real64* pointPtr = points->CPB(0, r); 00257 ArrowR a; 00258 a.mPX = *pointPtr++; 00259 a.mPY = *pointPtr++; 00260 //a.mLen = 6 * *pointPtr++; // produces proper length? 00261 a.mLen = *pointPtr++; 00262 a.mDir = *pointPtr++; 00263 mAList.push_back(a); 00264 } 00265 delete points; 00266 delete featVecs; 00267 if (mArrowView == 0) 00268 mArrowView = new ViewListenerWithArrows(&mAList, oglRED); 00269 UpdateView(1, srcSR64, "Stretch", mViewScale, mArrowView); 00270 } 00271 */ 00272 00273 if (gCmd == "tgauss") 00274 { 00275 if (gVerbose > 0) 00276 std::cout << "doing tgauss" << std::endl; 00277 mSrcWindow->FollowSrc(); 00278 Array2dVec3Real64* res = 0; 00279 SeqConvKernel(res, mSrcWindow, mTGauss); 00280 int v = 1; 00281 UpdateView(v++, res, "Stretch", mViewScale); 00282 for (int d=1 ; d<=3 ; d++) 00283 { 00284 Array2dScalarReal64* p = 0; 00285 ProjectRange(p, res, d); 00286 UpdateView(v++, p, "Stretch", mViewScale); 00287 delete p; 00288 } 00289 delete res; 00290 for (int i=0 ; i<mSrcWindow->WindowSize() ; i++) 00291 UpdateView(v++, mSrcWindow->DataArrayWindow(i), "Direct", 00292 mViewScale); 00293 } 00294 00295 if (gCmd == "segment") 00296 { 00297 if (gVerbose > 0) 00298 std::cout << "doing segment" << std::endl; 00299 ColorSegmentationAlgorithm segAlg = TextureAddZero; 00300 ColorSegmentationInvariant invariantType = C; 00301 //ColorSegmentationAlgorithm segAlg = Texture; 00302 //ColorSegmentationInvariant invariantType = E; 00303 //double minRegionFraction = 0.05; 00304 double minRegionFraction = 0.01; 00305 //double threshold = 7.5; 00306 double threshold = 6.0; 00307 bool gUseGauss = false; 00308 std::cout << "segAlg = " << MakeString(segAlg) << ", invariantType = " 00309 << MakeString(invariantType) << std::endl; 00310 std::cout << "minRegionFraction = " << minRegionFraction 00311 << ", threshold = " << threshold << std::endl; 00312 Array2dVec3UInt8* dst = 0; 00313 std::vector<Array2dVec3UInt8*> dispList; 00314 ColorSegmentation(dst, srcV3R64, segAlg, invariantType, 00315 minRegionFraction, threshold, gUseGauss, 00316 &dispList); 00317 UpdateView(1, dst, "Direct", mViewScale); 00318 for (int i=0 ; i<dispList.size() ; i++) 00319 UpdateView(2+i, dispList[i], "Direct", mViewScale); 00320 delete dst; 00321 ArrayListDelete(&dispList); 00322 } 00323 00324 if (gCmd == "inv") 00325 { 00326 if (gVerbose > 0) 00327 std::cout << "doing inv" << std::endl; 00328 Array2dVec3Real64* srcCopy = 0; 00329 Set(srcCopy, srcV3R64); 00330 00331 std::vector<Array2dScalarReal64*> rgbList; 00332 rgbList = InvCompDer(srcV3R64, gSigma, gPrecision, gUseRecGauss); 00333 Array2dScalarReal64* im = 0; 00334 00335 HarrisObj<Array2dScalarReal64>(im, rgbList, gSigmaA, gK, 00336 gUseRecGauss); 00337 mPList1.clear(); 00338 DoMaxPoints(srcV3R64, im, 1, std::back_inserter(mPList1)); 00339 if (mCircleView1 == 0) 00340 mCircleView1 = new ViewListenerWithCircles(&mPList1, 5, 00341 oglRED); 00342 UpdateView(1, im, gDispMode, mViewScale, mCircleView1); 00343 00344 HarrisSperical<Array2dScalarReal64>(im, rgbList, gSigmaA, gK, 00345 gUseRecGauss); 00346 mPList2.clear(); 00347 DoMaxPoints(srcV3R64, im, 2, std::back_inserter(mPList2)); 00348 if (mCircleView2 == 0) 00349 mCircleView2 = new ViewListenerWithCircles(&mPList2, 5, 00350 oglGREEN); 00351 UpdateView(2, im, gDispMode, mViewScale, mCircleView2); 00352 00353 UpdateView(0, srcV3R64, "Direct", mViewScale); 00354 UpdateView(3, srcCopy, "Direct", mViewScale); // dummy to init viewer 00355 00356 HarrisRGB<Array2dScalarReal64>(im, rgbList, gSigmaA, gK, 00357 gUseRecGauss); 00358 mPList4.clear(); 00359 DoMaxPoints(srcCopy, im, 2, std::back_inserter(mPList4)); 00360 if (mCircleView4 == 0) 00361 mCircleView4 = new ViewListenerWithCircles(&mPList4, 5, 00362 oglGREEN); 00363 UpdateView(4, im, gDispMode, mViewScale, mCircleView4); 00364 00365 HarrisOpponent<Array2dScalarReal64>(im, rgbList, gSigmaA, gK, 00366 gUseRecGauss); 00367 mPList5.clear(); 00368 DoMaxPoints(srcCopy, im, 1, std::back_inserter(mPList5)); 00369 if (mCircleView5 == 0) 00370 mCircleView5 = new ViewListenerWithCircles(&mPList5, 5, 00371 oglRED); 00372 UpdateView(5, im, gDispMode, mViewScale, mCircleView5); 00373 00374 UpdateView(3, srcCopy, "Direct", mViewScale); 00375 00376 delete srcCopy; 00377 delete im; 00378 ArrayListDelete(&rgbList); 00379 } 00380 00381 if (gCmd == "write") 00382 { 00383 if (gVerbose > 0) 00384 std::cout << "doing write" << std::endl; 00385 WriteRaw(srcV3R64, "v3r64.raw", db, 1); 00386 WriteRaw(srcSR64, "sr64.raw", db, 1); 00387 UpdateView(1, srcSR64, "Stretch", mViewScale); 00388 } 00389 00390 if (gCmd == "erosion") 00391 { 00392 if (gVerbose > 0) 00393 std::cout << "doing erosion" << std::endl; 00394 int cw = 5; 00395 int ch = 9; 00396 Array2dScalarReal64* ker = ArrayCreate<Array2dScalarReal64>(cw, ch); 00397 Core::Matrix::MatSet(ker, 0); 00398 Array2dScalarReal64* res = 0; 00399 Erosion(res, srcSR64, ker); 00400 //Percentile(res, srcSR64, 5, 0.95); 00401 UpdateView(1, res, "Stretch", mViewScale); 00402 delete ker; 00403 delete res; 00404 } 00405 00406 if (gCmd == "dilation") 00407 { 00408 if (gVerbose > 0) 00409 std::cout << "doing dilation" << std::endl; 00410 int cw = 5; 00411 int ch = 9; 00412 Array2dScalarReal64* ker = ArrayCreate<Array2dScalarReal64>(cw, ch); 00413 Core::Matrix::MatSet(ker, 0); 00414 Array2dScalarReal64* res = 0; 00415 Dilation(res, srcSR64, ker); 00416 UpdateView(1, res, "Stretch", mViewScale); 00417 delete ker; 00418 delete res; 00419 } 00420 00421 if (gCmd == "threshold") 00422 { 00423 if (gVerbose > 0) 00424 std::cout << "doing threshold" << std::endl; 00425 Array2dScalarUInt8* binIm = 0; 00426 Threshold(binIm, srcSR64, 128); 00427 UpdateView(1, binIm, "Binary", mViewScale); 00428 delete binIm; 00429 } 00430 00431 if (gCmd == "label") 00432 { 00433 if (gVerbose > 0) 00434 std::cout << "doing label" << std::endl; 00435 Array2dScalarUInt8* binIm = 0; 00436 Threshold(binIm, srcSR64, 128); 00437 UpdateView(1, binIm, "Binary", mViewScale); 00438 Array2dScalarInt32* labIm = ArrayClone<Array2dScalarInt32>(binIm); 00439 Timer tim(1); 00440 Label(labIm, binIm, 8); 00441 std::cout << "time: " << tim.SplitTime() << std::endl; 00442 UpdateView(2, labIm, "Label", mViewScale); 00443 delete binIm; 00444 delete labIm; 00445 } 00446 00447 if (gCmd == "watershed") 00448 { 00449 if (gVerbose > 0) 00450 std::cout << "doing watershed" << std::endl; 00451 Array2dScalarInt32* srcIm = 0; 00452 Set(srcIm, srcSR64); 00453 Array2dScalarInt32* dstIm = 0; 00454 Watershed(dstIm, srcIm, 8); 00455 UpdateView(1, dstIm, "Stretch", mViewScale); 00456 delete srcIm; 00457 delete dstIm; 00458 } 00459 00460 if (gCmd == "geodesic") 00461 { 00462 if (gVerbose > 0) 00463 std::cout << "doing geodesic" << std::endl; 00464 Array2dScalarInt32* srcIm = 0; 00465 Set(srcIm, srcSR64); 00466 Array2dScalarInt32* dstIm = 0; 00467 GeodesicDistanceTransform(dstIm, srcIm, 8); 00468 UpdateView(1, dstIm, "Stretch", mViewScale); 00469 delete srcIm; 00470 delete dstIm; 00471 } 00472 00473 if (gCmd == "skiz") 00474 { 00475 if (gVerbose > 0) 00476 std::cout << "doing skiz" << std::endl; 00477 Array2dScalarInt32* srcIm = 0; 00478 Set(srcIm, srcSR64); 00479 Array2dScalarInt32* dstIm = 0; 00480 SKIZ(dstIm, srcIm, 8); 00481 UpdateView(1, dstIm, "Stretch", mViewScale); 00482 delete srcIm; 00483 delete dstIm; 00484 } 00485 00486 if (gCmd == "rotate") 00487 { 00488 if (gVerbose > 0) 00489 std::cout << "doing rotate" << std::endl; 00490 Array2dScalarReal64* res = 0; 00491 Rotate(res, srcSR64, 45.0, NEAREST, false, 0); 00492 UpdateView(1, res, "Stretch", mViewScale); 00493 delete res; 00494 } 00495 00496 if (gCmd == "jpg") 00497 { 00498 if (gVerbose > 0) 00499 std::cout << "doing jpg" << std::endl; 00500 Array2dVec3UInt8* buf = ArrayCreate<Array2dVec3UInt8> 00501 (GetSrc()->FrameWidth(), GetSrc()->FrameHeight()); 00502 GetRgbPixels(srcV3R64, buf->CPB(), "Direct"); 00503 char fileName[50]; 00504 sprintf(fileName, "frame_%06d.jpg", GetSrc()->FrameNr()); 00505 WriteJpg(buf, String(fileName), db); 00506 delete buf; 00507 } 00508 00509 if (gCmd == "png") 00510 { 00511 if (gVerbose > 0) 00512 std::cout << "doing png" << std::endl; 00513 Array2dVec3UInt8* buf = ArrayCreate<Array2dVec3UInt8> 00514 (GetSrc()->FrameWidth(), GetSrc()->FrameHeight()); 00515 GetRgbPixels(srcV3R64, buf->CPB(), "Direct"); 00516 char fileName[50]; 00517 sprintf(fileName, "frame_%06d.png", GetSrc()->FrameNr()); 00518 WritePng(buf, String(fileName), db); 00519 delete buf; 00520 } 00521 00522 if (gCmd == "pgm") 00523 { 00524 if (gVerbose > 0) 00525 std::cout << "doing pgm" << std::endl; 00526 Array2dVec3UInt8* buf = ArrayCreate<Array2dVec3UInt8> 00527 (GetSrc()->FrameWidth(), GetSrc()->FrameHeight()); 00528 GetRgbPixels(srcSR64, buf->CPB(), "Direct"); 00529 char fileName[50]; 00530 sprintf(fileName, "frame_%06d.pgm", GetSrc()->FrameNr()); 00531 WritePgm(buf, String(fileName)); 00532 delete buf; 00533 } 00534 00535 if (gCmd == "stretch") 00536 { 00537 if (gVerbose > 0) 00538 std::cout << "doing stretch" << std::endl; 00539 UpdateView(1, srcSR64, "Stretch", mViewScale); 00540 } 00541 00542 delete srcV3R64; 00543 delete srcSR64; 00544 delete srcWrap; 00545 aSys.CheckMemoryUsageSinceMark(gVerbose > 0); 00546 }
Here is the call graph for this function:
|