#include #include namespace icl { #ifdef WITH_IPP_OPTIMIZATION // {{{ ippi-function call templates template inline void ippiCall(const Img *src1, const Img *src2, Img32f *dst) // {{{ open { ICLASSERT_RETURN( src1); ICLASSERT_RETURN( src2); ICLASSERT_RETURN( dst ); ICLASSERT_RETURN( src1 && src2 && dst ); ICLASSERT_RETURN( src1->getROISize() == dst->getROISize() ); ICLASSERT_RETURN( src1->getChannels() == dst->getChannels() ); ICLASSERT_RETURN( src1->getChannels() == src2->getChannels() ); Size srcROI=src1->getSize()-src2->getSize(); //srcROI.width+=1; //srcROI.height+=1; for (int c=src1->getChannels()-1; c >= 0; --c) { ippiFunc (src1->getROIData (c), src1->getLineStep(), srcROI, src2->getROIData (c), src2->getLineStep(), src2->getROISize(), dst->getROIData (c), dst->getLineStep()); } } // }}} // }}} // {{{ IPP Calls void Proximity::SqrDistanceFull_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::SqrDistanceSame_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::SqrDistanceValid_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrFull_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrSame_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrValid_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrFull_NormLevel (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrSame_NormLevel (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrValid_NormLevel (const Img8u *src1, const Img8u *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::SqrDistanceFull_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::SqrDistanceSame_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::SqrDistanceValid_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrFull_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrSame_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrValid_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrFull_NormLevel (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrSame_NormLevel (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } void Proximity::CrossCorrValid_NormLevel (const Img32f *src1, const Img32f *src2, Img32f *dst){ ippiCall(src1,src2,dst); } // }}} #else // {{{ C++ fallback void Proximity::SqrDistanceFull_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "SqrDistanceFull_Norm is not implemented without IPP optimization"; } void Proximity::SqrDistanceSame_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "SqrDistanceSame_Norm is not implemented without IPP optimization"; } void Proximity::SqrDistanceValid_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "SqrDistanceValid_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrFull_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "CrossCorrFull_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrSame_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "CrossCorrSame_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrValid_Norm (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "CrossCorrValid_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrFull_NormLevel (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "CrossCorrFull_NormLevel is not implemented without IPP optimization"; } void Proximity::CrossCorrSame_NormLevel (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "CrossCorrSame_NormLevel is not implemented without IPP optimization"; } void Proximity::CrossCorrValid_NormLevel (const Img8u *src1, const Img8u *src2, Img32f *dst){ #warning "CrossCorrValid_NormLevel is not implemented without IPP optimization"; } void Proximity::SqrDistanceFull_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "SqrDistanceFull_Norm is not implemented without IPP optimization"; } void Proximity::SqrDistanceSame_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "SqrDistanceSame_Norm is not implemented without IPP optimization"; } void Proximity::SqrDistanceValid_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "SqrDistanceValid_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrFull_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "CrossCorrFull_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrSame_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "CrossCorrSame_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrValid_Norm (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "CrossCorrValid_Norm is not implemented without IPP optimization"; } void Proximity::CrossCorrFull_NormLevel (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "CrossCorrFull_NormLevel is not implemented without IPP optimization"; } void Proximity::CrossCorrSame_NormLevel (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "CrossCorrSame_NormLevel is not implemented without IPP optimization"; } void Proximity::CrossCorrValid_NormLevel (const Img32f *src1, const Img32f *src2, Img32f *dst){ #warning "CrossCorrValid_NormLevel is not implemented without IPP optimization"; } // }}} #endif // {{{ ImgBase* version void Proximity::SqrDistanceFull_Norm (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: SqrDistanceFull_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: SqrDistanceFull_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::SqrDistanceValid_Norm (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: SqrDistanceValid_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: SqrDistanceValid_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::SqrDistanceSame_Norm (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: SqrDistanceSame_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: SqrDistanceSame_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::CrossCorrFull_NormLevel (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: CrossCorrFull_NormLevel(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: CrossCorrFull_NormLevel(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::CrossCorrValid_NormLevel (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: CrossCorrValid_NormLevel(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: CrossCorrValid_NormLevel(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::CrossCorrSame_NormLevel (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: CrossCorrSame_NormLevel(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: CrossCorrSame_NormLevel(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::CrossCorrFull_Norm (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; ICLASSERT_RETURN( (*ppoDst)->getDepth() == depth32f); switch (poSrc1->getDepth()){ case depth8u: CrossCorrFull_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: CrossCorrFull_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::CrossCorrValid_Norm (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: CrossCorrValid_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: CrossCorrValid_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} void Proximity::CrossCorrSame_Norm (const ImgBase *poSrc1, const ImgBase *poSrc2, ImgBase **ppoDst) // {{{ open { FUNCTION_LOG(""); ICLASSERT_RETURN( poSrc1->getDepth() == poSrc1->getDepth()); if (!prepare (ppoDst, poSrc1,depth32f)) return; switch (poSrc1->getDepth()){ case depth8u: CrossCorrSame_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; case depth32f: CrossCorrSame_Norm(poSrc1->asImg(),poSrc2->asImg(),(*ppoDst)->asImg()); break; default: ICL_INVALID_FORMAT; break; } } // }}} // }}} }