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