Exemplo n.º 1
0
void STWarp<T>::computePartialDerivatives( const WarpingField<T> &warpField,
                                        Video<T> &Bx,
                                        Video<T> &By,
                                        Video<T> &Bt,
                                        Video<T> &C) {
    VideoProcessing::dx(*videoB,Bx,true);
    VideoProcessing::dy(*videoB,By,true);
    VideoProcessing::dt(*videoB,Bt,true);

    Video<stwarp_video_t> warpedB(videoA->size());

    C.copy(*videoA);
    VideoProcessing::backwardWarp(*videoB,warpField,warpedB);
    C.subtract(warpedB);
    // TODO: out of bounds set to 0

    Video<T> temp(videoA->size());
    VideoProcessing::backwardWarp(Bx,warpField,temp);
    Bx.copy(temp);

    temp.reset(0);
    VideoProcessing::backwardWarp(By,warpField,temp);
    By.copy(temp);

    temp.reset(0);
    if( !params.bypassTimeWarp ){
        VideoProcessing::backwardWarp(Bt,warpField,temp);
    }
    Bt.copy(temp);
}
Exemplo n.º 2
0
void STWarp<T>::buildPyramid(vector<vector<int> > pyrSizes,
        vector<Video<stwarp_video_t>*> &pyramidA, 
        vector<Video<stwarp_video_t>*> &pyramidB
        ) const{
    int n = pyrSizes.size();
    if(params.verbosity > 0) {
        printf("+ Building ST-pyramids with %d levels...",n);
    }
    pyramidA[0] = videoA;
    pyramidB[0] = videoB;
    Video<stwarp_video_t> copy;
    for (int i = 1; i < n; ++i) {
        pyramidA[i] = 
            new Video<stwarp_video_t>(pyrSizes[i][0],
            pyrSizes[i][1],pyrSizes[i][2],dimensions[3]);
        pyramidB[i] = 
            new Video<stwarp_video_t>(pyrSizes[i][0],
            pyrSizes[i][1],pyrSizes[i][2],dimensions[3]);

        // Lowpass and downsample
        copy.copy(*pyramidA[i-1]);
        VideoProcessing::resize(copy,pyramidA[i]);
        copy.copy(*pyramidB[i-1]);
        VideoProcessing::resize(copy,pyramidB[i]);
    }
    if(params.verbosity >0) {
        printf("done.\n");
    }
}