51 void setOutsideValue(T val);
69 void setOutput(
int,
int,
int,
bool addseed);
71 int getNextWorkCompartment();
72 void returnCompartment(
int);
74 int getWorkCompartment(
int,
int,
int)
const;
121 template <
class T>
inline 126 , threshold_(threshold)
127 , aboveisovalue_(max)
128 , insideval_(
mUdf(T))
129 , use6neighbors_(true)
131 , sz0_(input.info().getSize(0))
132 , sz1_(input.info().getSize(1))
133 , sz2_(input.info().getSize(2))
157 for (
int idx=0; idx<nrcompartments; idx++ )
163 std::random_shuffle(
mVarLenArr(arr), arr+nrcompartments );
164 for (
int idx=0; idx<nrcompartments; idx++ )
169 template <
class T>
inline 177 template <
class T>
inline 184 template <
class T>
inline 192 template <
class T>
inline 199 template <
class T>
inline 202 if ( x0<0 || x0>=
sz0_ || x1<0 || x1>=
sz1_ || x2<0 || x2>=
sz2_ )
228 const T inputval =
input_.get( x0, x1, x2 );
235 output_.set( x0, x1, x2, val );
241 int seed[] = { x0, x1, x2 };
250 template <
class T>
inline 256 bool nothingleft =
true;
288 template <
class T>
inline 298 template <
class T>
inline 327 for (
int i=-1; i<=1; i++ )
329 for (
int j=-1; j<=1; j++ )
331 for (
int k=-1; k<=1; k++ )
333 const char nrzeros = !i + !j + !k;
338 setOutput( arrpos[0]+i, arrpos[1]+j, arrpos[2]+k,
Threads::ConditionVar compartmentlock_
Definition: array3dfloodfill.h:104
Is an object that faciliates many threads to wait for something to happen.
Definition: thread.h:108
int compsz1_
Definition: array3dfloodfill.h:86
Lock that permits multiple readers to lock the object at the same time, but it will not allow any rea...
Definition: thread.h:141
bool useinputval_
Definition: array3dfloodfill.h:79
#define od_int64
Definition: plftypes.h:34
int nrcomp2_
Definition: array3dfloodfill.h:87
#define mMaxNrComp
Definition: array3dfloodfill.h:22
~Array3DFloodfill()
Definition: array3dfloodfill.h:170
void addSeed(EM::SectionID, EM::SubID)
virtual bool shouldContinue()
int sz1_
Definition: array3dfloodfill.h:91
bool convReadToWriteLock()
int compsz0_
Definition: array3dfloodfill.h:84
int getPos(int idx) const
Definition: multidimstorage.h:308
od_int64 nrIterations() const
Definition: array3dfloodfill.h:65
Threads::ReadWriteLock lock_
Definition: array3dfloodfill.h:99
bool getIndex(int global_pos, IDX &) const
Definition: multidimstorage.h:534
void useInputValue(bool yn)
Definition: array3dfloodfill.h:56
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:64
Array3D< T > & output_
Definition: array3dfloodfill.h:111
Definition: array3dfloodfill.h:94
Given an input array and a threshold, we use flood fill to find all the locations with values less (o...
Definition: array3dfloodfill.h:44
void addSeed(int, int, int)
Definition: array3dfloodfill.h:193
Set of pointers to objects.
Definition: commontypes.h:28
ObjectSet< Compartment > compartments_
Definition: array3dfloodfill.h:103
void setOutput(int, int, int, bool addseed)
Definition: array3dfloodfill.h:200
Array3DImpl< bool > * isdefined_
Definition: array3dfloodfill.h:114
const T * getData() const
Definition: arraynd.h:51
void readLock()
No writers will be active.
void setInsideValue(T val)
Definition: array3dfloodfill.h:54
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
bool isEmpty() const
Definition: multidimstorage.h:252
#define mAllocVarLenArr(type, varnm, __size)
Definition: varlenarray.h:52
int sz2_
Definition: array3dfloodfill.h:92
int nrcomp1_
Definition: array3dfloodfill.h:85
T threshold_
Definition: array3dfloodfill.h:76
TypeSet< int > permutation_
Definition: array3dfloodfill.h:107
void remove(const IDX &index)
Definition: multidimstorage.h:482
T outsideval_
Definition: array3dfloodfill.h:81
int getWorkCompartment(int, int, int) const
Definition: array3dfloodfill.h:178
size_type size() const
Definition: typeset.h:263
int sz0_
Definition: array3dfloodfill.h:90
void use6Neighbors(bool yn)
Definition: array3dfloodfill.h:57
Array3DFloodfill(const Array3D< T > &input, T threshold, bool aboveisovalue, Array3D< T > &output)
Definition: array3dfloodfill.h:122
bool doWork(od_int64 start, od_int64 stop, int)
Definition: array3dfloodfill.h:299
#define mVarLenArr(varnm)
Definition: varlenarray.h:54
int nrcomp0_
Definition: array3dfloodfill.h:83
#define mClass(module)
Definition: commondefs.h:161
#define pErrMsg(msg)
Usual access point for programmer error messages.
Definition: errmsg.h:34
T get(int, int, int) const
Definition: arrayndimpl.h:609
int getNextWorkCompartment()
Definition: array3dfloodfill.h:251
MultiDimStorage< int > seeds_
Protected by lock_.
Definition: array3dfloodfill.h:100
Array3D ( Subclass of ArrayND ) is a three dimensional array.
Definition: arraynd.h:149
T insideval_
Definition: array3dfloodfill.h:80
int compsz2_
Definition: array3dfloodfill.h:88
void addToNrDone(int64_t increment)
void set(int, int, int, T)
Definition: arrayndimpl.h:590
bool isAboveIsovalue() const
Definition: array3dfloodfill.h:61
int use6neighbors_
Definition: array3dfloodfill.h:78
void returnCompartment(int)
Definition: array3dfloodfill.h:289
bool aboveisovalue_
Definition: array3dfloodfill.h:77
Compartment()
Definition: array3dfloodfill.h:96
void setOutsideValue(T val)
Definition: array3dfloodfill.h:185
const Array3D< T > & input_
Not protected.
Definition: array3dfloodfill.h:109
void deepErase(ObjectSet< T > &os)
empty the ObjectSet deleting all objects pointed to.
Definition: objectset.h:122
int maxNrThreads() const
Definition: array3dfloodfill.h:64
bool isused_
Protected by compartmentlock_.
Definition: array3dfloodfill.h:98