Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

void Impala::Application::Src::WindowSrc::HandleNewFrame (  )  [inline, virtual]

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:


Generated on Thu Jan 13 09:16:18 2011 for ImpalaSrc by  doxygen 1.5.1