Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

PatGenConv2d.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Array_Pattern_PatGenConv2d_h
00002 #define Impala_Core_Array_Pattern_PatGenConv2d_h
00003 
00004 #include "Core/Array/CheckBorderSize.h"
00005 #include "Core/Array/Pattern/PatSetBorder.h"
00006 #include "Core/Array/Pattern/FuncGenConv2d.h"
00007 
00008 #ifdef PX_HORUS_USED
00009 #include "Core/Array/Pattern/PxArrayFunc.h"
00010 #include "Core/Array/Pattern/PxStateTrans.h"
00011 #endif
00012 
00013 namespace Impala
00014 {
00015 namespace Core
00016 {
00017 namespace Array
00018 {
00019 namespace Pattern
00020 {
00021 
00022 
00023 template<class DstArrayT, class SrcArrayT, class KerArrayT,
00024          class PixOpT, class RedOpT>
00025 inline void
00026 PatGenConv2d(DstArrayT*& dst, SrcArrayT* src, KerArrayT* ker,
00027              PixOpT& pixOp, RedOpT& redOp, BorderType borderType = BORDERMIRROR)
00028 {
00029     int numX = ArrayCW(ker) / 2;
00030     int numY = ArrayCH(ker) / 2;
00031     SrcArrayT* checkedSrc = CheckBorderSize(src, numX, numY);
00032 
00033     if ((dst == 0) || (dst == checkedSrc))
00034         dst = ArrayClone<DstArrayT>(checkedSrc);
00035 
00036 #ifdef PX_HORUS_USED
00037     if (!PxRunParallel()) {                         // run sequential
00038 #endif
00039         /*
00040         if (borderType == BORDERCONSTANT)
00041             PatSetBorder(checkedSrc, numX, numY, borderType,
00042                          redOp.NeutralElement(), redOp.NeutralElement(),
00043                          redOp.NeutralElement(), redOp.NeutralElement(),
00044                          redOp.NeutralElement());
00045         else
00046         */
00047             PatSetBorder(checkedSrc, numX, numY);
00048         FuncGenConv2dDispatch(dst, checkedSrc, ker, pixOp, redOp);
00049 
00050 #ifdef PX_HORUS_USED
00051     } else {                                        // run parallel
00052         PxArrayPreStateTrans(checkedSrc, PAR_PART, STRONG);
00053         PxArrayPreStateTrans(dst, PAR_PART, WEAK);
00054         PatSetBorder(PxArrayPD(checkedSrc), numX, numY);
00055         FuncGenConv2dDispatch(PxArrayPD(dst),
00056                         PxArrayPD(checkedSrc), ker, pixOp, redOp);
00057         if (PxArrayPD(checkedSrc) != PxArrayPD(src))
00058             PxArrayDeletePD(checkedSrc);
00059         PxArrayPostStateTrans(dst);
00060 
00061         if (!PxRunLazyParallel()) {
00062             PxArrayForceNonDistributed(src);
00063             PxArrayForceNonDistributed(dst);
00064         }
00065     }
00066 #endif
00067 
00068     if (checkedSrc != src)
00069         delete checkedSrc;
00070 }
00071 
00072 } // namespace Pattern
00073 } // namespace Array
00074 } // namespace Core
00075 } // namespace Impala
00076 
00077 #endif

Generated on Fri Mar 19 09:30:50 2010 for ImpalaSrc by  doxygen 1.5.1