00001 #ifndef Impala_Core_Array_Watershed_h
00002 #define Impala_Core_Array_Watershed_h
00003
00004 #include "Core/Array/Pattern/PatQueueBased.h"
00005 #include "Core/Array/Trait/QbWatershed.h"
00006 #include "Core/Array/Pattern/PatNgbOp2d.h"
00007 #include "Core/Array/Trait/NgbLWshed.h"
00008 #include "Core/Array/PixMinMax.h"
00009
00010 namespace Impala
00011 {
00012 namespace Core
00013 {
00014 namespace Array
00015 {
00016
00017
00022 template<class DstArrayT, class SrcArrayT>
00023 inline void
00024 Watershed(DstArrayT*& dst, SrcArrayT* src, int conn)
00025 {
00026 typedef typename SrcArrayT::ArithType ArithT;
00027
00028
00029 ArithT minVal, maxVal;
00030 PixMinMax(src, &minVal, &maxVal);
00031
00032
00033 Trait::QbWatershed<DstArrayT, SrcArrayT, SrcArrayT>
00034 qb(src->CW(), src->CH(), minVal, maxVal);
00035 SrcArrayT* src2 = ArrayClone<SrcArrayT>(src);
00036 Pattern::PatQueueBased(dst, src, src2, qb, conn);
00037 delete src2;
00038
00039
00040
00041 Trait::NgbLWshed<DstArrayT, DstArrayT> lwshed(conn, Trait::WSHEDVAL);
00042 Pattern::PatNgbOp2d(dst, dst, lwshed);
00043 }
00044
00045 }
00046 }
00047 }
00048
00049 #endif