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);
    }
Пример #2
0
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