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

void Impala::Core::VideoSet::ShotSegmenter::UpdateHistograms ( Stream::RgbDataSrc src  )  [inline, private]

Definition at line 193 of file ShotSegmenter.h.

References BlurImage(), Impala::Core::Stream::RgbDataSrc::DataPtr(), Impala::Core::Stream::RgbDataSrc::FrameHeight(), Impala::Core::Stream::RgbDataSrc::FrameWidth(), Impala::Core::Histogram::MakeHistogram1d(), mBlurSigma, mHistograms, mHistPerFrame, mPyramid, mWindowSize, Impala::Core::Histogram::Histogram1dTem< ElemT >::Normalize(), Impala::Core::Geometry::RectanglePyramid::NrLevels(), Impala::Core::Geometry::RectanglePyramid::NrRects(), Impala::Core::Array::ProjectRange(), and Impala::Core::Geometry::RectanglePyramid::Rect().

Referenced by HandleNewFrame().

00194     {
00195         typedef Array::Array2dVec3Real64 Array2dVec3Real64;
00196         typedef Array::Array2dVec3UInt8 Array2dVec3UInt8;
00197 
00198         HistType** tmpHist;
00199         tmpHist = new HistType*[mHistPerFrame];
00200         // Back up the first frame's histogram pointers
00201         for (int i=0; i<mHistPerFrame ;i++)
00202             tmpHist[i] = mHistograms[i];
00203         // Shift the rest of the histograms
00204         for (int i=0 ; i<(mWindowSize-1)*mHistPerFrame ; i++)
00205             mHistograms[i] = mHistograms[i+mHistPerFrame];
00206 
00207         for (int i=(mWindowSize-1)*mHistPerFrame ; i<mWindowSize*mHistPerFrame ;
00208              i++)
00209         {
00210             mHistograms[i] = tmpHist[i - (mWindowSize - 1) * mHistPerFrame];
00211         }
00212         delete [] tmpHist;
00213 
00214         Array2dVec3Real64* srcWrap =
00215             Array::ArrayCreate<Array2dVec3Real64>(src->FrameWidth(),
00216                                                   src->FrameHeight(), 0, 0);
00217 
00218         Array::MakeFromData2<Array2dVec3Real64,Array2dVec3UInt8>(srcWrap,
00219                                                                  src->DataPtr());
00220 
00221         Array::Array2dScalarReal64* srcO1 = 0;
00222         Array::Array2dScalarReal64* srcO2 = 0;
00223         Array::Array2dScalarReal64* srcO3 = 0;
00224 
00225         Array::ProjectRange(srcO1, srcWrap, 1);
00226         Array::ProjectRange(srcO2, srcWrap, 2);
00227         Array::ProjectRange(srcO3, srcWrap, 3);
00228     
00229         BlurImage(srcO1, mBlurSigma);
00230         BlurImage(srcO2, mBlurSigma);
00231         BlurImage(srcO3, mBlurSigma);
00232 
00233         int k = (mWindowSize - 1) * mHistPerFrame - 1;
00234         for (int i=0 ; i<mPyramid.NrLevels() ; i++)
00235         {
00236             for (int j=0 ; j<mPyramid.NrRects(i) ; j++)
00237             {
00238                 MakeHistogram1d(mHistograms[++k], srcO1, mPyramid.Rect(i, j));
00239                 mHistograms[k]->Normalize();
00240                 
00241                 MakeHistogram1d(mHistograms[++k], srcO2, mPyramid.Rect(i, j));
00242                 mHistograms[k]->Normalize();
00243 
00244                 MakeHistogram1d(mHistograms[++k], srcO3, mPyramid.Rect(i, j));
00245                 mHistograms[k]->Normalize();
00246             }
00247         }
00248 
00249         delete srcWrap;
00250         delete srcO1;
00251         delete srcO2;
00252         delete srcO3;
00253     }

Here is the call graph for this function:


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