static void Test1dTransform( T *thrMap, int groupSize, int templateWindowSizeSq, BlockMatch<T, DT, CT> *bm, BlockMatch<T, DT, CT> *bmOrig, int expectedNonZeroCount = -1) { if (expectedNonZeroCount < 0) expectedNonZeroCount = groupSize * templateWindowSizeSq; // Test group size short sumNonZero = 0; T *thrMapPtr1D = thrMap + (groupSize - 1) * templateWindowSizeSq; for (int n = 0; n < templateWindowSizeSq; n++) { switch (groupSize) { case 16: HaarTransform1D::ForwardTransform16(bm, n); sumNonZero += HardThreshold<16>(bm, n, thrMapPtr1D); HaarTransform1D::InverseTransform16(bm, n); break; case 8: HaarTransform1D::ForwardTransform8(bm, n); sumNonZero += HardThreshold<8>(bm, n, thrMapPtr1D); HaarTransform1D::InverseTransform8(bm, n); break; case 4: HaarTransform1D::ForwardTransform4(bm, n); sumNonZero += HardThreshold<4>(bm, n, thrMapPtr1D); HaarTransform1D::InverseTransform4(bm, n); break; case 2: HaarTransform1D::ForwardTransform2(bm, n); sumNonZero += HardThreshold<2>(bm, n, thrMapPtr1D); HaarTransform1D::InverseTransform2(bm, n); break; default: HaarTransform1D::ForwardTransformN(bm, n, groupSize); sumNonZero += HardThreshold(bm, n, thrMapPtr1D, groupSize); HaarTransform1D::InverseTransformN(bm, n, groupSize); } } // Assert transform if (expectedNonZeroCount == groupSize * templateWindowSizeSq) { for (int i = 0; i < groupSize; ++i) for (int j = 0; j < templateWindowSizeSq; ++j) ASSERT_EQ(bm[i][j], bmOrig[i][j]); } // Assert shrinkage ASSERT_EQ(sumNonZero, expectedNonZeroCount); }
void rThresAndUnify(const double * addon, const int * signalSize, int * addonPeaks, const int * basePeaks, const double * threshold, const int * windowSize, int * uniPeaks) { HardThreshold(addon, *threshold, addonPeaks); UnifyLevels(basePeaks, addonPeaks, *windowSize, *signalSize, uniPeaks); }//rThresAndUnify