int Image32::BeierNeelyMorph(const Image32& source,const Image32& destination,const OrientedLineSegmentPairs& olsp,const float& timeStep,Image32& outputImage) {
    OrientedLineSegmentPairs olsp1,olsp2;
    OrientedLineSegment ols;
    Image32 temp1,temp2;
    int i;

    // Generate the in-between line segment pairs
    if(!olsp1.setCount(olsp.count) || !olsp2.setCount(olsp.count)) {
        return 0;
    }
    for(i=0; i<olsp.count; i++) {
        olsp1.segments1[i]=olsp.segments1[i];
        olsp2.segments1[i]=olsp.segments2[i];
        OrientedLineSegment::Blend(olsp.segments1[i],olsp.segments2[i],timeStep,ols);
        olsp1.segments2[i]=ols;
        olsp2.segments2[i]=ols;
    }

    // Generate the in-between morphs
    if(!source.Warp(olsp1,temp1) || !destination.Warp(olsp2,temp2)) {
        return 0;
    }

    // Cross-dissolve to get the final image
    return CrossDissolve(temp1,temp2,timeStep,outputImage);
}