Home || Architecture || Video Search || Visual Search || Scripts || Applications || 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::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:


Generated on Fri Mar 19 10:50:44 2010 for ImpalaSrc by  doxygen 1.5.1